首页
社区
课程
招聘
[求助]微软的wfp例子跟QQ管家不兼容蓝屏问题
发表于: 2016-9-6 09:37 8897

[求助]微软的wfp例子跟QQ管家不兼容蓝屏问题

2016-9-6 09:37
8897
前段时间改了一下微软的wfp例子-inspect,使它能在win7-win10(未安装qq管家)下正常跑起来,但是前些天发现一个现象就是在安装有QQ管家的win8.1或者win10 上不管是x86还是x64系统,一加载驱动就蓝屏,卸了qq管家就没事,安装有360的也没事,就是安装qq管家不行.于是马上搭建双机调试,加载windbg符号,但是发现蓝屏代码每每都不同,且蓝屏时堆栈大多数太深无法定位到例子源码的位置,纠结了几天后无果,挺郁闷的,想问下有没有遇到我类似问题的,或者有没有调试蓝屏高手的帮解决下,谢谢了

蓝屏windbg分析:

1: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

BAD_POOL_CALLER (c2)
The current thread is making a bad pool request.  Typically this is at a bad IRQL level or double freeing the same allocation, etc.
Arguments:
Arg1: 0000000000000007, Attempt to free pool which was already freed
Arg2: 0000000000001200, (reserved)
Arg3: 000000001526d768, Memory contents of the pool block
Arg4: ffffe0011526d638, Address of the block of pool being deallocated

Debugging Details:
------------------

POOL_ADDRESS:  ffffe0011526d638

FREED_POOL_TAG:  Mdl

BUGCHECK_STR:  0xc2_7_Mdl

DEFAULT_BUCKET_ID:  VISTA_DRIVER_FAULT

PROCESS_NAME:  System

CURRENT_IRQL:  2

LAST_CONTROL_TRANSFER:  from fffff802784590ba to fffff802783cb590

STACK_TEXT:  
ffffd000`5a2d5588 fffff802`784590ba : 00000000`00000000 00000000`00000000 ffffd000`5a2d56f0 fffff802`7829e06c : nt!DbgBreakPointWithStatus
ffffd000`5a2d5590 fffff802`784589cb : 00000000`00000003 00000000`00000007 fffff802`783d2980 00000000`000000c2 : nt!KiBugCheckDebugBreak+0x12
ffffd000`5a2d55f0 fffff802`783c4aa4 : ffffe001`1526d628 ffffe001`1535c010 fffff800`6b6c5800 fffff800`00000000 : nt!KeBugCheck2+0x8ab
ffffd000`5a2d5d00 fffff802`78518f5c : 00000000`000000c2 00000000`00000007 00000000`00001200 00000000`1526d768 : nt!KeBugCheckEx+0x104
ffffd000`5a2d5d40 fffff800`6b42f91f : 00000000`00000001 00000000`00000000 00000000`00000000 fffff800`00000026 : nt!ExDeferredFreePool+0x6ec
ffffd000`5a2d5e30 fffff800`6b900824 : ffffe001`1655cbd0 ffffe001`16844860 00000000`00000000 fffff800`6cdf2e27 : NETIO!NetioFreeMdl+0x20d7f
ffffd000`5a2d5e80 fffff800`6b4018c1 : ffffe001`1526d420 00000000`00000001 00000000`00000001 fffff800`6b41a7b0 : tcpip!FlpReturnNetBufferListChain+0x87094
ffffd000`5a2d5ed0 fffff800`6b401402 : ffffe001`1655cbd0 ffffe001`1526d420 00000000`00000000 00000000`00000001 : NETIO!NetioDereferenceNetBufferList+0xc1
ffffd000`5a2d5f50 fffff800`6b876c18 : ffffe001`14ec61a0 ffffe001`15263001 00000000`00000000 00000000`00000000 : NETIO!NetioDereferenceNetBufferListChain+0x2e2
ffffd000`5a2d5ff0 fffff800`6b84c18c : ffffe001`1523062c 00000000`00011521 00000000`00000000 ffffe001`14bb2f68 : tcpip!TcpFlushDelay+0x88
ffffd000`5a2d60a0 fffff800`6b881f9f : ffffe001`148f0510 ffffd000`5a2d508f ffffd000`5a2da1c0 00000000`0000a1c0 : tcpip!TcpPreValidatedReceive+0x3cc
ffffd000`5a2d61a0 fffff800`6b87e143 : ffffe001`14f5f030 ffffe001`15263030 00000000`00000000 00000000`00000001 : tcpip!IppDeliverListToProtocol+0x4f
ffffd000`5a2d6260 fffff800`6b87c525 : 00000000`00000011 fffff800`6b9cc100 00000000`00000000 ffffd000`5a2d6368 : tcpip!IppProcessDeliverList+0x63
ffffd000`5a2d6300 00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : tcpip!IppReceiveHeaderBatch+0x235

STACK_COMMAND:  kb

FOLLOWUP_IP:
NETIO!NetioFreeMdl+20d7f
fffff800`6b42f91f 90              nop

