
Portage en C# de SysWhispers2. Il utilise SharpASM pour trouver les code caves afin d'exécuter le stub d'appel système.

Portage en C# de SysWhispers2.
Il utilise SharpASM pour trouver les code caves permettant d'exécuter le stub d'appel système.
Lisez l'article de blog pour les détails techniques : 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)
Les instructions pour créer le projet Visual Studio sont fournies ici
Un exemple d'injection de processus de base est fourni ici
Pour le moment, les fichiers json contiennent les données pour générer 33 appels système.
Remarque : le préréglage All contient un sous-ensemble de l'ensemble des appels système.
==== 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
Généré dynamiquement
Contient les délégués des appels système à générer.
Dépend de SharpASM
Fonction utilitaire pour obtenir l'adresse du PEB en utilisant l'ASM.
Contient le code pour appeler dynamiquement l'ASM en C#.
La fonction public static IntPtr callASM(byte[] stub) peut être utilisée pour appeler le shellcode en passant un tableau d'octets.
Généré dynamiquement - Le script génère une graine aléatoire pour hacher les noms des appels système
Contient le code pour récupérer les numéros d'appels système en utilisant la technique d'ElephantSe4l (code porté depuis SysWhispers2).
Dépend de SharpASM
Contient le code pour exécuter les appels système dynamiquement en utilisant l'ASM.
Contient également les wrappers pour les appels système (par exemple Syscall.NtAllocateVirtualMemory) (Généré dynamiquement)
Généré dynamiquement
Les fichiers de sortie de SharpWhispers peuvent être utilisés directement dans un projet C#. Les types de données nécessaires sont un sous-ensemble des types de données définis dans le projet DInvoke (certains types de données sont en réalité empruntés au projet minimisé de Rastamouse) afin de réduire la surface de détection. Les types de données sont définis dans l'espace de noms SharpWhisper.Data pour éviter tout chevauchement avec les définitions de DInvoke.
Remarque : Les types de données ne sont générés que si nécessaire (c'est-à-dire si un appel système a besoin d'un type de données) afin de minimiser la surface de détection.
Les modèles suivants sont utilisés pour générer les types de données nécessaires :