3

CreateFileWindows では、すべてのディスク I/O は最終的にSetFilePointer、 などの Win32 API 呼び出しを介して発生します。

さて、これらのディスク I/O の Win32 呼び出しをインターセプトし、動的にリンクされたすべての Windows アプリケーションに対して、実行時に独自のコードをフックすることは可能でしょうか? つまり、静的な C ライブラリではなく、Windows DLL を介して機能を取得するアプリケーションです。CreateFile

私が持っているいくつかの制約は次のとおりです。

  1. ソース コードがない:傍受したいプロセスのソース コードがありません。

  2. スレッド セーフ:フック コードが独自のメモリを動的に割り当てる場合があります。さらに、このメモリは複数のインターセプトされたプロセス (およびそのスレッド) と共有されるため、アクセスをシリアル化できるようにしたいと考えています。

  3. 条件付き委任とオーバーライド:私のフック コードでは、元の Win32 API 機能に委任するか、独自の機能を使用するか、またはその両方を使用するかを決定できるようにしたいと考えています。(C++ または Java のサブクラスのオーバーライド メソッドでのスーパー クラス メソッドのオプションの呼び出しによく似ています。)

  4. 通常のユーザー空間コード:デバイス ドライバーを作成する必要なく、上記のコードを実行できるようにしたいと考えています。

これが可能であれば、いくつかの指針をいただければ幸いです。ソースコードは必須ではありませんが、いつでも歓迎します!

4

2 に答える 2

2

Detours が必要ない場合は、 mhookを調べることをお勧めします。

フックを使用しているときに発生する可能性のある問題のいくつかを次に示します。

于 2013-10-18T11:11:30.523 に答える
0

Microsoft Detours から始めることをお勧めします。無料版も存在し、かなり強力な安定版もあります。インジェクションの場合、ターゲットのアプリケーションでどのインジェクション方法が機能するかを見つける必要があります。これらを独自にコーディングする必要があるかどうかはわかりませんが、「Extreme Injector」のような単純なツールは、アプローチをテストするのに役立ちます。そして、少なくとも私の意見では、このような単純なタスクのためにカーネルランドのドライバーを開発する必要はありません。私や他の人々の助けを得るために、まずあなたのアプローチを確認するか、目前の問題に対する制約をさらに挙げてください。または、これまでにどこから始めたのですが、問題がありましたか。これにより、多くのおしゃべりが絞り込まれ、時間も節約できます。

Detours from Microsoft (MSFT) に慣れていない場合は、http ://research.microsoft.com/en-us/projects/detours/ からダウンロードしてください。自分でコンパイルする必要があります。非常に簡単で、コンパイル済みの HTML ヘルプ ファイルとサンプルが付属しています。これまでのところ、プロファイルは IAT (インポート アドレス テーブル) と EAT (エクスポート アドレス テーブル) に分類されます。

この非スニペットの回答が、ソリューションへのアプローチに少し役立つことを願っています。行き詰まった場合は、もう一度戻って質問してください。頑張ってください!

于 2015-08-30T06:16:06.503 に答える