1

我目前正在开发一个项目,该项目需要在 IE 中挂钩 TCP send 和 recv API 以监控 TCP 数据。它在 IE9 和 IE10 上运行良好。但它停止在 IE11 上工作。经过一番研究,我发现 IE11 使用 WSASend 和 WSARecv 来发送和接收数据。所以我决定挂钩 WSASend 和 WSARecv。

WSARecv 是一个重叠操作。有 3 种方法可以获得重叠操作的结果。当使用重叠操作时,它们要么具有关联的事件、完成例程,要么与 I/O 完成端口关联。我在IE11调用WSARec时检查了重叠结构,发现事件和完成例程都是NULL,所以我假设IE11使用IO完成端口来获取重叠操作的结果。

问题是 IE11 永远不会调用 GetQueuedCompletionStatus 或 GetQueuedCompletionStatusEx。我使用 API 监视器或直接挂钩这两个函数,从来没有看到这两个函数被调用。我不知道 IE11 是否使用不同的 API 集来获取 WSARec 的结果。我想知道是否有人遇到过类似的问题。我应该挂钩哪个 API?如果有替代方法可以实现相同的目标。基本上我想做的是在 IE11 中监控 TCP 数据。

4

3 回答 3

1

您需要挂钩CreateThreadpoolIo

于 2015-04-15T18:05:54.277 回答
1

你可以在ntdll中设置断点!NtDeviceIoControlFile,所有的socket API最终都被路由到了,所以你可以知道使用的是哪一个。

于 2014-06-23T09:23:47.613 回答
0

您还需要过滤 WSARecvMsg、WSASendMsg 等 winsock 扩展函数,为此您需要挂钩 WSAIoctl 并替换扩展函数指针

于 2014-06-25T04:11:39.533 回答