
Porting in C# di SysWhispers2. Utilizza SharpASM per trovare i code cave in cui eseguire lo stub delle system call.

Porting in C# di SysWhispers2.
Utilizza SharpASM per trovare le code cave per eseguire lo stub delle system call.
Leggi il post del blog per i dettagli tecnici: https://www.secforce.com/blog/sharpasm-sharpwhispers/
______ _ ____ _
/ __/ / ___ ________| | /| / / / (_)__ ___ ___ _______
_\ \/ _ \/ _ `/ __/ _ \ |/ |/ / _ \/ (_-</ _ \/ -_) __(_-<
/___/_//_/\_,_/_/ / .__/__/|__/_//_/_/___/ .__/\__/_/ /___/
/_/ /_/
@d_glenx
@SECFORCE_LTD
=============================================================
usage: SharpWhispers.py [-h] [-p PRESET] [-f FUNCTIONS] -o OUT_FILE
optional arguments:
-h, --help show this help message and exit
-p PRESET, --preset PRESET
Preset ("all", "common", "dinvoke")
-f FUNCTIONS, --functions FUNCTIONS
Comma-separated functions
-o OUT_FILE, --out-file OUT_FILE
Output basename (w/o extension)
Le istruzioni per creare il progetto Visual Studio sono fornite qui
Un esempio di base di injection di processo è fornito qui
Al momento i file JSON contengono i dati per generare 33 system call.
Nota: il preset All contiene un sottoinsieme di tutte le system call.
==== System Calls Imported ====
==[DInvoke]==
[i] Number of Delegates: 13
NtCreateThreadEx
NtCreateSection
NtUnmapViewOfSection
NtMapViewOfSection
NtQueryInformationProcess
NtOpenProcess
NtAllocateVirtualMemory
NtFreeVirtualMemory
NtQueryVirtualMemory
NtProtectVirtualMemory
NtWriteVirtualMemory
NtReadVirtualMemory
NtOpenFile
==[Additional]==
[i] Number of Delegates: 20
NtOpenThread
NtQueueApcThread
NtOpenSection
NtSuspendThread
NtQueryInformationFile
NtSetContextThread
NtResumeProcess
NtOpenProcessToken
NtWaitForMultipleObjects
NtQueryDirectoryFile
NtAdjustPrivilegesToken
NtQuerySystemInformation
NtDeviceIoControlFile
NtResumeThread
NtCreateProcess
NtSuspendProcess
NtGetContextThread
NtClose
NtQueryInformationThread
NtTestAlert
NtCreateThreadEx
NtCreateSection
NtUnmapViewOfSection
NtMapViewOfSection
NtQueryInformationProcess
NtAllocateVirtualMemory
NtFreeVirtualMemory
NtProtectVirtualMemory
NtWriteVirtualMemory
NtOpenFile
NtReadVirtualMemory
NtQueryVirtualMemory
NtOpenProcess
NtCreateThreadEx
NtCreateSection
NtUnmapViewOfSection
NtMapViewOfSection
NtQueryInformationProcess
NtOpenProcess
NtAllocateVirtualMemory
NtFreeVirtualMemory
NtQueryVirtualMemory
NtProtectVirtualMemory
NtWriteVirtualMemory
NtReadVirtualMemory
NtOpenFile
Generato dinamicamente
Contiene i delegati delle system call da generare
Dipende da SharpASM
Helper per ottenere l'indirizzo del PEB usando ASM
Contiene il codice per chiamare dinamicamente ASM in C#.
La funzione public static IntPtr callASM(byte[] stub) può essere utilizzata per chiamare lo shellcode passando un array di byte.
Generato dinamicamente - Lo script genera un seed casuale per calcolare l'hash dei nomi delle system call
Contiene il codice per recuperare i numeri delle system call utilizzando la tecnica di ElephantSe4l (codice portato da SysWhispers2).
Dipende da SharpASM
Contiene il codice per eseguire le system call dinamicamente tramite ASM.
Contiene anche i wrapper per le system call (ad es. Syscall.NtAllocateVirtualMemory) (Generati dinamicamente)
Generati dinamicamente
I file di output di SharpWhispers possono essere utilizzati direttamente in un progetto C#. I tipi di dati necessari sono un sottoinsieme dei tipi di dati definiti nel progetto DInvoke (alcuni tipi di dati sono in realtà presi in prestito dal progetto minimizzato di Rastamouse) in modo da ridurre la superficie di rilevamento. I tipi di dati sono definiti nel namespace SharpWhisper.Data per evitare sovrapposizioni con le definizioni di DInvoke.
Nota: I tipi di dati vengono generati solo se necessario (cioè se una system call richiede un tipo di dati) per minimizzare la superficie di rilevamento.
I seguenti modelli vengono utilizzati per generare i tipi di dati necessari: