当我们调试用户层程序时,调试器会将线程挂起,此时目标程序处于一种“卡死”的状态。
若目标是操作系统,那么被挂起的将是整个操作系统。Windows为了可以与调试器交互,设计了一个调试子系统
。在调试时,除了调试子系统以外的所有线程全部被挂起,仅剩调试子系统仍可运行。用来与调试器进行信息交互。
信息交互需要通道,操作系统被挂起,声卡网卡等设备无法使用。但可以通过串口
来向外发送数据。
调试器通过串口与调试子系统建立连接来进行信息交互。

WDK_7600.iso:79dK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8r3!0#2k6q4)9J5k6e0p5^5z5g2)9J5k6h3y4F1i4K6u0r3N6q4)9J5c8X3W2q4y4@1k6K9k6V1W2n7b7U0y4y4K9R3`.`. (访问码:y20m)
VirtualKD-Redux:b5cK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8r3!0#2k6q4)9J5k6e0p5^5z5g2)9J5k6h3y4F1i4K6u0r3N6q4)9J5c8V1&6d9d9Y4k6y4L8Y4q4&6h3g2j5%4N6R3`.`. (访问码:1thh)
XP符号包:d67K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8r3!0#2k6q4)9J5k6e0p5^5z5g2)9J5k6h3y4F1i4K6u0r3N6q4)9J5c8U0y4k6f1U0y4g2x3#2q4v1k6V1W2T1P5b7`.`. (访问码:yz0m)
XP纯净镜像:728K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8r3!0#2k6q4)9J5k6e0p5^5z5g2)9J5k6h3y4F1i4K6u0r3N6q4)9J5c8X3k6E0x3Y4W2E0L8e0u0W2b7f1&6F1j5b7`.`. (访问码:hgr8)
XP系统激活码:HTXH6-2JJC4-CDB6C-X38B4-C3GF3
这里使用XP作为目标系统来学习内核。因此我安装了一个XP的镜像。推荐安装itellyou上的XP镜像
之前随便找了一个XP镜像,结果符号包解析不了,又重新安装了一个itellyou的镜像。
开机后进入C盘根目录,有一个boot.ini文件,这是个隐藏文件,记得去控制面板里设置显示隐藏

打开ini文件,加入下面这一行:

然后就可以关机了,镜像就配置完了
为镜像添加一个串口

设置为使用命名的管道
、该端是服务器
、另一端是应用程序
,管道命名填写:

然后点击确定。
windbg的安装使用WDK_7600.ISO
来安装WDK,这样就会附带windbg。不要自己装windbg,否则可能出现一些错误。
双击ISO文件,等待DVD驱动器挂载成功后,管理员运行KitSetup.exe
,然后一直下一步。

安装完成后,找到WDK的安装目录(安装的时候会让你选),Debugger目录下就是windbg的组件,将windbg.exe发送到桌面快捷方式。

双击运行windowsxp-kb936929-sp3-x86-symbols-full-enu.exe
,什么都不要改,直接下一步等待安装成功。然后你的C:\Windows
会多出一个Symbols
文件夹,结构如下图,如果不对那就重新安装。这步绝对不能出错。

右键windbg.exe - 快捷方式,点击属性,在目标那里后面加一段话(记得-b前面有个空格别忘记加):

右键此电脑->属性->高级系统设置->环境变量,在Path里新建一条记录,内容为WDK安装路径下的debugger文件夹

在上面的用户变量处新建一个记录,变量名和变量值直接复制下面的,一定不能错,不然后面windbg命令用不了。

都弄完后点击确定,保存退出。
XP开机后选择DEBUG系统,按回车进入。

然后双击windbg - 快捷方式,等待windbg连接串口。
如果出现nt!RtlpBreakWithStatusInstruction:
那就是配置没问题了。如果出现的是BreakWithPoint
那就说明你的符号包配置的有问题。

输入!process 0 0
查看进程,如果可以成功查看,那么双机调试就已经完美配置成功了。如果不可以,那就还是符号包配置有问题。

