首页
社区
课程
招聘
[讨论]一个关于过滤驱动的神奇问题
发表于: 2013-2-6 21:12 6837

[讨论]一个关于过滤驱动的神奇问题

2013-2-6 21:12
6837
一个过滤驱动 装上IOCTL通信后 在r3执行到CloseHandle(hDevice);《也就是卸载时》时蓝屏
单独的过滤驱动 和 单独的通信模块都没有蓝屏错误

请教一下各位这是什么问题,需要如何修改

dump附上:

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
2
close处理有问题
2013-2-6 21:58
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
十分感谢您的回答
我是这样编写的:
NTSTATUS DispatchClose(PDEVICE_OBJECT pDevObj, PIRP pIrp)
{
        pIrp->IoStatus.Status = STATUS_SUCCESS;
        pIrp->IoStatus.Information = 0;
        IoCompleteRequest(pIrp, IO_NO_INCREMENT);
        KdPrint (("close\n"));
        return STATUS_SUCCESS;
}
请问如何修改才是正确的呢?
2013-2-6 22:30
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我看了网上对这个close的处理都是这样写的
2013-2-6 22:47
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
5
自己拿Windbg分析一下啊。你自己有source,有binary,有symbol,别人什么都没有。不自己分析,拿个mini dump给别人,能看出什么东西?

以下是windbg分析的结果(摘取了重点)。
异常是Access Violation。从现状看,可能是你调用了非法的函数指针,或者栈溢出破坏了返回地址。

这是Windbg给出的推测:
*** Possible invalid call from b6d4fc03 ( +0x20006e )
*** Expected target 9ef46eb0 ( +0x20006e )

请结合下面的stack trace自己分析。你只给了一个dump,既无源代码又无符号,甚至连汇编、机器码都没有。没有什么好办法分析。

EXCEPTION_CODE: (NTSTATUS) 0xc0000005 - 0x%08lx

FAULTING_IP:
hips+14e4
a21c64e4 ??              ???

eax=00000000 ebx=00000000 ecx=e81f72a8 edx=88b39180 esi=e81f72a8 edi=88b39180
eip=a21c64e4 esp=b6d4fbf0 ebp=b6d4fbf0 iopl=0         nv up ei ng nz na pe nc
cs=0008  ss=0010  ds=0023  es=0023  fs=0030  gs=0000             efl=00010286

LAST_CONTROL_TRANSFER:  from b6d4fc08 to a21c64e4

POSSIBLE_INVALID_CONTROL_TRANSFER:  from b6d4fc03 to 9ef46eb0

STACK_TEXT:  
栈帧      返回地址   参数1~3
WARNING: Stack unwind information not available. Following frames may be wrong.
b6d4fbec b6d4fc08 83c88747 e81f72a8 88b39180 hips+0x14e4
b6d4fbf0 83c88747 e81f72a8 88b39180 e8193f80 0xb6d4fc08
b6d4fc08 83ea9538 86fc5ac8 e8193f68 00000001 nt!IofCallDriver+0x63
b6d4fc48 83e70078 8ad32178 e8193f80 00000001 nt!IopCloseFile+0x2f3
b6d4fc94 83e92da2 8ad32178 b0c6d328 87beeae0 nt!ObpDecrementHandleCount+0x139
b6d4fcdc 83e945a2 b0c6d328 e56e41c0 8ad32178 nt!ObpCloseHandleTableEntry+0x203
b6d4fd0c 83e9471a 8ad32178 87beea01 0012f3ac nt!ObpCloseHandle+0x7f
b6d4fd28 83c8f6ea 000000e0 0012f3b0 77c56194 nt!NtClose+0x4e
b6d4fd28 77c56194 000000e0 0012f3b0 77c56194 nt!KiFastCallEntry+0x12a
2013-2-7 02:39
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
6
hips.sys的模块范围是
a21c5000 a21cc000   hips

出错地址是:
hips+14e4
a21c64e4 ??              ???

自己分析一下为什么出错了
2013-2-7 02:48
0
雪    币: 796
活跃值: (370)
能力值: ( LV9,RANK:380 )
在线值:
发帖
回帖
粉丝
7
给个忠告,不会分析dmp就少碰驱动这种东西吧~~否则你会很郁闷的到处求人。
2013-2-7 03:52
0
雪    币: 100
活跃值: (30)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
难道你的DispatchClose跟DriverEntry一起,定义在了init节里?
2013-2-7 09:31
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
NTSTATUS c2pDispatchGeneral(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
)
{        KdPrint(("Other Diapatch!"));
        IoSkipCurrentIrpStackLocation(Irp);
        return IoCallDriver(((PC2P_DEV_EXT)
                             DeviceObject->DeviceExtension)->LowerDeviceObject, Irp);
}
难道是这里错了?……我这里是直接copy……
估计是DeviceExtension这里已经无效了……晕死
2013-2-7 12:00
0
雪    币: 291
活跃值: (213)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
10
晕,这还能猜?
不能装个windbg打开你的dump看一看?楼上已经有人说了,不会分析dump就别碰驱动。google一下怎么分析dump,也就是顶多几分钟的事。
2013-2-7 19:02
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
不懂别在这吵,问题位置我已经找到了,只是想问下处理方法而已
2013-2-8 21:51
0
雪    币: 14
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
估计应该是处理了不正确的irp
比如..  自己的irp被pass到错误的do
看看你的MJ_close 有分辨self device object 还是filter object的地方么
另外, 没见过你这么牛B来问东西的~
另外的另外. 你的基础太差了.趁早别写filter
2013-2-18 20:22
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
问题早修复了
最重要的是这不是文件系统过滤驱动……
足以说明您是专门来浪费时间喷人的……
如果您不想回答问题可以
但是不要用这种方式来舒缓你自己的压力
2013-2-19 22:37
0
游客
登录 | 注册 方可回帖
返回
//