windbg拦截驱动

驱动的加载有几种方式,查看CreateService就可以知道。
1、SERVICE_BOOT_START = 0x00000000,被系统loader加载,这类驱动是最早加载的。驱动文件必须放在C:\Windows\System32\drivers目录下,因为此时系统只能读注册表,不能打开文件,不能打出调试信息。看了下面的分析就清楚了。
2、SERVICE_SYSTEM_START = 0x00000001,系统初始化完成后才加载的
3、SERVICE_DEMAND_START = 0x00000003,手动加载

环境:win7 32bit,
目标:拦截hookport.sys
方法:
通常拦截驱动,可以在nt!MmLoadSystemImage下断点。
1、显示驱动全名并显示驱动基址:
bp nt!MmLoadSystemImage".if(1){!ustr poi(esp+4); dd poi(esp+0x18);}.else{gc;}"
poi(esp+0x18)就是保存驱动基址的指针ImageBaseAddress
2、nt!MmLoadSystemImage返回后,dd ImageBaseAddress,显示的就是驱动基址
3、给驱动起点函数下断点
bp 驱动基址+poi(poi(驱动基址+0x3c)+ 驱动基址+0x28)
4、运行,就停在驱动的起点函数


NTSTATUS
MmLoadSystemImage (
    IN PUNICODE_STRING ImageFileName,
    IN PUNICODE_STRING NamePrefix OPTIONAL,
    IN PUNICODE_STRING LoadedBaseName OPTIONAL,
    IN BOOLEAN LoadInSessionSpace,
    OUT PVOID *ImageHandle,
    OUT PVOID *ImageBaseAddress
    )
点击图片以查看大图图片名称:	xuetr333.png查看次数:	1073文件大小:	51.4 KB文件 ID :	63952

但是hookport.sys就不能用上面的方法来,因为它的加载类型是SERVICE_BOOT_START,如下图:
点击图片以查看大图图片名称:	360.png查看次数:	1057文件大小:	27.6 KB文件 ID :	63953
通过研究系统,可以用下面的断点:
下断点bp nt!PnpInitializeBootStartDriver".if(1){!ustr poi(esp+8);}.else{gc;}",此时可以显示驱动的注册表信息
点击图片以查看大图图片名称:	222.png查看次数:	1062文件大小:	21.6 KB文件 ID :	63954
断下来后,在nt!IopInitializeBuiltinDriver里面找第一个call    dword ptr [eax],
点击图片以查看大图图片名称:	3333.png查看次数:	1057文件大小:	8.0 KB文件 ID :	63955
下断点即可,跟进去就是驱动的入口点了
点击图片以查看大图图片名称:	444.png查看次数:	1062文件大小:	22.2 KB文件 ID :	63956

其实可以计算  INIT:007A79CF                 call    dword ptr [eax]  与nt的rva,直接下断点就可以了  bp nt基址+0x003A79CF


==================================================================================================

kd> sxe ld:hookport.sys
kd> g
nt!DbgLoadImageSymbols+0x47:
83a55fa6 cc              int     3
kd> lmvm hookport
start    end        module name
8f263000 8f284e80   hookport (deferred)   

kd> bp 8f263000+poi(poi(8f263000+3c)+8f263000 +28)

kd> g

类似这样,就到了驱动的driverentry了

我都是如此调试360的几个驱动的....应该没有意外的

==================================================================================================

对于 hookport.sys , 我这 sxe ld 也不能下断。
我用的这样的方法, 双机调试的时候会先中断到调试器,然后:

kd> lm
start    end        module name
804d8000 806d0480   nt         (pdb symbols)  
806d1000 806f1300   hal        (deferred)             
f851d000 f852f200   Hookport   (deferred)  

kd> bp f851d000 + poi(poi(f851d000 + 3c) + f851d000 + 28)
*** ERROR: Module load completed but symbols could not be loaded for Hookport.sys

kd> g
Breakpoint 0 hit
Hookport+0xff85:
f852cf85 a1c8c952f8      mov     eax,dword ptr [Hookport+0xf9c8 (f852c9c8)]

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值