
# हेडर-ओनली Windows x64 अप्रत्यक्ष syscall लाइब्रेरी। शून्य CRT, शून्य IAT, VEH एंटी-BP, AMSI/ETW बायपास, W^X मेमोरी, प्रति-कॉल डायनामिक स्टब्स।
Windows x64 के लिए header-only लाइब्रेरी जो आपको ntdll imports को छुए बिना, अपने binary में strings छोड़े बिना, और उन सामान्य red flags के बिना किसी भी NT syscall को invoke करने देती है जो EDRs को परेशान कर देते हैं।
कोई CRT नहीं। कोई STL नहीं। कोई IAT नहीं। पूरी चीज़ ~19KB में compile होती है जिसमें literally zero DLL dependencies होती हैं।
मौजूदा syscall लाइब्रेरियों की सामान्य कमियों से बचने के लिए बनाई गई है — plaintext strings, known hash constants, non-ntdll memory से direct syscall, IAT imports जो चिल्लाते हैं "मैं कुछ अजीब कर रहा हूँ", SEC_NO_CHANGE IOC, CRT bloat। यहाँ इनमें से कुछ भी नहीं है।
Syscall Engine
syscall; ret gadget में jump करते हैं, इसलिए syscall instruction fire होने पर RIP हमेशा ntdll के अंदर होता है\KnownDlls\ntdll.dll section mapping से extract किए जाते हैं (कोई filesystem access नहीं, ProcMon के लिए invisible)Anti-Breakpoint
Evasion
AmsiScanBuffer को S_OK return करने के लिए patch करता हैEtwEventWrite को SUCCESS return करने के लिए patch करता हैCode Quality
stealth/ folder को अपने project में डालें और चलें
initialize() \KnownDlls section के माध्यम से ntdll खोलता है, PE exports parse करता है, हर syscall number पकड़ता है.text में syscall; ret gadget के लिए scan करता है — यहीं से actual syscall instruction execute होगाsc::invoke() call करते हैं:
emit_stub() एक unique polymorphic stub बनाता है — random junk instructions पहले/बाद में, per-call key के साथ XOR-obfuscated syscall number, ntdll gadget के लिए indirect jmpकिसी भी बिंदु पर RWX memory मौजूद नहीं होती। किसी भी बिंदु पर syscall instruction ntdll के बाहर execute नहीं होता। किसी भी बिंदु पर syscall numbers plaintext में store नहीं होते।
आप target function के साथ tramp::invoke() call करते हैं। अगर कोई breakpoint नहीं है — function बिना किसी overhead के सामान्य रूप से चलता है। अगर debugger ने 0xCC रखा है:
Debugger की breakpoint list अभी भी इसे active दिखाती है। Breakpoint हमारे calls पर कभी trigger नहीं होता।
cmake -B build -A x64
cmake --build build --config Release
MSVC (VS 2019+) और CMake 3.15+ चाहिए। Output ~19KB है जिसमें zero imports हैं।
#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 — memory ops, spinlock, static_map, PRNG, debug output
hash.hpp — compile-time custom hash
xorstr.hpp — compile-time XOR string encryption
peb.hpp — PEB walk, PE export parser, hook detection
syscall.hpp — indirect syscall engine, stub generator, W^X, anti-dump
trampoline.hpp — VEH-based anti-breakpoint
bypass.hpp — AMSI + ETW patching
MIT — इसके साथ जो चाहें करें।