フックされているか調査する

そんなアプリ(とドライバ)を書いてます。とりあえず今のところ実装している、実装しようと考えている機能は以下。

  1. KeServiceDescriptorTableのフック検出
  2. KeServiceDescriptorTableShadowのフック検出
  3. /Deviceディレクトリから辿れる全デバイスオブジェクトのIRPハンドラのフック検出
  4. 指定したアドレスのインラインフックの検出(現在簡易実装)
  5. 関数名からアドレスを得る
  6. アドレスからシンボル名を得る(実装方法がわからない)


ユーザインターフェース(exe)を適当にパァーっと書いたら、随分とカオスなソースになってしまったのでうpはどうなるか知らない。


あと、できそうなのでやってみたいこと。

  1. IRPハンドラのフック
  2. カーネルオブジェクトのメソッドフック
  3. 0x90 でシフトさせた上でのインラインフック
before:0xXX 0xXX 0xXX 0xXX 0xXX  
after :0xE9 |     address     |

↑ではなくて↓のように先頭バイトにJMPを仕込まないようにすれば、多少は誤魔化しやすいんじゃないだろうか。

before:0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 0xXX 
after :0x90 0x90 0x90 0x90 0x90 0xE9 |     address     |