还是逆向kdusb3的时候,无意中翻VirtualBox文档发现一种快速内核调试的办法,详细描述见2.31. Paravirtualized Debugging
说的是Windows8之后带了一个kdvm.dll,可以利用Hyper-V的Guest Debug半虚拟化调试方式,用网络传输数据,速度很快。这个kdvm.dll可以复制到Windows7上使用。(Windows8带的kdnet.dll也能复制到Windows7上用,改动一个字节LoadOptions成员的偏移,然后修正CheckSum。能正常连接Windbg断下来单步调试什么的,但Windows7 Logo变成最大时就会死机,不知道为什么。)

因为Windows8正式版自带的kdvm.dll太复杂,我逆向的是Developer Preview带的kdvm,特别简单,有个breakin的bug我已经修复,初始化、发包、收包的逻辑参考附件中的源代码。
 
使用前要先设置VirtualBox
显示半虚拟化支持
VBoxManage.exe showvminfo "win7x86"
有下面这一行就行,如果没有就在虚拟机设置窗口设置一下半虚拟化接口
Effective Paravirt. Provider: HyperV
关闭虚拟机的情况下设置
VBoxManage.exe modifyvm "win7x86" --paravirtdebug "enabled=1,port=50001"
 
设置被调试电脑
bcdedit /set loadoptions host_ip=5.5.5.5,host_port=50001,encryption_key=9.9.9.9 (这里的IP和key没啥用,随便写,格式合法就行;port也没用,在49151-65536之间就行)
bcdedit /set dbgtransport kdvm.dll
bcdedit /set debug on
 
针对Windows2003
boot.ini文件添加/debug /debugport=COM1 /baudrate=115200 (COM几无所谓,bandrate写不写也没事)
复制kdvm.dll到system32目录下,改名成kdcom.dll (先删除dllcache目录,否则WFP会把文件覆盖回去)
 
开始调试
windbg.exe -d -k net:port=50001 (别带key命令行参数,因为kdvm没加密通信数据。如果用Windows8带的kdvm.dll则需要key参数)
 
测试版本:
VirtualBox 6.0.8 (不需要Hyper-V,VirtualBox自己实现了Hyper-V的半虚拟化接口)
WinDbg 6.12.2.633
Windows 2003 SP1 x86 和 Windows7 SP1 x86

 
下载:kdvm-win7-2k3-x86.7z
SHA1:4a8b2c4dd776086d4c9d3b5b98d23bc4a07263c6
posted on 2019-08-18 13:37  zhongts  阅读(256)  评论(0编辑  收藏  举报