Windbg双机内核调试-win10+xp(附win10+win7)

Windbg双机内核调试-win10+xp(附win10+win7)

实验要求

配置一个Windbg双机内核调试环境,查阅Windbg的文档,了解以下内容:

  • (1)Windbg如何在内核调试情况下看物理内存,也就是通过物理地址访问内存。
  • (2)如何查看进程的虚拟内存分页表,在分页表中找到物理内存和虚拟内存的对应关系。然后通过Windbg的物理内存查看方式和虚拟内存的查看方式,看同一块物理内存中的数据情况。

实验环境(win10+xp)

物理机(Host):已安装windbg
虚拟机(Guest):使用xp-sp3-32位系统

实验步骤

一、实验准备:配置内核调试

  1. virtualbox中进行串口设置: Windbg双机内核调试-win10+xp(附win10+win7)_第1张图片

  2. Guest:下载安装好xp-sp3,打开’我的电脑’,地址栏输入,找到boot.ini。 在这里插入图片描述

  3. Guest:boot.ini中添加内容并保存:multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200Windbg双机内核调试-win10+xp(附win10+win7)_第2张图片

  4. Guest:配置开启启动项Windbg双机内核调试-win10+xp(附win10+win7)_第3张图片

  5. Guest:重启虚拟机,选择’DebugEntry’模式开启

  6. Host:进入windbg.exe所在文件夹,以下命令启动windbg windbg.exe -k com:port=\\.\pipe\com_1,baud=115200,pipe

  • win7方法中有windbg符号下载地址添加方法
  1. 下断点,看到如下页面,说明配置成功。Windbg双机内核调试-win10+xp(附win10+win7)_第4张图片

二、 Windbg如何在内核调试情况下通过物理地址访问内存

  1. 首先应该将虚拟地址转化为物理地址,转换例子如下图:
  • 虚拟地址转换为物理地址有!vtop和!pte两种方式,但是!vtop有时候不好用,具体什么时候还没能总结出来。Windbg双机内核调试-win10+xp(附win10+win7)_第5张图片

  • 后三位表示页内偏移,是由32位线性地址决定的。Windbg双机内核调试-win10+xp(附win10+win7)_第6张图片

  1. 通过!d*命令通过物理地址访问内存。具体区别如下图: Windbg双机内核调试-win10+xp(附win10+win7)_第7张图片
  • 二操作融合在三实验中

三、 查看进程的虚拟内存分页表,在分页表中找到物理内存和虚拟内存的对应关系然后通过Windbg的物理内存查看方式和虚拟内存的查看方式,看同一块物理内存中的数据情况。

得到的地址都是虚拟地址,需要通过物理地址访问内存,需要先将虚拟地址转化为物理地址,具体实验操作及结果如下图所示: Windbg双机内核调试-win10+xp(附win10+win7)_第8张图片

结论:通过虚拟地址和对应的物理地址访问内存,得到的结果是一样的。

实验拓展(win10+win7配置)

  • 由于64位地址推算更麻烦一直没能成功,就只列出配置方法,没有用win7系统进行后续实验。

实验环境

物理机(Host):已安装windbg
虚拟机(Guest):使用win7-64位系统

实验步骤

  1. Guest端:虚拟机串口设置如下图 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传Windbg双机内核调试-win10+xp(附win10+win7)_第9张图片

  2. Guest端:启动虚拟机,进入Window内部进行配置。以管理员身份启动CMD,输入以下命令。

  • DebugEntry的方式启动win7
bcdedit /dbgsettings serial baudrate:115200 debugport:1    
bcdedit /copy {current} /d DebugEntry    
bcdedit /displayorder {current} {替换第二个命令显示的UUID}   
bcdedit /debug {替换第二个命令显示的UUID} on

运1行结果如下图:
Windbg双机内核调试-win10+xp(附win10+win7)_第10张图片

  1. Host:配置windbg符号下载地址 Windbg双机内核调试-win10+xp(附win10+win7)_第11张图片

  2. Host进入windbg.exe所在文件夹,以下命令启动windbg

windbg.exe -k com:port=\\.\pipe\com_1,baud=115200,pipe
  1. 在显示’Waiting ro reconnect…'之后下断点,成功连接.而且此时win7系统已经无法动了. Windbg双机内核调试-win10+xp(附win10+win7)_第12张图片

实验总结

  1. 内核模式与用户模式区别:内核模式没有用户模式的那么多限制,用户模式下运行的代码可以访问用户空间,但不能访问系统空间。 此限制可防止用户模式代码读取或更改受保护的操作系统数据结构。 内核模式下运行的代码既可以访问用户空间,也可以访问系统空间。内核模式下运行的代码可以访问系统空间和当前用户模式进程的虚拟地址空间。
  2. 如何决定使用内核模式还是用户模式:根据要调试的驱动类型进行选择。———“如果您的目标是调试驱动程序,请确定该驱动程序是内核模式驱动程序还是用户模式驱动程序。Windows驱动程序模型(WDM)驱动程序和内核模式驱动程序框架(KMDF)都是内核模式驱动程序。顾名思义,用户模式驱动程序框架(UMDF)驱动程序是用户模式驱动程序。”因此,之前课程进行api钩取的时候,调试hookapi.exe我们使用的是用户模式,这一次进行内核模式的学习。
  3. !d*命令通过物理地址访问内存。d*通过虚拟地址访问内存
  4. 加深理解虚拟地址。虚拟地址访问内存有以下优势:
  • 程序可以使用一系列连续的虚拟地址来访问物理内存中不连续的大内存缓冲区。
  • 程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。 当物理内存的供应量变小时,内存管理器会将物理内存页(通常大小为 4 KB)保存到磁盘文件。 数据或代码页会根据需要在物理内存与磁盘之间移动。
  • 不同进程使用的虚拟地址彼此隔离。 一个进程中的代码无法更改正在由另一进程或操作系统使用的物理内存。

参考文献

VirtualAlloc function
!db、!dc、!dd、!dp、!dq、!du、!dw
Getting Started with Windows Debugging
Getting Started with WinDbg (Kernel-Mode)
Setting Up Kernel-Mode Debugging of a Virtual Machine Manually using a Virtual COM Port
d、 da、 db、 dc、 dd、 dD、 df、 dp、 dq、 du,dw (显示内存)
debug-universal-drivers–kernel-mode-
!pte
converting-virtual-addresses-to-physical-addresses
Windows internal: Memory 2
虚拟地址空间
Windows 内核调试-win7

你可能感兴趣的:(Windbg双机内核调试-win10+xp(附win10+win7))