|
一、 如何让WinDbg断在驱动的入口处(无符号表) 1、在系统调用DriverEntry处下断,因为操作系统不同,所以其具体位置也不一样, 不过目前windows都在nt!IopLoadDriver函数里. win7+7eb win7下win32k!ldevLoadDriver+0x15e win32k!ldevGetDriverModes
win 7 64 ->nt!IopLoadDriver+0xa04
2、另外一种办法就是,直接修改PE在入口处放置Int 3.修改DriverEntry处为0xCC,就是int 3,修正校验和后加入,执行到DriverEntry时int 3异常自然就会中断在调试器了,这时再把原来的指令改回去继续跑就行了
Windbg对过滤驱动DriverEntry函数下断点技巧 方法1: 1> 先用DeviceTree.exe查看指定的过滤驱动的Load Address(加载地址) 2> 再用LordPE.EXE查看指定过滤驱动文件的入口点地址 3> 计算过滤驱动的DriverEntry函数内存地址 DriverEntry函数内存地址 = Load Address + 入口点地址 例子: 1> Load Address = 0xFAABF000 2> 入口地址 = 0x3400 3> Windbg下断点 bp 0xFAABF000+0x3400
方法2: 1> 先用DeviceTree.exe查看指定的过滤驱动的Service Name 2> 再用LordPE.EXE查看指定过滤驱动文件的入口点地址 3> 计算过滤驱动的DriverEntry函数内存地址 DriverEntry函数内存地址 = Service Name + 入口地址 例子: 1> Service Name是 ntfs 2> 入口地址 = 0x3400 3> Windbg下断点 bp ntfs+0x3400
其他: 例如某个驱动,我只关心它的某个函数,于是我用IDA打开驱动,得到该函数的文件偏移, 一般是后四位即可. 然后加载驱动. !object \driver\xx.sys 得到其对象地址. 进而得到DriverInit的地址, 去掉后四位,再加上上面文件的偏移,就是在内核中的地址下断之... [s:40]
找不到系统符号表 1.sympath SRV*(PATH)*http://msdl.microsoft.com/download/symbols 2!sym noisy 3.reload
bu $iment(xxxx.sys) ?? symchk -v xxx.exe 查看中断: !idt dt _KINTERRUPT
|