此处以win7x86演示
WIN7-X86-SP1镜像:24aK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8r3!0#2k6q4)9J5k6e0p5^5z5g2)9J5k6h3y4F1i4K6u0r3N6q4)9J5c8X3V1$3j5X3g2k6k6Y4u0u0d9X3&6S2P5b7`.`. (访问码:0xyt)
VisualStudio2008(镜像内安装):fd1K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8r3!0#2k6q4)9J5k6e0p5^5z5g2)9J5k6h3y4F1i4K6u0r3N6q4)9J5c8U0u0S2k6i4W2#2P5f1g2K9j5Y4g2q4K9R3`.`. (访问码:e34z)
WDK_1803:b36K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8r3!0#2k6q4)9J5k6e0p5^5z5g2)9J5k6h3y4F1i4K6u0r3N6q4)9J5c8V1#2n7N6X3#2#2j5h3k6k6e0V1&6*7k6b7`.`. (访问码:kmd0)
VisualStudio2017_1803(实体机安装):3beK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6U0L8r3!0#2k6q4)9J5k6e0p5^5z5g2)9J5k6h3y4F1i4K6u0r3N6q4)9J5c8V1q4B7y4X3&6A6k6g2q4T1j5g2g2J5N6b7`.`. (访问码:4ocr)
在XP系统中我们在C盘目录下修改了boot.ini文件即可开启调试模式。但在win7及以后的版本中,windows为我们提供了一个可视化工具来配置引导模式。
以管理员身份运行cmd,可以搜索cmd,然后右键以管理员运行。
在CMD中输入bcdedit /copy {current} /d debug
来添加名为debug的引导模式,回车执行后记下ID。我这里的ID是e7fee4cf-c3b4-11eb-9a3d-82405acb2d2e
,后面的命令要用到这个ID。
执行bcdedit /displayorder {e7fee4cf-c3b4-11eb-9a3d-82405acb2d2e} /addlast
让新加的模式显示出来。
执行bcdedit /dbgsettings SERIAL DEBUGPORT:1 BAUDRATE:115200
设置调试端口及波特率。

执行bcdedit /bootdebug {e7fee4cf-c3b4-11eb-9a3d-82405acb2d2e} ON
启用该模式

执行bcdedit /debug {e7fee4cf-c3b4-11eb-9a3d-82405acb2d2e} ON
启用该模式

执行bcdedit /timeout 30
设置选择引导模式时的超时时间。写30就够了。

重启虚拟机镜像,一定要点虚拟机内的重启,否则设置不会被更新,

添加成功后在开机时会看到多出来的debug选项

如图添加一个串行端口,如果有的话就不用填加了。

点击新添加的串行端口,设置一下管道名//./pipe/com_1
,点击确定保存。

如果你的镜像里面有个打印机,记得删除,否则会占用com1串口。

我们这里使用VS2017专业版+WDK1803。
VS需要安装的组件如下图所示,路径按自己喜好即可。:

WDK安装时建议一路默认。
在WinDbg快捷方式的目标选项中追加-y SRV*C:\symbol*e6dK9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8X3#2K6k6r3I4Q4x3X3g2E0K9h3y4J5L8%4y4G2k6Y4c8Q4x3X3g2U0L8$3#2Q4x3V1k6V1L8%4N6F1L8r3!0S2k6q4)9J5c8Y4y4&6L8h3u0G2L8s2x3`. -b -k com:port=//./pipe/com_1,baud=115200,pipe

增加名为_NT_SYMBOL_PATH
的变量,值为SRV*C:\symbol* 4e5K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6E0M7$3c8D9i4K6u0W2L8h3W2U0M7X3!0K6L8$3k6@1i4K6u0W2j5$3!0E0i4K6u0r3k6r3!0%4L8X3I4G2j5h3c8Q4x3V1k6K6P5h3#2T1L8$3I4K6

选择Debug系统,管理员运行windbg,如下图断下就说明双机调试已经配置成功了。

接下来windbg输入lm
验证符号配置,如下图则说明符号配置成功

输入ld *
可以强制加载所有符号,包括目前暂未使用的符号也会被事先加载。第一次加载时需要从网络上下载符号文件,因此会加载的慢一点,耐心等待全部加载完毕即可。

[培训]科锐逆向工程师培训第53期2025年7月8日开班!
最后于 2021-6-3 14:51
被SSH山水画编辑
,原因: