
Портирование SysWhispers2 на C#. Он использует SharpASM для поиска code caves для выполнения стаба системного вызова.

Портирование SysWhispers2 на C#.
Он использует SharpASM для поиска code caves под выполнение заглушки системного вызова.
Технические подробности читайте в блог-посте: 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)
Инструкции по созданию проекта Visual Studio приведены здесь
Базовый пример внедрения в процесс приведён здесь
На данный момент JSON-файлы содержат данные для генерации 33 системных вызова.
Примечание: пресет All содержит подмножество всех системных вызовов.
==== 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
Генерируется динамически
Содержит делегаты системных вызовов, которые необходимо сгенерировать.
Зависит от SharpASM
Вспомогательный код для получения адреса PEB с помощью ASM.
Содержит код для динамического вызова ASM в c#.
Функцию public static IntPtr callASM(byte[] stub) можно использовать для вызова шеллкода, передавая байтовый массив.
Генерируется динамически — скрипт генерирует случайное зерно (seed) для хеширования имён системных вызовов
Содержит код для получения номеров системных вызовов с использованием техники от ElephantSe4l (код портирован из SysWhispers2).
Зависит от SharpASM
Содержит код для динамического выполнения системных вызовов с помощью ASM.
Также содержит обёртки для системных вызовов (например, Syscall.NtAllocateVirtualMemory) (Генерируются динамически)
Генерируются динамически
Выходные файлы SharpWhispers можно использовать напрямую в проекте C#. Необходимые типы данных представляют собой подмножество типов, определённых в проекте DInvoke (некоторые типы фактически заимствованы из минимизированного проекта Rastamouse), что позволяет уменьшить поверхность обнаружения. Типы данных определены в пространстве имён SharpWhisper.Data, чтобы избежать пересечения с определениями DInvoke.
Примечание: типы данных генерируются только при необходимости (т.е. если системному вызову требуется тип данных), чтобы минимизировать поверхность обнаружения.
Для генерации необходимых типов данных используются следующие шаблоны: