3

あまり良い質問ではありません、すみません。

ファイルがエクスプローラーから開かれたときに警告する必要があるプログラムがあります (つまり、ShellExecute(A/W) が呼び出されます)。

残念ながら、Microsoft は、Vista 以降でこれらのイベントをフックできるようにする COM インターフェイス (IShellExecuteHook) を削除しました。これは、古いコードが変更によりクラッシュする可能性があるためと考えられます。この機能を再度有効にする回避策がありましたが、機能しなくなりました。

私はいくつかの調査を行いましたが、ShellExecute への呼び出しをキャッチする唯一の方法は、呼び出しを shell32.dll に再ルーティングすることです。現時点では、独自の DLL をエクスプローラー プロセスに挿入し、ShellExecute の IAT エントリを DLL のアドレス割り当てにコピーし、最後に ShellExecute の IAT エントリを関数を指すように変更することを検討しています。ファイルが開かれたプログラムを開き、以前にアドレスを保存した元の ShellExecute 関数にジャンプします。

ここでの私の最大の懸念はウイルス対策です。彼らは私がエクスプローラーに注入していることを気にしますか? 彼らは、私が IAT を変更していることを気にかけますか?

別の懸念は、これが安全かどうかです。エクスプローラーのセキュリティ特権が CreateRemoteThread を介したインジェクションを許可しないことは可能ですか (または可能性が高いですか)? もしそうなら、この注射を行うためのより良い方法はありますか?

一般的にこれを行うより良い方法はありますか?

編集: 将来これに遭遇する人のために、explorer.exe には shell32.dll の IAT がありません。ヘッダーがありますが、サンクはジャンク値でいっぱいなので、インポートされた関数のエントリを取得する方法はありません (私が知る限り)。
コード トンネリングがこれをフックする唯一の方法のようです。

4

4 に答える 4

3

迂回路ライブラリ:

http://research.microsoft.com/en-us/projects/detours/

Microsoft Researchから、関数の任意のフックが可能になります。あなたはそのショットを与えるかもしれません。

于 2009-11-20T01:20:30.173 に答える
3

優れたウイルス対策ヒューリスティックのほとんどは、インポート テーブルへのパッチ適用を、トロイの木馬の危険信号として検出する必要があります。

madcodehook のオンライン ドキュメントには、さまざまなコード インジェクション手法、その利点/欠点に関する拡張記事がいくつかあり、API には「安全な」フックを指定するためのいくつかのオプションが用意されています: http://www.madshi.net/madCodeHookDescription.htm

于 2009-11-19T17:36:49.950 に答える
3

API フックに関するその他のリソース:

簡単なフック: http://www.codeplex.com/easyhook

Deviare: http://www.nektra.com/products/deviare-api-hook-windows/

興味深い投稿: http://www.codeproject.com/KB/system/hooksys.aspx

API フックを行う場合、どの環境で実行する必要があるかを評価することが非常に重要です。たとえば、すべてのライブラリが x86/x64 をサポートしているわけではありません。

Detours は、ライセンス (有料) バージョンで x64 のみをサポートします。Easy Hook は x86 と x64 をサポートします。

于 2009-11-24T16:33:10.810 に答える
-2

Windows Vista および Windows 7 の Windows エクスプローラーは、ShellExecuteA または ShellExecuteW を呼び出しません。

気にする必要はありません。笑 :-)

加えて、32 ビットと 64 ビットの両方のインライン フックで両方の関数をフックしてテストしました。

ごめん。笑 :-)

于 2011-04-10T20:21:06.500 に答える