2

ライブラリtest.dllをロードするプログラムがあります。このライブラリはws2_32.dllを使用してソケットを作成し、パケットを送受信します。このプロセスに C++ ライブラリを挿入することはできますが、関数「socket」、「accept」などの test.dll 呼び出しを傍受する方法がわかりません。誰でもこの問題で私を助けることができますか? ありがとう!

4

1 に答える 1

2

accept関数をフックする必要があります。これは、MS Detoursなどのライブラリを使用して行うことができます(以前のバージョンは無料で、バージョン1.5を使用できます。グーグルで検索してください)。電話

DWORD a=DetourFindFunction("Ws2_32.dll","accept")

それはあなたにaccept関数へのポインタを与えるでしょう。次に、を呼び出すことによってそれを迂回することができます

DetourFunction(a,&Yourfunction)

DetourFunctionは新しいポインタを「accept」に戻すので、プログラムがクラッシュしないように、「YourFunction」の最後で必ず呼び出してください。

または、Inlineassemblerを使用して、自分で関数をリダイレクトすることもできます。もちろん、これははるかに複雑です。

于 2012-05-15T16:06:48.893 に答える