阅读:3727回复:18
用hook NDIS的NdisMRegisterMiniport做防火墙,实验证明,原理可行。
承前一贴,用hook NDIS的NdisMRegisterMiniport做防火墙,实验证明,经过验证,原理可行。不过如果做成产品的话,估计问题会很多,因为这个那个NDIS_MINIPORT_CHARACTERISTICS在不同的平台上结构不同,不好处理啊,一旦出错就是灭顶之灾。另外还有一个就是Windows 98/95,因为这些烂平台不但支持WDM的驱动,还支持实模式方式下的驱动,还没想好怎么做。哪位精通此道的出来指点一下,让我少走点弯路,感激中。。。
|
|
沙发#
发布于:2002-07-19 10:19
对于PC网络防火墙,有LSP,Hook TDI,IMD等方法,最近看论坛上讨论Hook NDIS,和注册假协议,继而搜索协议链的方法很火,我有一个可能很幼稚的想法,就是既然可以Hook NDIS的NdisRegisterProtocol,NdisOpenAdapter等函数,为什么不能Hook NDIS的NdisMRegisterMiniport函数,这可是网卡调用的阿,如果我在这里用自己函数替换NDIS_MINIPORT_CHARACTERISTICS里面的函数,是不是也可以得到发送,接受的数据,这个时候应该也可以做过滤,加密之类的操作吧?我想这种思路做过防火墙的朋友考虑过吧?但为什么没人讨论呢?难道是这种方法根本没有办法实现?期待高手来指点迷津。 如果网卡驱动不是通过NdisMRegisterMiniport注册网卡的话,这种方法也就失效了,不知道大家有没有遇到过这种情况。 |
|
板凳#
发布于:2002-07-22 16:00
呵呵!你的这个方法是跟网卡紧密的联系到一块了啊!
|
|
地板#
发布于:2002-07-22 17:55
是啊,我就是觉得这种方法可能在95/98下很难实现了。
|
|
地下室#
发布于:2002-07-22 17:57
不过我觉得很奇怪,大家对这个东西的兴趣远没有对灌水的兴趣大啊,真不懂,我们来这里的主要目的还是交流技术阿,我真得很希望大家对这种方法提出更多的批评。
|
|
5楼#
发布于:2002-07-22 18:07
很感兴趣呀,可惜我这几天正在对付我的imd,找不出大块时间,hook那玩艺,俺也没玩过,不敢太露怯。于是表现为浓厚的灌水兴趣了。哎。。
跟一把。 |
|
|
6楼#
发布于:2002-07-22 21:35
呵呵!我现在怀疑系统通知网卡发收数据有可能使用的是irp_mj_DEVICE_CONTROl
|
|
7楼#
发布于:2002-07-23 09:07
呵呵!我现在怀疑系统通知网卡发收数据有可能使用的是irp_mj_DEVICE_CONTROl 那岂不是就可以 Filter 一把? |
|
8楼#
发布于:2002-07-23 09:09
哪位有规则分析的源代码?给来一份,我把这种方法完善一下,看看实际的效果如何。
|
|
9楼#
发布于:2002-07-23 12:17
呵呵!还是自己来吧
|
|
10楼#
发布于:2002-07-23 13:05
自己写多累阿?
|
|
11楼#
发布于:2002-07-24 14:20
[quote]对于PC网络防火墙,有LSP,Hook TDI,IMD等方法,最近看论坛上讨论Hook NDIS,和注册假协议,继而搜索协议链的方法很火,我有一个可能很幼稚的想法,就是既然可以Hook NDIS的NdisRegisterProtocol,NdisOpenAdapter等函数,为什么不能Hook NDIS的NdisMRegisterMiniport函数,这可是网卡调用的阿,如果我在这里用自己函数替换NDIS_MINIPORT_CHARACTERISTICS里面的函数,是不是也可以得到发送,接受的数据,这个时候应该也可以做过滤,加密之类的操作吧?我想这种思路做过防火墙的朋友考虑过吧?但为什么没人讨论呢?难道是这种方法根本没有办法实现?期待高手来指点迷津。 如果网卡驱动不是通过NdisMRegisterMiniport注册网卡的话,这种方法也就失效了,不知道大家有没有遇到过这种情况。 [/quote] fracker兄,好厉害,小弟,光顾着NDIS版了,没看到你的文章。 以前我研究protocol wrapping时,曾想过,不过,一直没有想通一些问题,所以就没有研究下去。 1.PE HOOK,我一直望而却步的。 2.如何接收数据包。对于MINIPORT来说直接从物理网卡的得到数据的,然后通过NdisIndicatePacket向上传递数据包,那么是不是也要拦截NdisIndicatePacket呢。 3.早期通过NdisRegisterMac注册的Miniport怎么处理,因为他的处理方式似乎与现在的处理方式不同。 4.该如何卸载这个hook程序呢。 [编辑 - 7/24/02 by gjpland] |
|
|
12楼#
发布于:2002-07-24 14:35
你这几个问题可都是痛处阿。 2.NdisIndicatePacket这个也还是简单。也Hook一把解决。 3.我知道,在98下的很多.VxD就是用这个API注册,我还没搞清楚。 还有就是我都不知道怎么到98下面去找ndis.vxd的影像,好像跟nt不一样,98下的hook大多都是VMM的Service提供的。 4。这个倒是简单,删除注册表里面的健,删除.sys就可以了。 |
|
13楼#
发布于:2002-07-24 15:04
[quote] 你这几个问题可都是痛处阿。 2.NdisIndicatePacket这个也还是简单。也Hook一把解决。 3.我知道,在98下的很多.VxD就是用这个API注册,我还没搞清楚。 还有就是我都不知道怎么到98下面去找ndis.vxd的影像,好像跟nt不一样,98下的hook大多都是VMM的Service提供的。 4。这个倒是简单,删除注册表里面的健,删除.sys就可以了。 [/quote] 我问的卸载是动态卸载。 |
|
|
14楼#
发布于:2002-07-24 15:12
我想在想到的是只能是删除了重新启动了。
如果动态的话,估计不好办,因为NDIS_MINIPORT_CHARACTERISTICS是在拦截NdisMRegisterMiniport的时候得到的,如果动态卸装了驱动程序,等下次再加载的时候,没有办法找到这个地址的。因为网卡驱动程序只调用一次NdisMRegisterMiniport。 |
|
15楼#
发布于:2002-07-24 15:14
如果我们的程序并没有从内存卸出,倒是可以把所有的地址恢复。
|
|
16楼#
发布于:2002-07-25 12:46
呵呵!动态卸载也应该可以的,在卸载的时候分配内存,设置一条跳转指令啊
|
|
17楼#
发布于:2002-07-25 15:51
老鼠,这不好办吧?驱动再次起来的时候,怎么找这个地址?
而且还有就是有些网卡停止又启动,啊。。。 好烦的,不如不支持动态安装。 |
|
18楼#
发布于:2002-07-25 18:15
没关系的啊!啊,对了,动态卸载之后就不能从新加载了!因为网卡驱动不再调用注册的那个函数了,动态卸载是可以的啊
|
|