Hookの概要
1754 ワード
概要 windowsメッセージメカニズム:osリスニング/スナップイベント->osアプリケーションメッセージキューへのメッセージ送信->アプリケーションgetmessageを使用してメッセージキュー内のメッセージを取得->dispatchmessageを呼び出してメッセージを配布os->osコールバック関数hook:システム内部でのメッセージの伝達を監視するフックであり、windowsメッセージをキャプチャ、処理することができる.予め定義された機能性のコールバック関数を呼び出す.
hookの原理1、システムはフックチェーンを維持しており、hookをインストールするたびにフックチェーンに要素、すなわちフック処理関数を指すポインタを追加する. 2、フックチェーンがメッセージを処理する際、先進的な後処理方式を採用し、システムの各メッセージに対してフックチェーン上の各フックを通過する. 3、メッセージタイプがフック監視のタイプと一致すると、フックはメッセージをキャプチャし、対応する処理を行い、処理後も伝達、修正、または阻止を継続することができる. フックメッセージ処理はシステム性能に影響するため、使用時にタイムリーにアンインストールする必要はない.アンインストールには順序を付ける必要はありません.フックを取り付けるプロセスが終了すると、システムは自動的にフック をアンインストールします.
apiフック を取り付ける
フック処理関数呼び出しプロセス:プロセスAのスレッドがanyプロセスにメッセージを送信する準備ができている場合、メッセージが監視されている場合、フックによってキャプチャされ、システムはフックのフック関数が存在するDLLがプロセスAのアドレス空間にマッピングされているかどうかを検査する.マッピングされていない場合、DLLはプロセスAのアドレス空間に強制的にマッピングされます.次に、プロセスAにおけるフック関数の仮想アドレスを取得し、フック関数を呼び出す.(これもDLL注入の一つの方法です)その他api フック処理関数
ref私の学習ノート_Windows_HOOKプログラミング2009-12-03 11:19 【Windowsコアプログラミング学習ノート】HOOK入門 《windows核心プログラミングシリーズ》18談windowsフック Using Hooks
hookの原理
api
HHOOK WINAPI SetWindowsHookEx(
_In_ int idHook, //
_In_ HOOKPROC lpfn, //
_In_ HINSTANCE hMod, // , NULL
_In_ DWORD dwThreadId // ID,0
);
フック処理関数呼び出しプロセス:プロセスAのスレッドがanyプロセスにメッセージを送信する準備ができている場合、メッセージが監視されている場合、フックによってキャプチャされ、システムはフックのフック関数が存在するDLLがプロセスAのアドレス空間にマッピングされているかどうかを検査する.マッピングされていない場合、DLLはプロセスAのアドレス空間に強制的にマッピングされます.次に、プロセスAにおけるフック関数の仮想アドレスを取得し、フック関数を呼び出す.(これもDLL注入の一つの方法です)
BOOL WINAPI UnhookWindowsHookEx(_In_ HHOOK hhk); //
LRESULT WINAPI CallNextHookEx( //
_In_opt_ HHOOK hhk,
_In_ int nCode,
_In_ WPARAM wParam,
_In_ LPARAM lParam);
LRESULT CALLBACK HookProc(int nCode, WPARAM wParam, LPARAM lParam) {
...
return CallNextHookEx(hhook, nCode, wParam, lParam);
}
ref