Windows防火墙之NDIS HOOK和TDI HOOK

1、TDI HOOK

 TDI Client利用TDI接口,向TDI Server发送IRP(I/O Request Packet)请求包,来获得TDI Server提供的服务。因此,可以利用分层驱动原理[5],在TDI ClientTDI Server驱动之间加一层过滤驱动-FilterDriver.sys。对于TCP/IP协议而言,在Windows网络协议体系结构中是由Tcpip.sys驱动实现的。Tcpip.sys创建了几个设备对象,/Device/RawIp/Device/Udp/Device/Tcp/Device/Ip /Device/MULTICAST来接收TDI ClientIRP请求包。所以,我们可以在这些设备对象上挂接自己的设备对象,当TDI ClientTDI Server发送IRP包时,该IRP包首先被我们的设备对象截获并交由我们的过滤驱动FilterDriver.sys处理,如果允许这个IRP包下发就放行,否则,在我们的过滤驱动FilterDriver.sys中请求I/O管理器完成该IRP请求。TDI HOOK后结构示意图如下图:

2、NDIS HOOK

 NDIS HOOK 就是通过自定义的回调例程替换NDIS wrapper 的相应函数,使得系统调用被截获的一种系统监视机制。常见实现NDIS hook 的方法是修改NDIS. sys 的导出表(export table),这种方法需要在操作系统重启后才可以生效[ 1 ]。我们提出的是一种注册假协议(fake protocol)的方法,它没有重启限制,不仅加快了开发调试,还可以方便防火墙的使用。

 Windows NT 系统内核中,所有已注册的网络协议都是通过一个单向链表来维护的。链表的节点结构为NDIS_PROTOCOL_BLOCKNDIS_PROTOCOL_CHARACTERISTICS地址就在这个结构中,NDIS_PROTOCOL_CHARACTERISTICS中保存了收包函数地址和注册网络协议时所指定的各种信息,如支持协议即插即用的回调函数地址等。每个协议驱动都对应一个NDIS_OPEN_BLOCK 结构的单向链表来维护其所绑定的适配器信息,协议驱动发送的回调函数地址就保存在这个结构中,我们只需替换这些地址就可以控

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

winsunxu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值