Ⅰ. はじめに
Windows の syscall を hook するメジャーな方法は SSDT Hook です。
しかし、Windows にはカーネル領域の改ざんを検知する仕組みとして Kernel Patch Protection(KPP) 別名 PatchGuard(PG) が存在しています。
KPP/PG の存在によりカーネル領域に存在するSSDTの書き換えは検知され、Windows は BSoD します。
この記事では everdox氏 が作成した InfinityHook を利用する事により SSDT Hook せずに syscall を hook する方法を紹介します。
Ⅱ. やり方
NtOpenProcess を hook するサンプルです。
1. clone する
git clone https://github.com/kagasu/InfinityHookExample
2. コンパイルする
3. 実行する
FAQ
Q. hook できません。
A. InfinityHook は ETW を利用(abuse)している為、一部 syscall の hook が出来ません。
例えば GetContextThread は InfinityHook を利用して hook 出来ません。