
हेडर-ओनली Windows x64 indirect syscall लाइब्रेरी। Zero CRT, zero IAT, VEH anti-BP, AMSI/ETW बाईपास, W^X मेमोरी, per-call डायनामिक स्टब्स।
Windows x64 के लिए Header-only लाइब्रेरी जो आपको ntdll imports को छुए बिना, अपने बाइनरी में स्ट्रिंग्स छोड़े बिना, और उन सामान्य रेड फ्लैग्स के बिना किसी भी NT syscall को कॉल करने देती है जो EDRs को पागल कर देते हैं।
कोई CRT नहीं। कोई STL नहीं। कोई IAT नहीं। पूरी चीज़ ~19KB में कंपाइल होती है, जिसमें सचमुच शून्य DLL डिपेंडेंसी है।
मौजूदा syscall लाइब्रेरियों के सामान्य नुकसानों से बचने के लिए बनाया गया है — प्लेनटेक्स्ट स्ट्रिंग्स, ज्ञात हैश कॉन्स्टेंट, non-ntdll मेमोरी से डायरेक्ट syscall, IAT imports जो "मैं कुछ अजीब कर रहा हूँ" चिल्लाते हैं, SEC_NO_CHANGE IOC, CRT bloat। यहाँ उनमें से कुछ भी नहीं है।
Syscall Engine
syscall; ret गैजेट में कूदते हैं, ताकि syscall इंस्ट्रक्शन फायर होने पर RIP हमेशा ntdll के अंदर हो\KnownDlls\ntdll.dll सेक्शन मैपिंग से निकाले जाते हैं (कोई फाइलसिस्टम एक्सेस नहीं, ProcMon के लिए अदृश्य)Anti-Breakpoint
एवेज़न
AmsiScanBuffer को S_OK लौटाने के लिए पैच करता हैEtwEventWrite को SUCCESS लौटाने के लिए पैच करता हैकोड क्वालिटी
stealth/ फ़ोल्डर को अपने प्रोजेक्ट में ड्रॉप करें और चलें
initialize() \KnownDlls सेक्शन के माध्यम से ntdll खोलता है, PE एक्सपोर्ट्स पार्स करता है, हर syscall नंबर पकड़ता है.text में एक syscall; ret गैजेट स्कैन करता है — यहीं से वास्तविक syscall इंस्ट्रक्शन निष्पादित होगाsc::invoke() कॉल करते हैं:
emit_stub() एक अद्वितीय पॉलीमॉर्फ़िक स्टब बनाता है — पहले/बाद में रैंडम जंक इंस्ट्रक्शन, प्रति-कॉल कुंजी के साथ XOR-अस्पष्ट syscall नंबर, ntdll गैजेट के लिए इनडायरेक्ट jmpकभी भी RWX मेमोरी मौजूद नहीं होती। कभी भी syscall इंस्ट्रक्शन ntdll के बाहर निष्पादित नहीं होता। कभी भी syscall नंबर प्लेनटेक्स्ट में संग्रहीत नहीं होते।
आप टार्गेट फंक्शन के साथ tramp::invoke() कॉल करते हैं। यदि कोई ब्रेकपॉइंट नहीं है — फंक्शन सामान्य रूप से शून्य ओवरहेड के साथ चलता है। यदि डीबगर ने 0xCC रखा है:
डीबगर की ब्रेकपॉइंट सूची अभी भी इसे सक्रिय दिखाती है। ब्रेकपॉइंट बस हमारे कॉल पर कभी ट्रिगर नहीं होता।
cmake -B build -A x64
cmake --build build --config Release
MSVC (VS 2019+) और CMake 3.15+ चाहिए। आउटपुट ~19KB है जिसमें शून्य 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"
// works even if x64dbg has a BP on MessageBoxA
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 — इसके साथ जो चाहें करें।