首页
社区
课程
招聘
[求助] 新开贴,附上源码 - WFP 过滤驱动在 Windows7 实体机中无法工作的问题
发表于: 2017-4-22 00:35 9600

[求助] 新开贴,附上源码 - WFP 过滤驱动在 Windows7 实体机中无法工作的问题

2017-4-22 00:35
9600

驱动部分是谷歌的示例代码,然后修修改改,实现了过滤指定IP地址的数据包,

暂时只是对收到的包做了处理,在虚拟机中可以完美的改掉收到的http的数据包,

gzip部分是百度的源码,进行了简单的修改,使其能在内核中工作,源码那里下载

的我忘了,请勿口水。

原帖地址:http://bbs.pediy.com/thread-217172.htm

主要实现了:

1:抛弃注册表的配置,使用了载入自定义的配置文件

2:对指定的IP进行过滤

3:对收到的数据包做HTTP解包处理

   1)处理了数据分段接收的情况

   2)处理了 chunked 编码的情况

   3)处理了gzip压缩的情况,修改后重新组装http包头与数据

   4)处理了数据包长度被改变时,重新修改content-length属性。

我的思路:

   add filter 过滤指定的IP地址,不使用 need more data,need more data会造成网页卡住很久

   收到数据包后分析出http包头,再分析出文件格式,放行我们不想要修改的数据文件,比如图片、

   js、css等,判断的主要方法是分析出第一个包含http数据头的数据包,如果是我们感兴趣的内容,

   则将该包block掉,如果还有剩余数据,就将收到的数据累加起来,把收到的包全部block,直到收到

   了最后一个包,然后经过chunked组装,gzip解压,对数据进行扫描替换,再重新组装数据头与数据部分。

   最后将修改的数据包分段注入或者一次性注入来完成动作。。。


但是现在断在了只能在虚拟机中成功,本地电脑中无效,搞了2天,各种方法都尝试了,始终不行,这感觉

就像是你努力了很久,就在很确定自己成功的时候却失败了。。。

小弟刚接触驱动不久,这里附上源码,真心希望有大神能指点一二。。。



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
2
Wfp的filter安装上去了的话,可以自己在netsh里看到的
ps  会不会是你写的过滤规则有问题呢?
2017-4-22 02:58
0
雪    币: 206
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
但是在虚拟机中过滤规则可用可以啊,我把我电脑系统重做跟虚拟机的一样都不行
2017-4-22 09:32
0
雪    币: 206
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我想到的是可能还是实体机缺少了什么依赖,对比了实体机跟虚拟机启动了的sys文件,找到了实体机中的“E1G6032E.sys”没有启动,查的该驱动是跟  NDIS6  相关的东西,但是尝试启动该驱动失败,启动的时候提示  start=4,挨个找注册表跟这相关的东西也没找到  start=4的项目。
2017-4-22 09:37
0
雪    币: 8188
活跃值: (2842)
能力值: ( LV9,RANK:180 )
在线值:
发帖
回帖
粉丝
5
E1G6032E是vmware的网卡驱动吧。最好不要用高版本的wdk编译,因为版本越高的wdk的wdf版本就越高,建议用原生的wdk7600编译试试。最简单就是你试试wdk的sample,你用vs2015编译出来看看真机能不能跑就行了,个人觉得不是你的代码的问题。
2017-4-22 11:22
0
雪    币: 206
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
layerfsd E1G6032E是vmware的网卡驱动吧。最好不要用高版本的wdk编译,因为版本越高的wdk的wdf版本就越高,建议用原生的wdk7600编译试试。最简单就是你试试wdk的sample,你用vs20 ...
不行呢,其他的驱动编译出来都是start=4,这是怎么回事,wdk是8.1的,在Windows7中应该是没有问题的啊,vmware的驱动都是VM_开头的呢
2017-4-22 11:55
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
7
你不会自己强行加载一下
2017-4-24 00:17
0
雪    币: 206
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
cvcvxk 你不会自己强行加载一下
现在找到问题了,还是无意发现的,在写dll的方法修改tcp数据包时候发现的,所有安装了  2345  产品的电脑都会失效,原因是  2345  产品中有个驱动文件  “2345NsProtect.sys”,可能是这个文件。。。他会在  FWPM_LAYER_STREAM_V4  与  FWPM_LAYER_DATAGRAM_DATA_V4  层来注册过滤器,但是我注册的回调还是可以正常的收到数据包的,都是  20/1440  个字节,我猜测的可能原因是在  FWPM_LAYER_STREAM_V4  层做了加密处理,然后在  FWPM_LAYER_DATAGRAM_DATA_V4  层来进行解密,但是  FWPM_LAYER_DATAGRAM_DATA_V4  层好像需要自行维护  TCP  的  ack,不知道怎么做到的。想删除这个文件,删掉后重启会重新生成,注册表修改  start=4,重启后重新变成了1。。。删除  2345  注册的两个过滤器(FWPM_LAYER_STREAM_V4  /FWPM_LAYER_DATAGRAM_DATA_V4)也是这样的情况,反正情况就是有  2345  的产品,我的  wfp  驱动就无效了,不知道怎么破。。。
2017-5-3 23:17
0
雪    币: 206
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
cvcvxk 你不会自己强行加载一下
这个  2345  真是出了名的  “流氓”。。。那个锁定主页为  2345  主页的,好像也是在这个驱动层做的重定向,我现在的想法是既然删不掉也禁这个东西,那么就让他  “失效”,但是不知道怎么做。。。大哥可以指点下么?
2017-5-3 23:20
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
10




