2004年01月09日
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 と呼んでいるらしい。