Да, это очередная библиотека для системных вызовов, но эта необычная. Это C++20 фреймворк на основе заголовочных файлов с политико-ориентированным дизайном. Это не черный ящик - вы собираете свою стратегию syscall'ов на этапе компиляции.
Можно миксовать политики для:
Распределения памяти:
Ограничения:
GitHub: https://github.com/sapdragon/syscalls-cpp
Можно миксовать политики для:
Распределения памяти:
- HeapAllocator: Хранит стабы в приватной исполняемой куче
- SectionAllocator: Использует секцию с SEC_NO_CHANGE (не перезаписываемая без ремаппинга)
- VirtualMemoryAllocator: Обычный NtAllocateVirtualMemory (RW -> RX)
- DirectStubGenerator: Классический автономный syscall-стаб
- GadgetStubGenerator: Прыгает на syscall; ret гаджет в ntdll.dll
- ExceptionStubGenerator: Триггерит breakpoint (ud2) для syscall'а через кастомный VEH
- ExceptionDirectoryParser: Парсит PE exception directory (.pdata секцию)
- SignatureScanningParser: Сканит прологи функций на mov r10, rcx; mov eax, syscall_id с детектом хуков
C++:
#include "syscall.hpp"
using MyStealthyManager = syscall::Manager<
syscall::policies::SectionAllocator, // стабы в защищенной секции
syscall::policies::GadgetStubGenerator // через гаджет
>;
int main() {
MyStealthyManager syscalls;
if (!syscalls.initialize())
return 1;
syscalls.invoke<NTSTATUS>(SYSCALL_ID("NtAllocateVirtualMemory"), /* аргументы */);
return 0;
}
- Только x64
- Пока нет stack spoofing (детектится instrumentation callbacks)
- Нет No-CRT версии ( пока что )
GitHub: https://github.com/sapdragon/syscalls-cpp