
NTDLLのアンフッキングとhellsgateゲートの亜種を組み合わせたテクニック
ユーザーランドのEDRバイパス手法で、フックされていない ntdll.dll とフックされた ntdll.dll を自由に切り替えることができます。 これをどのように構築したかはこちらで確認できます。
.h ファイルと .c ファイルをプロジェクトにドラッグアンドドロップするだけで使用できます。CRT 関数のヘッダーファイル定義は、自分で再実装するか、好きなものを使用するかに応じて編集してください。また、プロジェクトが正しく動作するためには switch_memory_protection 関数を自分で実装する必要があるため、.c ファイル内のこの関数も編集する必要があります。
以下はこのライブラリの使用例のスニペットです:
struct hook_cache *cache = 0;
cache = ntdll_reconstruction_init();
if (cache == 0)
// Throw Error!
while (1) {
// Do whatever
cache = ntdll_reconstruction_flip(cache); // Back to hooked stub
if (cache == 0)
// Throw Error!
Sleep(1234);
cache = ntdll_reconstruction_flip(cache); // Back to clean stub
if (cache == 0)
// Throw Error!
}