1

私は現在、TCP データを監視するために IE で TCP send および recv API をフックする必要があるプロジェクトに取り組んでいます。IE9 と IE10 で問題なく動作します。しかし、IE11では動かなくなりました。いくつかの調査の後、IE11 は WSASend と WSARecv を使用してデータを送受信することがわかりました。そこで、WSASend と WSARecv をフックすることにしました。

WSARecv は重複した操作です。オーバーラップした操作の結果を取得するには、3 つの方法があります。オーバーラップ操作が使用される場合、関連するイベント、完了ルーチンがあるか、または I/O 完了ポートに関連付けられています。IE11 が WSARec を呼び出したときにオーバーラップした構造を確認したところ、イベントと完了ルーチンの両方が NULL であることがわかったので、IE11 は IO 完了ポートを使用してオーバーラップした操作の結果を取得していると思います。

問題は、GetQueuedCompletionStatus または GetQueuedCompletionStatusEx が IE11 によって呼び出されないことです。API モニターを使用するか、これら 2 つの関数を直接フックしますが、これら 2 つの関数が呼び出されることはありません。IE11 が別の API セットを使用して WSARec の結果を取得するかどうかはわかりません。誰かが同様の問題に遭遇したのだろうか。どの API をフックする必要がありますか? 同じ目標を達成する別の方法がある場合。基本的にやりたいことは、IE11でTCPデータを監視することです。

4

3 に答える 3

1

ntdll にブレークポイントを設定できます。NtDeviceIoControlFile。すべてのソケット API が最終的にルーティングされるため、どれが使用されているかがわかります。

于 2014-06-23T09:23:47.613 に答える
0

また、WSARecvMsg、WSASendMsg などの winsock 拡張関数をフィルター処理する必要があります。これには、WSAIoctl をフックして拡張関数ポインターを置き換える必要があります。

于 2014-06-25T04:11:39.533 に答える