远程WinDbg

WinDBG Kernel-mode Debugging (KD)

WinDBG KD接口支持r2 attach到运行windows的VM上,通过一个串口/网络对内核进行调试。

同样也可以使用远程GDB调试接口连接到windows上,从而在不依赖于windows功能的情况下对windows进行内核调试。

要注意的是,对WinDBG KD的支持仍在开发中,目前仅仅是一个初期的实现版本,它将随着时间的推移慢慢变好的。

Windows上配置KD

完整步骤请参考 Microsoft的文档.

串口

在Windows Vista或更高版本中启动串口KD:

bcdedit /debug on
bcdedit /dbgsettings serial debugport:1 baudrate:115200

或者在Windows XP中可以这样: Open boot.ini and add /debug /debugport=COM1 /baudrate=115200:

[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Debugging with Cable" /fastdetect /debug /debugport=COM1 /baudrate=57600

使用VMware的场景下:

若使用VirtualBox需要进行的配置:

或者用QEMU启动虚拟机:

网络

在Windows 7或更高版本启动网络KD(KDNet)如下:

从Windows 8开始,无法在每次启动都强制进入debug了,但是可以通过配置boot option中的高级选项,允许使用内核调试:

r2连接到KD上

串口

Radare2可以用winkd IO插件连接到vbox/qemu创建的socket文件上。另外,winkd调试器插件也要指定x86-32才行(支持32和64位调试)。

在windows上需要运行如下r2命令:

网络

Using KD

当连接到KD时,r2会发送一个中断包,用于中断目标的运行,程序将停在如下地方:

若要跳过trap,得修改eip并运行两次dc命令:

现在可以重新与Windows VM进行交互了。需要杀掉r2进程然后重新attach到Windows上控制内核。

另外,dp命令可以列出所有进程,dpadp=可以attach到进程上,并显示进程在物理内存中的基址。

WinDBG Backend for Windows (DbgEng)

在Windows上,radare2可以用DbgEng.dll作为调试后端,使其可以使用WinDBG的功能,比如支持dump文件,本地/远程用户和内核模式调试。

可以用Windows内包含的debugging DLL,也可以从download page下载最新版本(推荐)

不能用windows商店里的WinDbg Preview应用文件夹里的DLL,因为对于普通用户来说,这些DLL未被标记为可执行文件。

在搜索windows默认的DLL库路径前, radare2会尝试从_NT_DEBUGGER_EXTENSION_PATH环境变量指出的路径加载dbgeng.dll

使用插件

若要使用windbg插件,只需传递运行WinDBG/kd时同样的参数(参见Microsoft的文档)即可,有时候需要用引号将其括起,或者使用转义符:

可以像往常一样进行debug(参见d?命令)或用=!命令在后端shell中直接进行交互。

最后更新于

这有帮助吗?