
C#-Portierung von SysWhispers2. Es verwendet SharpASM, um die Code Caves für die Ausführung des System-Call-Stubs zu finden.

C#-Portierung von SysWhispers2.
Es verwendet SharpASM, um die Code-Caves für die Ausführung des System-Call-Stubs zu finden.
Lies den Blogbeitrag für die technischen Details: 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)
Die Anleitung zum Erstellen des Visual-Studio-Projekts ist hier verfügbar.
Ein einfaches Beispiel zur Prozessinjektion ist hier verfügbar.
Derzeit enthalten die JSON-Dateien die Daten, um 33 Systemaufrufe zu generieren.
Hinweis: Die Voreinstellung All enthält eine Teilmenge aller Systemaufrufe.
==== 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
Dynamisch generiert
Enthält die Delegaten der zu generierenden Systemaufrufe.
Abhängig von SharpASM
Hilfsprogramm zum Abrufen der Adresse der PEB mittels ASM.
Enthält den Code, um ASM in C# dynamisch aufzurufen.
Die Funktion public static IntPtr callASM(byte[] stub) kann verwendet werden, um den Shellcode durch Übergabe eines Byte-Arrays aufzurufen.
Dynamisch generiert – Das Skript erzeugt einen zufälligen Seed, um die Namen der Systemaufrufe zu hashen.
Enthält den Code, um die Systemaufrufnummern mithilfe der Technik von ElephantSe4l abzurufen (Code portiert von SysWhispers2).
Abhängig von SharpASM
Enthält den Code, um die Systemaufrufe mithilfe von ASM dynamisch auszuführen.
Enthält außerdem die Wrapper für die Systemaufrufe (z. B. Syscall.NtAllocateVirtualMemory) (dynamisch generiert)
Dynamisch generiert
Die Ausgabedateien von SharpWhispers können direkt in einem C#-Projekt verwendet werden. Die benötigten Datentypen sind eine Teilmenge der Datentypen, die im DInvoke-Projekt definiert sind (einige Datentypen sind tatsächlich aus Rastamouses minimiertem Projekt entnommen), um die Erkennungsfläche zu verkleinern. Die Datentypen sind im SharpWhisper.Data-Namespace definiert, um Überschneidungen mit den Definitionen von DInvoke zu vermeiden.
Hinweis: Die Datentypen werden nur bei Bedarf generiert (d. h. wenn ein Systemaufruf einen Datentyp benötigt), um die Erkennungsfläche zu minimieren.
Die folgenden Vorlagen werden verwendet, um die benötigten Datentypen zu generieren: