APIフックについてまとめておこう

madCodeHook
概要(英語)
API Spying Techniques for Windows 9x, NT and 2000
概要その2(英語)
The Code Project - API hooking revealed - System
解説@Code Project.
Amazon.co.jp: 本 Advanced Windows
まじめにやるならこの本を購入しよう。
dchookのソース
サンプルその1。Dokopopのソースコード。
Regmonのソース
サンプルその2。Regmonのソース。昔はソース公開されていたが、現在はされていないみたい。「regsrc.zip」でぐぐってみると、誰かが昔公開されていたのを2次配布しているのが見つかる・・・かも。
APIHijack
APIフック用のライブラリ解説@code project
DLL Injection and function interception tutorial - The Code Project - DLLs
同じくCode Project から
NyaRuRuの日記
.
Japan.internet.com デベロッパー - 別のプロセスにコードを割り込ませる3つの方法
.

某氏に解説してもらった内容をメモ。

Win32プロセスは EXE や DLL のファイルフォーマットである PE フォーマットのファイルをほぼそのままメモリ上にロードする形で起動される。で、PE フォーマットのバイナリでは API コールというのは全部間接ジャンプになっていて、.idata というセクションにそのジャンプ先の値を書き込んだテーブルが収められている。コンパイル後のアセンブラでは call .idata[ 52] って感じになっていて、.idata 領域に API の実アドレスが一杯並んでいる。Windows の PE ローダは .idata セクションのアドレステーブル中の値を書き換えることで、ロードされたバイナリと API の実コードのある空間とをリンクする。

で、dchook がやっているのは、あるプロセスにおいて利用される API をフックするために、そのプロセスのオンメモリな .idata の中身を上書きするという作業。API のアドレスの代わりにフック関数のアドレスを書き込んでやる。この道の用語では、こういう手法を DLL Injection と呼んでいるらしい。