0

C++ では、複数の dll をプロセスにフックしたいと考えています。現在、一度にCreateProcesswithdll()1 つの API しかフックできないものを使用しています。複数の dll を挿入するにはどうすればよいですか?

MS detours では、API 呼び出しを適切に迂回するために、カスタム dll に元の dll と同じ名前を付ける必要があるため、この問題に遭遇しました。したがって、作成した同じ迂回 DLL で異なる API 呼び出しを処理することはできますが、異なる API からの呼び出しをフックするには、異なる名前を付ける必要があります。つまり、異なる迂回 Dll が必要です。これは、さまざまな DLL を挿入する必要があることも意味します。私は正しいですか?

不明な点がある場合は、より明確に提示しようとします:D

ありがとう!

PS:私の問題をより明確にするためです。同じプロセスに複数の dll を挿入する必要があります。CreateProcesswithdll()スレッドがスリープ状態の新しいプロセスを作成します。これは、回り道が dll の注入とフックの設定を完了した後に起こされます。複数のdllを注入したい場合、明らかに繰り返し呼び出すことはできませんCreateProcesswithdll()

それで、私は何をしますか?? またはこれのいくつかの側面についての私の理解は間違っていますか?

4

3 に答える 3

2

LoadLibrary() および FreeLibrary() の呼び出しは、DLLMain() から安全ではありません。TFA より:

「エントリポイント関数は、単純な初期化または終了タスクのみを実行する必要があります。LoadLibrary または LoadLibraryEx 関数 (またはこれらの関数を呼び出す関数) を呼び出してはなりません。これは、DLL の読み込み順序で依存ループが作成される可能性があるためです。これにより、次のような結果になる可能性があります。システムが初期化コードを実行する前に使用されている DLL. 同様に、エントリポイント関数は、プロセスの終了中に FreeLibrary 関数 (または FreeLibrary を呼び出す関数) を呼び出してはなりません。終了コードを実行しました。」

編集:お詫び - これは、上記のセルジュの回答に対するコメントとして意図されていました。

于 2011-05-27T20:52:09.617 に答える
2

detourattach私のためにトリックをdetourdetach行うようです。みんな、ありがとう!

このブログは役に立ちました!

于 2011-05-27T18:37:37.027 に答える
1

明らかに、迂回して挿入した最初の DLL から任意の数の DLL をロードできます。

編集。

DLL がロードされると、システムはDLL のDllMainを (fdwReason==DLL_PROCESS_ATTACH で) 実行し、その関数内で好きなことを実行できます。たとえば、LoadLibraryを呼び出して他の DLL をロードできます。

追加: DllMain から LoadLibrary を呼び出すことは安全ではないというコメントに完全に同意します。したがって、DllMain で作成されたスレッドから LoadLibrary (および他のすべてのトリッキーなもの) を呼び出すことができます。

于 2011-05-26T19:04:07.697 に答える