IDA Pro 驱动调试(KDNET)

实现 Windbg 会话

Host: Windows 10 x64 22H2
Guest: Windows 10 x64 22H2
(都为 VMware 虚拟机)

主机安装:

SDK 安装时只需要勾选 Debugging Tools 即可, WDK 安装后 VS 扩展可选

确保主机和目标机之间可以ping通,建议设置静态IP因为IP修改起来麻烦,设置静态IP时注意VMware NAT的默认网关在 192.168.xx.2

Pasted image 20240515194417

在这个文件夹找到 kdnet.exeVerifiedNICList.xml

1
C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

将这两个文件复制到目标机,放入 C:/KDNET 文件夹,执行kdnet.exe查看网络适配器是否支持调试:

Pasted image 20240515194941

目标机上执行命令,获取密钥:

1
C:\KDNET>kdnet.exe <主机IP> <调试端口,一般为50000> 

Pasted image 20240515195149

主机设置快捷方式或者脚本,复制上面返回的命令,加上 -d 表示内核加载后就启动调试,注意以管理员身份执行该命令:

1
windbg -d -k net:port=50000,key=234s3q1beeby0.1e0i8ran96uhl.1wash7qcm06n6.xseu45di0i51

启动 Windbg 可以看到调试器在等待连接:

Pasted image 20240515195551

此时重启目标机即可连接调试器。

Pasted image 20240515200539

注意开启了内核调试以后,目标机貌似无法访问互联网

故障检查:

  • 主机关闭防火墙或者允许 Windows Kernel Debugger 通过防火墙
  • 更换端口,50000貌似不太行
  • 主机和目标机可以ping通
  • 先开启Windbg,再重启目标机

IDA 附加 Windbg

Debugger -> Attach -> Windbg debugger

Pasted image 20240515200751

这里的 Connection string 填入 net:port=50000,key=234s3q1beeby0.1e0i8ran96uhl.1wash7qcm06n6.xseu45di0i51

Pasted image 20240515201013

一定要选择内核调试不然连接不上调试器,在 Debug options -> Set specific options 中:

Pasted image 20240515201002

不知道什么原因,我的 IDA 7.7 这里一直出现找不到 Windbg 的问题,换 IDA 7.6 就行了

第一次调试 IDA 会卡在 Refreshing modules list 很久,应该是在线下载驱动文件的符号库,等个几分钟就行,之后的调试会快一些不过还是很慢,不知道怎么解决。

Pasted image 20240515212144

看到这些内核驱动模块之后,我们就可以动手调试我们想要调试的驱动了。

安装目标驱动

这里我使用了一个驱动加载工具:https://dennisbabkin.com/driverloader/

管理员身份打开64位或者32位程序,选择驱动文件,根据需要修改参数,然后Register Driver,没有提示就是注册成功,然后点击 Start Driver,如果提示签名无法验证,Edit -> Test Signing 重启电脑。

Pasted image 20240515214020

不过发现这样子还是会跳签名验证失败,必须要在设置里高级启动选择禁用签名才能临时打上驱动

在网上找了半天解决方法,终于找到如何给驱动程序签名的方法:https://blog.csdn.net/qq_29542611/article/details/119944691 原来驱动不签名就算关闭签名验证也没法加载啊!

执行以下两条命令,先是生成证书,然后用证书签名,注意需要添加 /fd SHA256

1
2
3
C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64> .\MakeCert.exe -r -pe -ss PrivateCertStore -n CN=Contoso.com(Test) -eku 1.3.6.1.5.5.7.3.3 ContosoTest.cer

C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64>signtool.exe sign /v /s PrivateCertStore /n Contoso.com(Test) /t http://timestamp.digicert.com /fd SHA256 C:\Users\frnks\Downloads\driver.sys

签名了以后就能正常打驱动了。

IDA 调试驱动

IDA 打开驱动文件并解析,然后运行 Windbg Debugger,注意选择调试选项为内核模式,设置好连接命令,连接上调试器后点击工具栏绿色箭头继续执行,此时弹出 Running 窗口。这时在目标机上点击 Start Driver,IDA 弹出提示说明成功!

Pasted image 20240515223815

选择 Same 之后就可以进行调试了,这里我采用经典的 攻防世界XCTF MyDriver2 作为示例,这个函数执行到 return 时, byte_FFFFF8075CE96390 存放着解密了的flag:

Pasted image 20240515224351

Pasted image 20240515224053

(运行完这个驱动会导致目标机蓝屏,应该是因为没有正确处理驱动返回值的结果,属于正常现象)

参考

https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/setting-up-a-network-debugging-connection-automatically

https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/debug-universal-drivers---step-by-step-lab--echo-kernel-mode-

https://www.52pojie.cn/thread-1118454-1-1.html

https://blog.csdn.net/qq_29542611/article/details/119944691