0

私は、ライブラリを特定のプロセスに選択的にロードし、特定のネイティブ API 関数を (Detours を使用して) フックするフック コードを見てきました。イベントのチェーンは次のようになります。

  • カーネル ドライバーは、すべてのプロセスにA.dllを読み込みます。
  • A.dll ::は、実際の Detours フックを含むB.dll ( )DllMain()をロードするかどうかを決定します。LoadLibraryEx
  • B.dllは、上記の関数をフックするプロセスの間実行されます。

ここの 2 番目の箇条書きは、ここで指定されている DllMain の規則に違反しているように見えますが、ドライバーの読み込み方法A.dllが制限を回避できるかどうかを調べようとしています。具体的には、カーネル ドライバーはPsSetLoadImageNotifyRoutine、各プロセスの開始時に通知を取得するために使用し、APC を呼び出しLoadLibraryExてキューに入れますA.dll。これは、プロセスの開始時に最初にロードされる DLL であることを意味します。LoadLibraryこれにより、内での呼び出しに関する問題が回避されますDllMainか?

4

2 に答える 2

2

がどのようLoadLibraryExにトリガーされたかは関係ありません。トリガーされると、DLLのロードプロセスは同じになり、同じルールが適用されます。

于 2012-10-30T15:58:38.253 に答える
1

ドキュメントには、DllMain で LoadLibrary を呼び出さないように具体的に記載されています。万一、安全に動作させる方法を見つけたとしても、Windows の次のバージョン (または次のサービス パック) では動作しない可能性があります。

于 2012-10-30T16:03:58.890 に答える