调试环境
作为一个安全研究者,肯定会遇到调试病毒驱动的时候;那在win10 环境下怎么调试驱动呢?
双机调试环境
请自行参阅:
VirtualKD-Redux /https://github.com/4d61726b/VirtualKD-Redux
(可以调试新版vmware virtualbox 虚拟机)
具体步骤
- Win10 iso
- Windbg
- 病毒驱动样本
- VirtualKD-Redux
- vmware 16
- inst
搭建的步骤:-
创建虚拟机(vmware 16+ win10 iso)
-
打开VirtualKD-Redux 配置WinDbg 调试器
-
复制VirtualKD-Redux里面的target >x64 到虚拟机 点击运行
-
重启虚拟机 F8 禁用驱动签名校验
-
然后 uf nt!IopLoadDriver,找到 call nt!MmLoadSystemImage bp这条指令,(当安装、启动病毒驱动)断下来后 F10跳过执行后 ,就能对目标病毒驱动模块下断点了
-
配合IDA计算病毒驱动的DriverEntry 或者 目标地址偏移 Addr - imagebase
-
对目标地址bp下断点
效果图:
当前断点 RIP 刚好是 DriverEntry(),如IDA 截图
额 貌似有混淆…
-
驱动加载分析
如下图,栈回溯可以看到,在nt!IopLoadDriver+0x4c2 之前那一步执行后, 执行流就会到 DriverEntry()
看一下此处的反汇编:nt!IopLoadDriver+0x4c2 的前一步是 call nt!guard_dispatch_icall
所以调用的流程是:
nt!IopLoadDriver -> nt!guard_dispatch_icall-> Dest!DriverEntry()
(异常记录: nt!guard_dispatch_icall() 里面下断点虚拟机会假死,windbg 也收不到调试信息了应该是断开连接了,详细情况可能还需要单步跟下)