AtlasC2/Implant/Tasks/Execute/Administration/Ps.cs

86 lines
2.7 KiB
C#

using System.Text;
using System.Diagnostics;
using Implant.Models;
using static Implant.Utils.Extensions;
namespace Implant.Tasks.Execute
{
class Ps : ImplantCommands
{
private int procIDLen { get; set; }
private int procNameLen { get; set; }
private int procSessionIDLen { get; set; }
public override string Name => "Ps";
public override string Execute(ImplantTask task)
{
StringBuilder _out = new StringBuilder();
var procs = Process.GetProcesses();
procIDLen = psParse.getMaxProcIDLen(procs);
procNameLen = psParse.getMaxProcNameLen(procs) + procIDLen;
procSessionIDLen = psParse.getMaxProcSessionIDLen(procs) + procNameLen;
_out.AppendLine($"{"PID".Align(procIDLen)} {"ProcName".Align(procNameLen)} {"SessionId".Align(procSessionIDLen)}");
_out.AppendLine($"{"---".Align(procIDLen)} {"--------".Align(procNameLen)} {"---------".Align(procSessionIDLen)}");
foreach (var proc in procs){
if(task.Args != null && proc.ProcessName == task.Args) {
_out.AppendLine($"{proc.Id.Align(procIDLen)} {proc.ProcessName.Align(procNameLen)} " +
$"{proc.SessionId.Align(procSessionIDLen)}");
}
if (task.Args == null) {
_out.AppendLine($"{proc.Id.Align(procIDLen)} {proc.ProcessName.Align(procNameLen)} " +
$"{proc.SessionId.Align(procSessionIDLen)}");
}
}
_out.AppendLine();
return _out.ToString();
}
}
public sealed class psParse
{
public static int getMaxProcIDLen(Process[] procs) {
var maxProcIDLen = 0;
foreach (var proc in procs) {
if (proc.Id.ToString().Length > maxProcIDLen) {
maxProcIDLen = proc.Id.ToString().Length;
}
}
return maxProcIDLen;
}
public static int getMaxProcNameLen(Process[] procs) {
int maxProcNameLen = 0;
foreach (var proc in procs) {
if (proc.ProcessName.Length > maxProcNameLen) {
maxProcNameLen = proc.ProcessName.Length;
}
}
return maxProcNameLen;
}
public static int getMaxProcSessionIDLen(Process[] procs){
int maxProcSessionIDLen = 0;
foreach (var proc in procs) {
if (proc.SessionId.ToString().Length > maxProcSessionIDLen) {
maxProcSessionIDLen = proc.SessionId.ToString().Length;
}
}
return maxProcSessionIDLen;
}
}
}