SYMBOL_STACK_INDEX:  5

SYMBOL_NAME:  NETIO!NetioFreeMdl+20d7f

FOLLOWUP_NAME:  MachineOwner

MODULE_NAME: NETIO

IMAGE_NAME:  NETIO.SYS

DEBUG_FLR_IMAGE_TIMESTAMP:  540ebbe6

FAILURE_BUCKET_ID:  X64_0xc2_7_Mdl__NETIO!NetioFreeMdl+20d7f

BUCKET_ID:  X64_0xc2_7_Mdl__NETIO!NetioFreeMdl+20d7f

Followup: MachineOwner

此时 ffffe001`1526d638地址:  0000000000000000

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (21)
雪    币: 56
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
数字 QQ管家这种东西的驱动本身就不兼容很多东西,动不动蓝屏给你看
2016-9-6 09:54
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
360倒是兼容的,没问题,就是QQ管家不行,一加载驱动上网,就蓝屏,而且每次蓝屏代码不同,堆栈里面出现的信息不好确定代码的位置
2016-9-6 10:27
0
雪    币: 557
活跃值: (449)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
你不用太纠结你的驱动是否导致蓝屏了。其实那些做攻防对抗的驱动程序本身就是不厚道的。
在我看来,你的驱动不会蓝屏、功能正常,已经不错了。
你不用特地想着:我要同时兼容360和管家的驱动。没必要。
用户的一台电脑同时安装了多个杀毒软件,本身就是一种愚蠢的行为。
导致蓝屏了,不是你的错。

这些话就是我说的。
2016-9-6 12:41
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
哎,工作需要啊,领导已经下了死令,要跟QQ管家兼容才行,毕竟人家QQ管家财大气粗用户多啊,我好像定位到了一个错误,在TLInspectInjectComplete函数里,但是不是很肯定,WDK里面说这个completionFn里可以释放NET_BUFFER_LIST的啊,微软也是这么写的,真不知道这个完成函数里怎么写好了.
WDK:
The FWPS_INJECT_COMPLETE0 type is defined as a pointer to the completionFn function as follows:

typedef void (NTAPI *FWPS_INJECT_COMPLETE0)  completionFn

The Status member of the NET_BUFFER_LIST structure pointed to by netBufferList indicates the result of the injection operation.

After packet data in a cloned or created NET_BUFFER_LIST structure chain has successfully been injected into the network stack by one of the packet injection functions, completionFn is called.

If the FwpsStreamInjectAsync0 function is called to inject a chain of NET_BUFFER_LIST structures, completionFn will be called once for each NET_BUFFER_LIST in the chain, each time using the same completionContext parameter specified in FwpsStreamInjectAsync0. In this case, the callout driver’s completionFn implementation should call FwpsFreeCloneNetBufferList0 to free the currently indicated NET_BUFFER_LIST.

The filter engine calls a callout's completionFn callout function at IRQL <= DISPATCH_LEVEL.
2016-9-6 13:34
0
雪    币: 12848
活跃值: (9133)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
6
安装你的程序后暴力删除TX管家驱动并重启,即可。
不行就打辞职报告,领导您另请高明吧,我实在不是谦虚。
2016-9-6 13:46
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
360也用了wfp,但是360就能做到和QQ管家和微软例子兼容,而微软这个例子就不能和qq管家兼容,要找到引起蓝屏地方才行.删除TX管家,这个恐怕会被找麻烦
2016-9-6 13:49
0
雪    币: 177
活跃值: (278)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
qq全家桶出了名的兼容差
2016-9-6 13:53
0
雪    币: 12848
活跃值: (9133)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
9
tx写驱动那帮人很不靠谱
2016-9-6 13:57
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这个不好说,可能是我代码的问题导致也不一定,但是也真心奇怪,安装有360或者没装杀软的win8.1或者win10情况下加载这个微软例子正常上网,但是偏偏装了TX管家就不行.找蓝屏原因找了很久也没找到
2016-9-6 14:00
0
雪    币: 8835
活跃值: (2394)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
11
hook掉qq管家ExFreePoolWithTag然后识别TAG是不是你的pool
2016-9-6 14:14
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
嗯,好的,我代码试试,你的思路是微软里面会克隆一个包然后放进队列里,然后你怀疑QQ管家会对这个被克隆过的包进行了释放,导致我的代码里再次释放会蓝屏?
2016-9-6 14:22
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
还是没找到蓝屏地方,自己顶自己一下
2016-9-6 20:13
0
雪    币: 8835
活跃值: (2394)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
14
不是释放,而是pool溢出了,溢出后过一会有pool申请或者pool释放操作时随机地址BSOD,这是很常见的封包数据处理上出现了问题,比如你或者TX的驱动在TL层的数据或者STREAM层上处理buffer使用了某些对方的东西...

PS:
没有dmp没有蓝屏截图,也没有QQ管家的版本,实在不好测死。

PS:
我自己处理方法是FwpsCalloutUnregisterByKey0把tx的callout给日了,就好了
2016-9-6 20:56
0
雪    币: 8835
活跃值: (2394)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
15
QM的CalloutKey的GUID是 9453BCB675CD05A244E6AC6C99586093
好像是这个,我没装QQ管家,管家和我机器上大把的东西冲突。
2016-9-6 22:15
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
今早用ARK工具把 QQ管家的5个filter给去掉,就不蓝了,昨晚找到蓝屏的地方是FwpsInjectTransportReceiveAsync0->调用自己设置的完成回调TLInspectInjectComplete,走完这个完成回调后,走进系统自己的函数NETIO!NetioDereferenceNetBufferListChain+0x2d1后蓝屏,  简言之就是TLInspectInjectComplete->蓝屏->返回FwpsInjectTransportReceiveAsync0下一句地方  ,蓝屏代码多数为 Bad_pool_caller 或者为 IROL等级错误
2016-9-7 10:49
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
虽然定位到了蓝屏是在系统的完成回调中释放了已经释放的pool,但是还是没能找出原因,郁闷中...
2016-9-7 13:58
0
雪    币: 8835
活跃值: (2394)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
18
就是pool被提前释放了。
2016-9-8 00:23
0
雪    币: 3116
活跃值: (1264)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
19
修改前兼容吗?附件是你修改后的吗?
2016-9-20 12:55
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
修改前是不能在win7-10正常系统未安装任何杀软下跑的, 修改后是能在win7-10未安装QQ管家下跑的,这个附件例子是我稍加修改后的
2016-9-21 09:42
0
雪    币: 3116
活跃值: (1264)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
21
修改前不能跑?微软的SAMPLE怎么会跑不了
2016-9-22 12:28
0
雪    币: 39
活跃值: (158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
微软的例子是在vista上跑没问题的,但在win7-10就要稍加改下(callout函数原型已经变了),你试试看
2016-9-22 15:11
0
游客
登录 | 注册 方可回帖
返回
//