返回
顶部

参考链接:

单机调试

这个单机调试对于内核调试比较鸡肋,很多调试命令都执行不了,推荐使用双机调试

正常情况下,如果逆向debug windows kernel,你需要两台可以互相连通的windows机器,一台作为debuger(调试机),一台作为debugee(被调试机)

不过有一个叫做LiveKD的工具,使用这个工具,你只需要一台机器即可对kernel进行debug

首先你需要安装sdk,本文的测试环境为windows 10,因此需要下载win10 sdk进行安装

sdk安装完成之后,使用everything定位到windbg.exe的路径并将其添加到环境变量中

image-20220528164220973

我的测试环境是x64的,所以我选择C:\Program Files (x86)\Windows Kits\10\Debuggers\x64

想要进行kernel debug,你需要先执行两条命令

bcdedit /debug on
bcdedit /dbgsettings local

获取LiveKD工具:https://docs.microsoft.com/zh-cn/sysinternals/downloads/livekd

解压之后,以管理员身份打开cmd进入到该目录,执行livekd64 -w

image-20220528165249421

至此,你就设置好windows kernel debug的环境了

双机调试

有些漏洞会导致机器BSOD(blue screen of death),整个计算机就直接崩溃重启了,不适合使用单机调试

什么弱智言论,明明是因为内核调试的话整个机器就HALT了,不用两个机器调也没法玩儿呀

双机调试的设置也比较简单,我比较喜欢通过网络进行调试,也有通过使用串口调试的方法,这里不做介绍

这里使用物理机和虚拟机进行双机调试,我虚拟机网卡是桥接模式,所以直接和物理机位于同一个网段

bcdedit /debug on
bcdedit /dbgsettings net hostip:192.168.100.28 port:50000 key:my.secure.key.here
bcdedit /set "{dbgsettings}" busparams 3.0.0

在debugee(被调试机)以管理员模式执行上面的命令即可,其中192.168.100.28是debuger(调试机)的IP

3.0.0这个参数可以在debugee中通过如下方式获取:

image-20220604125827698

然后debuger启动windbg,File->Kernel Debug...,将端口号和key输进去就行了

image-20220604125925256

windows7及以下版本

网络调试是从Windows8 (Server 2012)才开始有的,所以对于server 2008或者windows 7以及更早的版本需要使用串口调试,详细细节请查看这个视频:

windows 7

windows XP

windows XP的内核调试器和符号表