
Porte em C# do SysWhispers2. Ele usa o SharpASM para encontrar as code caves para executar o stub de chamada de sistema.

Uma versão em C# do SysWhispers2.
Ele usa SharpASM para encontrar os code caves para executar o stub de chamada de sistema.
Leia a postagem do blog para obter os detalhes técnicos: 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)
As instruções para criar o projeto no Visual Studio estão disponíveis aqui
Um exemplo básico de injeção de processo é fornecido aqui
Atualmente, os arquivos json contêm os dados para gerar 33 chamadas de sistema.
Nota: o preset All contém um subconjunto de todas as chamadas de sistema.
==== 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
Gerado dinamicamente
Contém os delegates das chamadas de sistema a serem geradas
Depende do SharpASM
Auxiliar para obter o endereço da PEB usando ASM
Contém o código para chamar ASM dinamicamente em C#.
A função public static IntPtr callASM(byte[] stub) pode ser usada para chamar o shellcode passando um byte array.
Gerado dinamicamente - O script gera uma semente aleatória para aplicar hash aos nomes das chamadas de sistema
Contém o código para recuperar os números das chamadas de sistema usando a técnica de ElephantSe4l (código portado de SysWhispers2).
Depende do SharpASM
Contém o código para executar as chamadas de sistema dinamicamente usando ASM.
Também contém os wrappers para as chamadas de sistema (ex.: Syscall.NtAllocateVirtualMemory) (Gerado dinamicamente)
Gerado dinamicamente
Os arquivos de saída do SharpWhispers podem ser usados diretamente em um projeto C#. Os tipos de dados necessários são um subconjunto dos tipos de dados definidos no projeto DInvoke (alguns tipos de dados são, na verdade, emprestados do projeto minimizado do Rastamouse) a fim de reduzir a superfície de detecção. Os tipos de dados são definidos no namespace SharpWhisper.Data para evitar sobreposição com as definições do DInvoke.
Nota: Os tipos de dados são gerados apenas quando necessário (ou seja, se uma chamada de sistema precisar de um tipo de dados) para minimizar a superfície de detecção.
Os seguintes modelos são usados para gerar os tipos de dados necessários: