86 lines
2.7 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|