ローダの改造(草案)

バイスではないけれども。

Windowsのローダを改造するための草案をメモ。

  1. ドライバの雛型を作成(いつもの感じ)
  2. ドライバ内でプロセス構造ルーチンを登録しておく
  3. 登録したルーチンによって,実行されようとしているイメージのアドレスが判明する
  4. イメージのアドレスをReadVirtualMemoryあたりを用いて読み取り,インポートセクションを走査
  5. フックしたいAPIのアドレスをフック後のAPIのアドレスにWriteVirtualMemoryあたりを用いて書き換え
  6. もちろんフック後のAPIも,イメージがマッピングされたメモリ空間にマッピングしなければならない

かなり荒っぽい仕様ではあるけれども,理論上この方式によりWindowsのローダを(擬似的ではあるが)改造することができると考えられる。特に重要なのは,SSDTフックと異なり,Native APIではなくWindows APIをターゲットにできるところである。Native APIを用いないWindows APIは,どうしてもSSDTフックができない(そんなAPIがあるのかは不明であるけれども)。加えてドライバによるフックであるので,グローバルフック等のユーザモードフックと異なり,まさしく「真の」リアルタイムフックが可能である。これが本当に実装できれば,フック漏れの心配もなくなり,Windowsを様々に改造することができてしまう。

ただ問題が2点。1点目はプロセス構造ルーチンの情報が少なすぎること。単純に日本のサイトがドライバの情報を公開してなさすぎるだけではなく,海外のサイトを調べてもほとんど載っていない。サンプルコードなどほとんど見当たらない。2点目はReadVirtualMemory等,メモリ空間を読み取るNative APIが何故か自分の環境では使用できないところである。

1点目は何とか自分でテストコードを記述してテストしたため,ある程度解決したが,2点目を早期に解決できないと開発が進まない。恐らく焼き付けのドライバ知識の所為で,Native APIの使い方を勉強しきれていないのだと思われる。もう少しこのあたりをがんばって調べてみよう。きっとたぶんプロセス構造ルーチンを調べるより,余程簡単であると思われる。