Генератор заголовочных и ассемблерных файлов для прямых системных вызовов Windows, применяется для обхода перехватов AV/EDR на уровне user-mode API.
Оригинальная реализация на C техники Hell's Gate — динамическое разрешение адресов системных вызовов NTDLL в обход …
Инструмент для извлечения паролей, хешей, PIN-кодов и Kerberos-тикетов из памяти Windows. Поддерживает Pass-the-Hash, Pass-the-Ticket, Golden/Silver Ticket, …
Кросс-платформенный инструмент для извлечения сохранённых паролей из десятков приложений: браузеры, почтовые клиенты, SSH-клиенты, мессенджеры, БД, VPN, …
Современный C2-фреймворк (Command & Control) с поддержкой кастомных имплантов (Demon), reflective loading, sleep obfuscation, OPSEC-режимов и …
git clone https://github.com/klezVirus/SysWhispers3.git cd SysWhispers3 python .\syswhispers.py --help
SysWhispers помогает обойти обнаружение, генерируя заголовочные/ASM-файлы, которые импланты могут использовать для прямого вызова системных вызовов.
Заходите в Discord!
Причин, по которым SysWhispers3 стал отдельным проектом, много, но самые важные из них:
Использование похоже на SysWhispers2, за исключением следующего:
Лучшее объяснение этих функций приведено в статье блога SysWhispers мёртв, да здравствует SysWhispers!
Продукты безопасности, такие как антивирусы и EDR, обычно устанавливают хуки в пользовательские API-функции, чтобы анализировать поток выполнения программы и выявлять потенциально вредоносную активность.
SysWhispers2 — это инструмент, предназначенный для генерации пар заголовочных/ASM-файлов для любых системных вызовов в основном образе ядра
(ntoskrnl.exe), которые затем можно интегрировать и вызывать напрямую из кода на C/C++, обходя хуки в пользовательском режиме.
Однако инструмент генерирует некоторые шаблоны, которые могут быть включены в сигнатуры, или поведение, которое может быть обнаружено во время выполнения.
SysWhispers3 разработан на базе SysWhispers2 и включает некоторые полезные функции для обхода таких методов обнаружения.
C:\> git clone https://github.com/klezVirus/SysWhispers3.git
C:\> cd SysWhispers3
C:\> python .\syswhispers.py --help
Справка показывает все доступные команды и функции инструмента:
C:\>python syswhispers.py -h
usage: syswhispers.py [-h] [-p PRESET] [-a {x86,x64}] [-m {embedded,egg_hunter,jumper,jumper_randomized}] [-f FUNCTIONS] -o OUT_FILE [--int2eh] [--wow64] [-v] [-d]
SysWhispers3 - SysWhispers on steroids
optional arguments:
-h, --help show this help message and exit
-p PRESET, --preset PRESET
Preset ("all", "common")
-a {x86,x64}, --arch {x86,x64}
Architecture
-c {msvc,mingw,all}, --compiler {msvc,mingw,all}
Compiler
-m {embedded,egg_hunter,jumper,jumper_randomized}, --method {embedded,egg_hunter,jumper,jumper_randomized}
Syscall recovery method
-f FUNCTIONS, --functions FUNCTIONS
Comma-separated functions
-o OUT_FILE, --out-file OUT_FILE
Output basename (w/o extension)
--int2eh Use the old `int 2eh` instruction in place of `syscall`
--wow64 Use Wow64 to run x86 on x64 (only usable with x86 architecture)
-v, --verbose Enable debug output
-d, --debug Enable syscall debug (insert software breakpoint)
# Export all functions with compatibility for all supported Windows versions (see example-output/).
py .\syswhispers.py --preset all -o syscalls_all
# Export just the common functions (see below for list).
py .\syswhispers.py --preset common -o syscalls_common
# Export NtProtectVirtualMemory and NtWriteVirtualMemory with compatibility for all versions.
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem
# Normal SysWhispers, 32-bits mode
py .\syswhispers.py --preset all -o syscalls_all -m jumper --arch x86
# Normal SysWhispers, using WOW64 in 32-bits mode (only specific functions)
py .\syswhispers.py --functions NtProtectVirtualMemory,NtWriteVirtualMemory -o syscalls_mem --arch x86 --wow64
# Egg-Hunting SysWhispers, to bypass the "mark of the sycall" (common function)
py .\syswhispers.py --preset common -o syscalls_common -m egg_hunter
# Jumping/Jumping Randomized SysWhispers, to bypass dynamic RIP validation (all functions) using MinGW as the compiler
py .\syswhispers.py --preset all -o syscalls_all -m jumper -c mingw
PS C:\Projects\SysWhispers2> py .\syswhispers.py --preset common --out-file temp\syscalls_common -v
. ,--.
,-. . . ,-. . , , |-. o ,-. ,-. ,-. ,-. ,-. __/
`-. | | `-. |/|/ | | | `-. | | |-' | `-. . \
`-' `-| `-' ' ' ' ' ' `-' |-' `-' ' `-' '''
/| | @Jackson_T
`-' ' @modexpblog, 2021
Edits by @klezVirus, 2022
SysWhispers3: Why call the kernel when you can whisper?
Common functions selected.
Complete! Files written to:
temp\syscalls_common.h
temp\syscalls_common.c
temp\syscalls_common_.asm
Press a key to continue...
Makefile для 64 бит:
Makefile.msvc
OPTIONS = -Zp8 -c -nologo -Gy -Os -O1 -GR- -EHa -Oi -GS-
LIBS = libvcruntime.lib libcmt.lib ucrt.lib kernel32.lib
program:
ML64 /c syscalls-asm.x64.asm /link /NODEFAULTLIB /RELEASE /MACHINE:X64
cl.exe $(OPTIONS) syscalls.c program.c
link.exe /OUT:program.x64.exe -nologo $(LIBS) /MACHINE:X64 -subsystem:console -nodefaultlib syscalls-asm.x64.obj syscalls.obj program.obj
Makefile для 32 бит:
Makefile.msvc
OPTIONS = -Zp8 -c -nologo -Gy -Os -O1 -GR- -EHa -Oi -GS-
LIBS = libvcruntime.lib libcmt.lib ucrt.lib kernel32.lib
program:
ML /c syscalls-asm.x86.asm /link /NODEFAULTLIB /RELEASE /MACHINE:X86
cl.exe $(OPTIONS) syscalls.c program.c
link.exe /OUT:program.x86.exe -nologo $(LIBS) /MACHINE:X86 -subsystem:console -nodefaultlib syscalls-asm.x86.obj syscalls.obj program.obj
Компиляция с помощью nmake:
nmake -f Makefile.msvc
Makefile для 64 и 32 бит:
Makefile.mingw
CC_x64 := x86_64-w64-mingw32-gcc
CC_x86 := i686-w64-mingw32-gcc
OPTIONS := -masm=intel -Wall
program:
$(CC_x64) syscalls.c program.c -o program.x64.exe $(OPTIONS)
$(CC_x86) syscalls.c program.c -o program.x86.exe $(OPTIONS)
Компиляция с помощью make:
make -f Makefile.mingw
win32k.sys) не поддерживаются.syscalls.h уже определены.--preset all редко требуется).syscalls.h.--verbose можно включить вывод отладочной информации во время генерации кода.--debug инструмент вставит программную точку останова в заглушку syscall, чтобы упростить отладку в WinDbg.error A2084:constant value too large, перегенерируйте заглушки.Разработан @Jackson_T и @modexpblog, но основан на работе многих других:
Как и оригинал, этот проект также распространяется под лицензией Apache License 2.0.