私は、ライブラリを特定のプロセスに選択的にロードし、特定のネイティブ 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
か?