HookDump
EDR関数フックダンプ
詳細については、Zeroperilのブログ記事を参照してください https://zeroperil.co.uk/hookdump/
ビルド方法
- ビルドにはVisual Studio 2019(Community Editionで可)とCMakeが必要です。バッチファイルConfigure.batを実行すると、Visual Studioソリューションを含む2つのビルドディレクトリが作成されます。
- 正しいCMakeコマンドラインを使用すれば、MinGWでもビルドできる可能性がありますが、未テストのため結果は保証できません。
- zydisディスアセンブラに依存しているため、プロジェクトを構成する前に、gitのサブモジュールを更新してください。
- 32ビット版と64ビット版のプロジェクトがあります。EDRは32ビット/64ビットで異なる関数をフックする可能性があるため、両方の実行ファイルをビルドして実行すると、より完全な結果が得られる場合があります。
注意事項
- 一部のEDRは、32ビットバイナリのシステムコールをフックするために、TEB構造体内のWOWスタブ(特にWow32Reserved)を置き換えます。この場合、NTDLLにジャンプ命令が存在しないため、フックが0件と表示される可能性があります。x64バージョンでは、システムコールにWOWスタブではなくsyscall命令が使用されるため、ほとんどの場合フックが検出されます。
- Windows Defenderはユーザーモードフックを使用しないことが確認されています。
- このツールは標準ユーザーとして実行するように設計されており、管理者権限は必要ありません。
検出されるフックの種類
JMP
関数にジャンプ命令がパッチ適用され、実行フローがリダイレクトされています。
WOW
WOW64システムコールスタブがフックされていることを検出します。これにより、すべてのシステムコールのフィルタリングが可能になります。
EAT
エクスポートアドレステーブル内のアドレスが、ディスク上のコピーにあるエクスポートアドレステーブルのアドレスと一致しません。
GPA
GetProcAddressフック(実験的機能)。詳細モードでのみ出力されます。GetProcAddressの結果が手動で解決した関数アドレスと一致しない場合に表示されます。結果は保証できませんので、結果の検証には注意が必要です。
検証方法
プログラムが正しく動作していることを真に確認する唯一の方法は、デバッガでフックが存在するかどうかを確認することです。フックが0件という結果が得られ、何か異なる結果を期待している場合は、まずデバッガで確認し、その上でご連絡ください。