Windows x64向けのヘッダーオンリーライブラリで、ntdllのインポートに触れることなく、バイナリに文字列を残すことなく、EDRを混乱させるような一般的なレッドフラグなしで、任意のNTシステムコールを呼び出すことができます。
CRTなし。STLなし。IATなし。全体で約19KBにコンパイルされ、DLL依存関係は文字通りゼロです。
既存のシステムコールライブラリの一般的な落とし穴(平文文字列、既知のハッシュ定数、非ntdllメモリからの直接システムコール、「何か変なことをしている」と叫ぶIATインポート、SEC_NO_CHANGE IOC、CRTの肥大化)を回避するように設計されています。ここにはそのようなものは一切ありません。
システムコールエンジン
syscall; retガジェットにジャンプするため、syscall命令が発火するときRIPは常にntdll内にあります\KnownDlls\ntdll.dllセクションマッピングからシステムコールを抽出(ファイルシステムへのアクセスなし、ProcMonからは不可視)アンチブレークポイント
回避
AmsiScanBufferをパッチしてS_OKを返すようにしますEtwEventWriteをパッチしてSUCCESSを返すようにしますコード品質
stealth/フォルダをプロジェクトにドロップするだけですぐに使用可能
initialize()が\KnownDllsセクションを通じてntdllを開き、PEエクスポートを解析し、すべてのシステムコール番号を取得します.textをスキャンしてsyscall; retガジェットを探します — 実際のsyscall命令が実行されるのはここですsc::invoke()を呼び出すと:
emit_stub()が一意のポリモーフィックスタブを構築 — 前後にランダムなジャンク命令、コールごとのキーでXOR難読化されたシステムコール番号、ntdllガジェットへの間接jmpRWXメモリが存在する瞬間はありません。syscall命令がntdllの外で実行される瞬間はありません。システムコール番号が平文で保存される瞬間はありません。
ターゲット関数を指定して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 — 間接システムコールエンジン、スタブジェネレーター、W^X、アンチダンプ
trampoline.hpp — VEHベースのアンチブレークポイント
bypass.hpp — AMSI + ETWパッチング
MIT — 好きなように使ってください。