grandfather

现在找到问题了,还是无意发现的,在写dll的方法修改tcp数据包时候发现的,所有安装了 2345 产品的电脑都会失效,原因是 2345 产品中有个驱动文件 “2345NsProtect.sys”,可能 ...

其实它只是注册的过滤层比你优先,导致过滤不再走你的部分,于是你就废了。你可以注册成比它优先级更高的。

FWP_EMPTY这样自动分配是不行的哦,你需要最强权重


2017-5-4 03:03
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
11
grandfather 这个 2345 真是出了名的 “流氓”。。。那个锁定主页为 2345 主页的,好像也是在这个驱动层做的重定向,我现在的想法是既然删不掉也禁这个东西,那么就让他 “失效”,但是不知道怎么做。。。大哥可以 ...
你可以试试更强大的某数字产品
2017-5-4 03:03
0
雪    币: 206
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
cvcvxk grandfather 现在找到问题了,还是无意发现的,在写dll的方法修改tcp数据包时候发现的,所有安装了 2345 产品的电脑都会失效 ...
请问最高的优先级是多少呢,我这设置的是  filter.weight.type  =  FWP_DOUBLE;  filter.weight.double64  =  0xFFFFFFFFFFFFFFFF;  但是直接给蓝屏了。
2017-5-4 12:15
0
雪    币: 206
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
grandfather 请问最高的优先级是多少呢,我这设置的是 filter.weight.type = FWP_DOUBLE; filter.weight.double64 = 0xFFFFFFFFFFFFFFFF; 但是 ...
我错了,没注意看类型,应该这样写:
filter.weight.type  =  FWP_UINT64;
UINT64  _64  =  0xFFFFFFFFFFFFFFFF;
filter.weight.uint64  =  &_64;
现在就好了,确实是权重的问题,谢谢你  cvcvxk!
2017-5-4 12:53
0
雪    币: 206
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14




grandfather

请问最高的优先级是多少呢,我这设置的是 filter.weight.type = FWP_DOUBLE; filter.weight.double64 = 0xFFFFFFFFFFFFFFFF; 但是 ...

filter.weight.uint64    =    &_64;

2017-5-4 12:54
0
雪    币: 38
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
楼主能私密我一下吗?有事和你商量
2019-3-8 02:36
0
游客
登录 | 注册 方可回帖
返回
//