
헤더 전용 Windows x64 간접 시스템 호출 라이브러리. 제로 CRT, 제로 IAT, VEH anti-BP, AMSI/ETW 우회, W^X 메모리, 호출별 동적 스텁.
Windows x64 전용 헤더-온리 라이브러리로, ntdll 임포트를 건드리지 않고, 바이너리에 문자열을 남기지 않으며, EDR이 발작을 일으키게 만드는 일반적인 위험 요소 없이 임의의 NT 시스템 콜을 호출할 수 있습니다.
CRT 없음. STL 없음. IAT 없음. 전체 컴파일 결과는 약 19KB, DLL 종속성이 전혀 없습니다.
기존 syscall 라이브러리의 흔한 함정(평문 문자열, 알려진 해시 상수, ntdll이 아닌 메모리에서의 직접 syscall, "뭔가 이상한 짓을 하는 중"임을 알리는 IAT 임포트, SEC_NO_CHANGE IOC, CRT 비대화)을 피하기 위해 제작되었습니다. 여기에는 그런 것들이 전혀 없습니다.
Syscall 엔진
syscall; ret 가젯으로 점프하므로, syscall 명령어가 실행될 때 RIP는 항상 ntdll 내부에 있습니다\KnownDlls\ntdll.dll 섹션 매핑에서 syscall을 추출합니다 (파일 시스템 접근 없음, ProcMon에 보이지 않음)안티-브레이크포인트
회피
AmsiScanBuffer를 패치하여 S_OK 반환EtwEventWrite를 패치하여 SUCCESS 반환코드 품질
stealth/ 폴더를 프로젝트에 넣고 바로 사용 가능
initialize()는 \KnownDlls 섹션을 통해 ntdll을 열고, PE 내보내기를 파싱하여 모든 syscall 번호를 가져옵니다.text에서 syscall; ret 가젯을 스캔합니다 — 실제 syscall 명령어가 실행될 위치입니다sc::invoke() 호출 시:
emit_stub()가 고유한 다형성 스텁을 생성합니다 — 전후에 무작위 junk 명령어, 호출별 키로 XOR 난독화된 syscall 번호, ntdll 가젯으로의 간접 jmp어느 순간에도 RWX 메모리는 존재하지 않습니다. ntdll 외부에서 syscall 명령어가 실행되는 일은 없습니다. syscall 번호가 평문으로 저장되는 일도 없습니다.
tramp::invoke()를 대상 함수와 함께 호출합니다. 브레이크포인트가 없으면 — 함수는 오버헤드 없이 정상 실행됩니다. 디버거가 0xCC를 설정했다면:
디버거의 브레이크포인트 목록에는 여전히 활성화된 것으로 표시됩니다. 브레이크포인트는 우리 호출에서 절대 트리거되지 않을 뿐입니다.
cmake -B build -A x64
cmake --build build --config Release
MSVC (VS 2019+)와 CMake 3.15+가 필요합니다. 출력 결과는 약 19KB이며 임포트가 전혀 없습니다.
#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
);
#include "stealth/trampoline.hpp"
// x64dbg가 MessageBoxA에 BP를 설정해도 작동
int ret = stealth::tramp::invoke<int>(
HASH_CI("user32.dll"), HASH("MessageBoxA"),
(HWND)nullptr, (LPCSTR)"hello", (LPCSTR)"title", (UINT)MB_OK
);
#include "stealth/bypass.hpp"
stealth::bypass::patch_etw();
stealth::bypass::patch_amsi();
stealth::tramp::shutdown();
stealth::sc::shutdown();
stealth/
common.hpp — 메모리 연산, 스핀락, static_map, PRNG, 디버그 출력
hash.hpp — 컴파일타임 사용자 정의 해시
xorstr.hpp — 컴파일타임 XOR 문자열 암호화
peb.hpp — PEB 워킹, PE 내보내기 파서, 후크 탐지
syscall.hpp — 간접 syscall 엔진, 스텁 생성기, W^X, 안티-덤프
trampoline.hpp — VEH 기반 안티-브레이크포인트
bypass.hpp — AMSI + ETW 패치
MIT — 원하는 대로 사용하세요.