商用アプリケーションで使用する API フック ライブラリまたはコードの推奨事項は何ですか?
私は Microsoft Detours を見てきましたが、これは非常に優れているように見えますが、アプリケーションから期待する利益を得るには予算がありません。
WinXP と Vista (および Windows 7) の間で互換性を提供するライブラリはありますか? そのようなライブラリを商用製品で使用した経験のある人はいますか?
Win32 での API フックは、システム全体の意味では実際には不可能です。各プロセスに DLL を挿入し、内部から各プロセスにパッチを適用することで、これを近似できます。IAT パッチ (呼び出し元のバイナリにパッチを当てる) または Detours スタイルのパッチ (呼び出し先にパッチを当てる) のいずれかを使用できます。
呼び出し元にパッチを適用する (IAT パッチ) とは、プロセスに読み込まれるすべての DLL を列挙し、それぞれに個別にパッチを適用する必要があることを意味します。LoadLibrary
また、オンザフライでロードされる新しい DLL にパッチを適用するためにフックする必要があります。
呼び出し先にパッチを適用する (Detours) には、1 つの場所にパッチを適用するだけで、プロセス全体にフックを適用できるという利点があります。
共有システム DLL から API をフックしている場合でも、プロセスごとにパッチを適用する必要があります。OS はコピー オン ライトを呼び出します。これにより、システム DLL にパッチを適用すると、パッチを適用するプライベート コピーがプロセスに与えられます。
DLL の注入は少し厄介になり、ここでもいくつかのテクニックがありAppInit_DLLs
ます。Vista および Windows 7 の整合性レベルにより、システム全体のプロセスへの注入がより困難になります。アプリを正常に実行するには、アプリを管理者権限と高い整合性レベルで実行する必要があります。USER32.DLL
SetWindowsHookEx
CreateRemoteThread
もう 1 つの手法は、カーネル モードでシステム サービスをフックすることです。これにはデバイス ドライバーを作成する必要がありますが、基本的にはSysinternals Process Monitorが使用する (少なくとも一度は使用した) 手法です。これは、64 ビット Vista および Win7 での問題です。これは、PatchGuardおよびドライバーの署名要件が原因です。ファイル システム フィルタードライバーを使用して、一部のファイル システム アクティビティを監視できます。
NCodeHook lib(http://newgre.net/ncodehook)を試すこともできます。これは無料で小さいです。
MinHookをお勧めします。これは間違いなく最高の無料ライブラリであり、Microsoft Detours よりも悪くありません。
あなたは何をしようとしているのですか?インポート テーブルにパッチを適用するだけで十分ですか? 私はhttp://jpassing.wordpress.com/2008/01/06/using-import-address-table-hooking-for-testing/のバリエーションを自宅でのいくつかの楽しいサイド プロジェクトに使用しました。
EasyHook を試すことができます。便利そうです。ただし、「システム全体」にパッチを当てることはできません。そのためには、プロキシ DLL のようなものが必要になります。