pretty pretty stuffs (cd + ls align)
This commit is contained in:
parent
4e02eda1b1
commit
e0c0395024
|
@ -18,7 +18,7 @@ namespace Client.Utils.TaskUtils
|
|||
{
|
||||
|
||||
if (opts is null) { throw new AtlasException($"[*] Usage: Cd [Path]\n"); }
|
||||
if (!(opts.Length == 2)) { throw new AtlasException($"[*] Usage: Cd [Path]\n"); }
|
||||
if (opts.Length > 2) { throw new AtlasException($"[*] Usage: Cd [Path]\n"); }
|
||||
if(CurrentImplant is null) { throw new AtlasException("[-] No connected implant"); }
|
||||
|
||||
newDir = opts[1];
|
||||
|
|
|
@ -17,7 +17,7 @@ namespace Client.Utils.TaskUtils.AdminUtils
|
|||
{
|
||||
|
||||
if (opts is null) { throw new AtlasException($"[*] Usage: Ls [Path]\n"); }
|
||||
if (!(opts.Length == 2)) { throw new AtlasException($"[*] Usage: Ls [Path]\n"); }
|
||||
if (opts.Length > 2) { throw new AtlasException($"[*] Usage: Ls [Path]\n"); }
|
||||
if (CurrentImplant is null) { throw new AtlasException("[-] No connected implant"); }
|
||||
|
||||
path = opts[1];
|
||||
|
|
|
@ -21,6 +21,12 @@ namespace Implant.Tasks.Execute
|
|||
path = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile);
|
||||
}
|
||||
|
||||
if (path == ".."){
|
||||
string[] dirArr = Directory.GetCurrentDirectory().ToString().Split('\\');
|
||||
Array.Resize(ref dirArr, dirArr.Length - 1);
|
||||
path = string.Join("\\", dirArr);
|
||||
}
|
||||
|
||||
Directory.SetCurrentDirectory(path);
|
||||
|
||||
return $"[*] Path set to {Directory.GetCurrentDirectory()}";
|
||||
|
|
|
@ -3,15 +3,23 @@ using System.Text;
|
|||
|
||||
using Implant.Models;
|
||||
|
||||
using static Implant.Utils.Extensions;
|
||||
|
||||
namespace Implant.Tasks.Execute
|
||||
{
|
||||
class Ls : ImplantCommands
|
||||
{
|
||||
private string targetPath { get; set; }
|
||||
|
||||
private int fileNameLen { get; set; }
|
||||
private int fileSizeLen { get; set; }
|
||||
private int dirNameLen { get; set; }
|
||||
|
||||
public override string Name => "Ls";
|
||||
|
||||
public override string Execute(ImplantTask task)
|
||||
{
|
||||
|
||||
targetPath = task.Args;
|
||||
|
||||
StringBuilder _out = new StringBuilder();
|
||||
|
@ -20,19 +28,64 @@ namespace Implant.Tasks.Execute
|
|||
targetPath = Directory.GetCurrentDirectory();
|
||||
}
|
||||
|
||||
|
||||
var dirs = Directory.GetDirectories(targetPath);
|
||||
foreach(var dir in dirs){
|
||||
var dirData = new DirectoryInfo(dir);
|
||||
_out.AppendLine($"{dirData.Name}");
|
||||
var files = Directory.GetFiles(targetPath);
|
||||
|
||||
dirNameLen = lsParse.getMaxDirLen(dirs);
|
||||
fileNameLen = lsParse.getMaxFileLen(files);
|
||||
|
||||
if (dirNameLen < fileNameLen) {
|
||||
_out.AppendLine($"{"Name".Align(fileNameLen)} {"Length".Align(fileNameLen + 5)}");
|
||||
_out.AppendLine($"{"----".Align(fileNameLen)} {"------".Align(fileNameLen + 5)}");
|
||||
} else {
|
||||
_out.AppendLine($"{"Name".Align(dirNameLen)} {"Length".Align(dirNameLen + 5)}");
|
||||
_out.AppendLine($"{"----".Align(dirNameLen)} {"------".Align(dirNameLen + 5)}");
|
||||
}
|
||||
|
||||
foreach (var dir in dirs){
|
||||
var dirData = new DirectoryInfo(dir);
|
||||
_out.AppendLine($"{dirData.Name.Align(dirNameLen)}");
|
||||
}
|
||||
|
||||
var files = Directory.GetFiles(targetPath);
|
||||
foreach (var file in files) {
|
||||
var fileData = new FileInfo(file);
|
||||
_out.AppendLine($"{fileData.Name} {fileData.Length}");
|
||||
|
||||
if (dirNameLen < fileNameLen){ _out.AppendLine($"{fileData.Name.Align(fileNameLen)} {fileData.Length.Align(fileSizeLen + 5)}"); }
|
||||
else{ _out.AppendLine($"{fileData.Name.Align(dirNameLen)} {fileData.Length.Align(dirNameLen + 5)}"); }
|
||||
|
||||
}
|
||||
|
||||
return _out.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
public sealed class lsParse
|
||||
{
|
||||
public static int getMaxDirLen(string[] dirs) {
|
||||
int maxDirNameLen = 0;
|
||||
|
||||
foreach (var dir in dirs) {
|
||||
var dirData = new DirectoryInfo(dir);
|
||||
if (dirData.Name.Length > maxDirNameLen) {
|
||||
maxDirNameLen = dir.Length;
|
||||
}
|
||||
}
|
||||
|
||||
return maxDirNameLen + 5;
|
||||
}
|
||||
|
||||
public static int getMaxFileLen(string[] files) {
|
||||
int maxfileNameLen = 0;
|
||||
|
||||
foreach (var file in files) {
|
||||
var fileData = new FileInfo(file);
|
||||
if(fileData.Name.Length > maxfileNameLen){
|
||||
maxfileNameLen = fileData.Name.Length;
|
||||
}
|
||||
}
|
||||
|
||||
return maxfileNameLen;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,10 +3,16 @@ 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)
|
||||
|
@ -14,16 +20,58 @@ namespace Implant.Tasks.Execute
|
|||
|
||||
StringBuilder _out = new StringBuilder();
|
||||
|
||||
_out.AppendLine($"{"PID", -15} {"ProcName", -35} {"SessionId",-45}");
|
||||
_out.AppendLine($"{"---", -15} {"--------", -35} {"---------",-45}");
|
||||
|
||||
var procs = Process.GetProcesses();
|
||||
|
||||
foreach(var proc in procs){
|
||||
_out.AppendLine($"{proc.Id, -15} {proc.ProcessName, -35} {proc.SessionId, -45}");
|
||||
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){
|
||||
_out.AppendLine($"{proc.Id.Align(procIDLen)} {proc.ProcessName.Align(procNameLen)} {proc.SessionId.Align(procSessionIDLen)}");
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,5 +20,9 @@ namespace Implant.Utils
|
|||
|
||||
using (var stream = new MemoryStream(data)) { return (T) serializer.ReadObject(stream); }
|
||||
}
|
||||
|
||||
public static string Align(this object T , int lenth) {
|
||||
return T.ToString().PadRight(lenth);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue