Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ICALL-GADGET — アンチチートのスタックウォーキングを回避するために、正規のカーネルモジュールの制御フローを自身の不正なカーネルモジュールへリダイレクトするためのエクスプロイト | Kitploit
ツール/GitHubGitHub/gmh5225/icall-gadget
永続化メカニズムエクスプロイトIDS/IPS回避リバースエンジニアリングシェルコードレッドチーミングペイロード開発バイナリエクスプロイト
GitHubgmh5225/icall-gadget

ICALL-GADGET

アンチチートのスタックウォーキングを回避するために、正規のカーネルモジュールの制御フローを自身の不正なカーネルモジュールへリダイレクトするためのエクスプロイト

リポジトリを見る
122年前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

通信のためのICALLガジェット悪用

一般情報: これはWindowsカーネル内にあり、アンチチートに検出されることなくドライバー内で通信できるようにします

そこでIDAをスクロールしていたところ、これを見つけました

image

さらに詳しく調べると、_guard_dispatch_icall_ptrという関数を呼び出していることがわかります。icallは基本的にraxへのjmpなので、少し考えればこの関数全体を変更して、シェルコードを使ってハンドラを呼び出すようにできます。

シェルコード

raxをハンドラ関数へのポインタに設定するシェルコードを作成します。そうすれば、関数が呼び出されたときにシェルコードが実行され、ハンドラが呼び出されます。シェルコードを作成する際は、変更するコードとまったく同じバイトサイズであることを確認する必要があります。以下は私が使用したシェルコードのasmでの例です。これをバイトに変換する必要があります。

 sub    rsp,0x38
 movabs rax,0xdeadbeef #placeholder for handler
 movabs r10,0xab39cfee
 inc    rax
 dec    rax
 call   QWORD PTR [rip+0x720d4]        # 0x720f8
 jmp    0x29

コード

cppでは、関数のアドレスを取得してシェルコードをそこにマップするだけですが、ここで注意が必要です。単純にそのまま行うとスタックが破壊され、時々ブルースクリーンになります。これを避けるにはスタックを修復する必要があります。したがって、ハンドラ内でリターンするのではなく、変更していない場合に関数が行うはずの同じ操作を実行する必要があります。アンチチートを回避する素晴らしい方法を spoonfeed したくないので、これは読者自身で行うことにしますが、関数の元のasmを見て、何を変更しているかを確認することを忘れないでください。補足: スタック破壊を修正し、ハンドラ内で関数が意図していたことを行えば、何も変更されていないように見えます! :)

 //getting address to function
 FunctionAddress = module + 0xD70C; 
  
 BYTE shellcode[] = { 0x48, 0x83, 0xEC, 0x38, 0x48, 0xB8, 0xEF, 0xBE, 0xAD, 0xDE, 0x00, 0x00, 0x00, 0x00, 0x49, 0xBA, 0xEE, 0xCF, 0x39, 0xAB, 0x00, 0x00, 0x00, 0x00, 0x48, 0xFF, 0xC0, 0x48, 0xFF, 0xC8, 0xFF, 0x15, 0xD4, 0x20, 0x07, 0x00, 0xE9, 0x00, 0x00, 0x00, 0x00 };

 memcpy(&shellcode[6], &hkfunction, 8);

 DisableWriteProtection();
 memcpy((PVOID)FunctionAddress, &shellcode, sizeof(shellcode));
 EnableWriteProtection();

まとめ

この簡単な記事から何か得られたことを願います。より複雑なほど多くのことができる他のガジェットも見つけられることを知っておいてください。

ツールをダウンロード