c - NDIS 钩子(Hook) sendPacketsHandler

标签 c hook wdk ndis wdm

我使用 NdisRegisterProtocol() 来注册协议(protocol)驱动程序,并使用 _NDIS_OPEN_BLOCK_NDIS_PROTOCOL_BLOCK 结构来 Hook ReceivePacketHandler 成功,使用 MyRecivePacket() 而不是 NDIS 接收数据包功能,当我打开一个网站时, MyRecievePacket() 将运行。

我的问题是: 当我使用 IE 打开网站(如 www.stackoverflow.com)时,我如何 Hook SendPacketsHandler 以获取此数据包并获取url www.stackoverflow.com 字符串。也就是说,如何在内核态下抓取url。谢谢

最佳答案

这不是你通常应该做的事情,URL 数据属于网络堆栈的应用层,不应该被驻留在内核空间中的较低层访问。在此处查看有关 Windows 网络体系结构中协议(protocol)驱动程序分层的更多信息:http://msdn.microsoft.com/en-us/library/windows/hardware/ff571073(v=vs.85).aspx

但是,通过位于其之上的协议(protocol)(例如 HTTPTCP)删除在到达协议(protocol)驱动程序的过程中添加到数据包的 header 可能是可能的IP 等。您需要知道在前往协议(protocol)驱动程序的途中应用于数据包的确切协议(protocol)。标题是递增添加的,对于每个底层,来自上层的输入是一个不透明的数据 block (由上层数据和标题组成)。例如,您的数据包可能以纯数据开始,在开始时向其添加 HTTP header ,之后添加 TCP header ,然后添加 IP header 那。您需要以相反的顺序删除 header 以恢复原始数据。

请注意,这并不总是可行的,因为下行协议(protocol)可能会更改数据,例如通过加密它。在这种情况下,您将无法通过执行反向操作(例如解密)来提取原始数据。

关于c - NDIS 钩子(Hook) sendPacketsHandler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581939/

相关文章:

node.js - Sequelize 钩子(Hook)不触发

c# - 打印服务器 - 想要捕获打印命令

c - 仅打印包含 C 关键字的第一行和最后一行

c - C MIPS 环境中延迟 1 微秒

c - 如何使用指针更改方法内的值

c++ - 如何在不注入(inject)任何 DLL 的情况下单击窗口时返回窗口句柄?

c -\b 和\r 在 C 中的用法

c++ - 当绕过 C++ 中的函数从目标进程中的 ExtTextOut 复制数据字符串时,malloc 会导致崩溃吗?

c - 包括 DDK header

c - 将 32 位 Windows 驱动程序移植到 64 位 Windows