【问题标题】:How to correctly hook WSARecv in IE11如何在 IE11 中正确挂钩 WSARecv
【发布时间】:2014-06-23 02:24:40
【问题描述】:

我目前正在做一个项目,该项目需要在 IE 中挂钩 TCP 发送和接收 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 数据。

【问题讨论】:

  • 听起来你在写间谍软件......
  • 其实它不是间谍软件。我正在监视 TCP 数据以生成日志信息,例如 SSL 连接计数。我不能在 HTTP 级别上做,所以我必须在 TCP 级别上做......

标签: sockets tcp internet-explorer-11 hook apimonitor


【解决方案1】:

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

【讨论】:

  • 感谢您的提示。我尝试挂钩 NtDeviceIoControlFile 并打印出 AFD_RECV 的 Event 和 ApcRoutine 参数。日志显示所有 ApcRoutine 为空,并且大约 80% 的事件参数设置为空。如果 Event 和 ApcRoutine 都为 null,我仍然不明白如何检索结果。
  • IE11 在我的测试中使用 WSARecv 作为同步调用。在 github 中查看我的工具:github.com/xwlan/dprobe,其中包括一个用于捕获所有套接字调用的套接字过滤器。
【解决方案2】:

你需要挂钩CreateThreadpoolIo

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-13
      • 2021-01-18
      相关资源
      最近更新 更多