如何在IE11中正确挂钩WSARecv

时间:2014-06-23 02:24:41

标签: sockets tcp hook internet-explorer-11

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

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

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

3 个答案:

答案 0 :(得分:1)

您需要挂钩CreateThreadpoolIo

答案 1 :(得分:0)

你可以在ntdll! NtDeviceIoControlFile 中设置一个断点,所有套接字API最终被路由到,这样你就可以知道使用了哪一个。

答案 2 :(得分:0)

你还需要过滤winsock扩展函数,比如WSARecvMsg,WSASendMsg,为此你需要挂钩WSAIoctl&替换扩展函数指针