Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
stealth_call — Header-only Windows x64 библиотека косвенных системных вызовов. Ноль CRT, ноль IAT, VEH anti-BP, обход AMSI/ETW, память W^X, динамические заглушки для каждого вызова. | Kitploit
Инструменты/GitHubGitHub/kitsune-de/stealth_call
Оборонительные ИнструментыЭксплуатацияАнализ вредоносных программRed TeamingРазработка Полезной НагрузкиАнти-Бот
GitHubkitsune-de/stealth_call

stealth_call

Header-only Windows x64 библиотека косвенных системных вызовов. Ноль CRT, ноль IAT, VEH anti-BP, обход AMSI/ETW, память W^X, динамические заглушки для каждого вызова.

Репозиторий
784 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

stealth_call


Что это?

Библиотека только с заголовочными файлами для Windows x64, которая позволяет вызывать любые NT-сисколы без обращения к импортам ntdll, без оставления строк в вашем бинарнике и без обычных красных флагов, от которых EDR сходят с ума.

Никакого CRT. Никакого STL. Никакого IAT. Всё компилируется примерно до ~19KB буквально с нулевыми зависимостями от DLL.

Создана для обхода типичных недостатков существующих библиотек сисколов — открытых строк, известных хэш-констант, прямых сисколов из памяти вне ntdll, IAT-импортов, кричащих «я делаю что-то странное», IOC SEC_NO_CHANGE, раздутого CRT. Ничего из этого здесь нет.


Возможности

Движок сисколов

  • Косвенные сисколы — стабы прыгают в собственный гаджет syscall; ret внутри ntdll, поэтому RIP всегда находится внутри ntdll в момент срабатывания инструкции syscall
  • Генерация стаба для каждого вызова — каждый отдельный вызов создаёт свежий стаб со случайным мусором, случайной компоновкой и XOR-зашифрованным номером сискола. Ничего не переиспользуется
  • Принудительный W^X — scratch-страницы переключаются RW → RX → RW. RWX никогда не выделяется, точка
  • Стабы затираются сразу после каждого вызова
  • Сисколы извлекаются из section mapping \KnownDlls\ntdll.dll (без обращения к файловой системе, невидимо для ProcMon)
  • 977 сисколов разрешается в типичной системе Win11

Анти-брейкпоинт

  • Подход на основе VEH — если отладчик ставит 0xCC на вашу целевую функцию, обработчик исключений незаметно восстанавливает исходный байт, выполняет инструкцию в режиме single-step, а затем возвращает брейкпоинт на место. Отладчик никогда не узнает, что его обошли. Нулевое временное окно
  • Работает с любой функцией в любой DLL, не только в ntdll

Обход

  • Обход AMSI — патчит AmsiScanBuffer для возврата S_OK
  • Обход ETW — патчит EtwEventWrite для возврата SUCCESS
  • Всё патчинг выполняется через прямые сисколы, а не через VirtualProtect
  • XOR-зашифрованные строки повсюду — имена DLL, пути, всё. Расшифровываются на стеке, затираются после использования
  • Кастомный алгоритм хэширования (не FNV-1a, не CRC32 — никаких известных YARA-сигнатур)
  • PEB walk для разрешения всех модулей/функций — никаких GetModuleHandle, никаких GetProcAddress

Качество кода

  • Только заголовочные файлы — закиньте папку stealth/ в свой проект и работайте
  • Потокобезопасность через per-thread scratch-страницы + спинлоки
  • Полная очистка при завершении — scratch-страницы освобождаются, карты обнуляются, VEH удаляется
  • Детектирование хуков для типичных EDR-трамплинов (jmp rel32, jmp [rip], mov rax + jmp rax)

Как это работает

flow

Путь сискола

  1. initialize() открывает ntdll через section \KnownDlls, разбирает PE-экспорты, собирает все номера сисколов
  2. Сканирует .text ntdll в поисках гаджета syscall; ret — именно отсюда будет выполняться фактическая инструкция syscall
  3. Когда вы вызываете sc::invoke():
    • Ищет запись сискола по хэшу
    • Забирает scratch-страницу вызывающего потока (или выделяет новую, только RW)
    • emit_stub() создаёт уникальный полиморфный стаб — случайные мусорные инструкции до/после, XOR-обфусцированный номер сискола с ключом для каждого вызова, косвенный jmp к гаджету ntdll
    • Переключает страницу RW → RX
    • Вызывает через стаб
    • Переключает обратно RX → RW
    • Обнуляет байты стаба

Ни в один момент не существует RWX-памяти. Ни в один момент инструкция syscall не выполняется за пределами ntdll. Ни в один момент номера сисколов не хранятся в открытом виде.

VEH-трамплин

Вы вызываете tramp::invoke() с целевой функцией. Если брейкпоинта нет — функция просто выполняется как обычно с нулевыми накладными расходами. Если отладчик поставил 0xCC:

  1. Срабатывает исключение INT3
  2. Наш VEH-обработчик проверяет, есть ли адрес в нашей таблице (поиск по хэшу, не линейный скан)
  3. Восстанавливает исходный байт из чистой копии, прочитанной с диска
  4. Устанавливает Trap Flag
  5. Продолжает выполнение — реальная инструкция выполняется
  6. Срабатывает исключение single-step
  7. Обработчик возвращает 0xCC на место

Список брейкпоинтов отладчика по-прежнему показывает его как активный. Брейкпоинт просто никогда не срабатывает на наших вызовах.


Сборка

root@kitploit:~
cmake -B build -A x64
cmake --build build --config Release

Требуется MSVC (VS 2019+) и CMake 3.15+. Результат — ~19KB с нулевыми импортами.


Использование

Сисколы

root@kitploit:~
#include "stealth/syscall.hpp"

stealth::sc::initialize();

PVOID base = nullptr;
SIZE_T size = 0x1000;
NTSTATUS status = stealth::sc::invoke<NTSTATUS>(
    HASH("NtAllocateVirtualMemory"),
    NtCurrentProcess(), &base, (ULONG_PTR)0, &size,
    (ULONG)(MEM_COMMIT | MEM_RESERVE), (ULONG)PAGE_READWRITE
);

Анти-брейкпоинт

root@kitploit:~
#include "stealth/trampoline.hpp"

// работает, даже если в x64dbg стоит BP на MessageBoxA
int ret = stealth::tramp::invoke<int>(
    HASH_CI("user32.dll"), HASH("MessageBoxA"),
    (HWND)nullptr, (LPCSTR)"hello", (LPCSTR)"title", (UINT)MB_OK
);

AMSI / ETW

root@kitploit:~
#include "stealth/bypass.hpp"

stealth::bypass::patch_etw();
stealth::bypass::patch_amsi();

Очистка

root@kitploit:~
stealth::tramp::shutdown();
stealth::sc::shutdown();

Структура проекта

root@kitploit:~
stealth/
  common.hpp      — операции с памятью, спинлок, static_map, PRNG, отладочный вывод
  hash.hpp        — кастомный хэш времени компиляции
  xorstr.hpp      — XOR-шифрование строк времени компиляции
  peb.hpp         — PEB walk, парсер PE-экспортов, детектирование хуков
  syscall.hpp     — движок косвенных сисколов, генератор стабов, W^X, анти-дамп
  trampoline.hpp  — анти-брейкпоинт на основе VEH
  bypass.hpp      — патчинг AMSI + ETW

Лицензия

MIT — делайте с ней что хотите.

Скачать инструмент