[学习笔记]ProxmoxVE环境下的Windows双机调试

admin 2024年2月27日10:26:13评论11 views字数 2794阅读9分18秒阅读模式

       Windows双机调试是Windows驱动开发、内核分析中常用的内核调试方式,一般双机调试方式是使用VMware创建Win10调试虚拟机,通过串行端口或者网络进行调试,由于目前我的主力机是使用ProxmoxVE搭建的,因此这里尝试使用ProxmoxVE构建双机调试环境。

0x00 前言

首先为不了解的朋友简单介绍一下ProxmoxVE(简称pve),pve是一块开源的服务器虚拟环境,pve基于Debian系统,使用kvm虚拟化,与Vmware的ESXI类似,可以通过网页远程创建虚拟机,当然你可以理解为运行在裸主机上的Vmware Workstation Pro或Virtualbox,下图为pve的管理主页:

[学习笔记]ProxmoxVE环境下的Windows双机调试

由于Windows双机调试需要使用到一台Windows调试机(debuger),一台Windiws被调试机(debugee),而pve只是一台linux的虚拟机管理程序,因此我们需要在pve中创建两台Windows虚拟机,并将其串口相互连接,剩下的操作与使用Vmware双机调试类似。

0x01 单机调试

pve正常安装Windows10环境,首先尝试一下本机调试调试是否能够正常运行,此种方式可以查看内核中的各项数据;但本地内核调试不能影响系统的运行,所以不能打断点、单步调试等等。

下载安装Windows调试工具。可以在微软官网直接下载WindowsDbg,也可以在应用商店里下载WinDbg Preview:

[学习笔记]ProxmoxVE环境下的Windows双机调试

设置symbol file path环境变量。symbol file path指明Windows符号文件所在位置,虽然symbol file path不设置也可以正常使用,但是每次有需要重新下载symbol file,受网络影响很大,通过设置symbol file path可以将下载后的symbol file存储在该位置,下一次使用时将直接使用下载完成的symbol filesymbol file path还有一个好处就是其他编译器例如visual studio也可以直接使用下载完成的符号文件symbol filesymbol file path格式如下:

srv*{cache path}*{symbol server}

样例:

_NT_SYMBOL_PATH
srv*C:Symbols*https://msdl.microsoft.com/download/symbols

启动Windows调试模式。如果需要进行kernel debug,需要使用bcdedit修改windows的启动配置数据文件,使用管理员权限打开powershell:

# 开启debug模式
bcdedit /debug on
# 查看bcdedit配置
bcdedit
# 配置dbgsettiongs为local模式
bcdedit /dbgsettings local

使用bcdedit修改是永久修改的,每次开机都会进入调试模式,如果不想影响当前配置,可以使用bcdedit复制一份当前配置,重新进行修改即可,这样开始时会有不同的引导选项进行选择。

开始调试。使用管理员权限打开WinDbg,在File-Kernel Debug或者File-Attach to kernel,选择Local本地调试标签,

[学习笔记]ProxmoxVE环境下的Windows双机调试

之后便可以进行单机调试,但是此种方式无法进行断点调试,只能查看内核数据。例如,在WinDbg命令窗口键入!drvobj ACPI,表示查看ACPI.sys驱动程序的物理设备对象,输出结果中Physical Device Object列出了与该驱动程序关联的所有物理设备对象:

[学习笔记]ProxmoxVE环境下的Windows双机调试

输入!devobj ffffba08e661cdf0,则显示出该设备的一些基础信息。

[学习笔记]ProxmoxVE环境下的Windows双机调试

0x02 双机网络调试调试

双机调试一般都是使用串口进行调试,从Windows8开始微软提供了网络调试内核的方法,其简称为kdnet,是目前微软推荐的内核调试方法。

创建Win10调试机。双机调试需要两台Windows虚拟机,因此我们需要创建一个Win10调试机(debuger),同样需要重新配置该调试机的symbol file path环境变量。。而上一步创建的Win10还是作为被调试机使用,不过需要修改一些配置:操作系统类型时应选择 Other 类型,如果选择 windows 类型,ProxmoxVE 在虚拟化时会提供 Hyper-V 的各项支持,以此来提高虚拟机的性能,但这些选项可能会导致网络调试无法正常运行,修改位置如下:

[学习笔记]ProxmoxVE环境下的Windows双机调试

除此之外,Windows网络调试对网卡有一定的要求,因此debugee机需要选择Intel E1000,其他网卡可能需要安装特定驱动程序才能使用。

配置Win10被调试机。可以使用官方的kdnet工具进行自动配置,但是微软应用商店里的Windbg是不完整的,并不包含kdnet工具,因此我们需要使用Windows SDK所所安装的Windbgkdnet位于C:Program Files (x86)Windows Kits10Debuggersx64。自动配置需要将kdnet.exe*VerifiedNICList.xml* 文件复制到目标计算器中C:KDNET目录下,运行.kdnet.exe查看网卡是否支持,虽然Intel E1000是支持网络调试的,但是kdnet并未识别成功,可能存在bug。

[学习笔记]ProxmoxVE环境下的Windows双机调试

因此我们使用官方手动配置教程,进行配置:

# 开启debug模式
bcdedit /debug on
# 配置调试机的ip地址和端口,将会自动生成随机keyy
bcdedit /dbgsettings net hostip:192.168.121.11 port:50000
# 配置调试所使用的网络适配器适配器的 PCI 总线、设备和功能编号。
bcdedit /set "{dbgsettings}" busparams x.y.z

可在设备管理器中获取用于调试的网络适配器的PCI总线x、设备编号y、功能编号z,如下图所示,当然只有一个网卡的时候,不需要进行配置,默认使用该网卡。

[学习笔记]ProxmoxVE环境下的Windows双机调试

连接Win10被调试机。在Windbg输入被调试机的ip地址和上一步生成的key,调试器连接并等待连接后,重启目标服务器即可,重启后Windbg将自动连接上。

shutdown -r -t 0

0x03 参考

[微软官方]本地内核模式调试.https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debugger/performing-local-kernel-debuggingProxmoxVE 下的 Windows 内核调试环境配置.https://paper.seebug.org/2052/Windows Kernel Debug.https://144.one/windows-kernel-debug.html



原文始发于微信公众号(Bits):[学习笔记]ProxmoxVE环境下的Windows双机调试

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年2月27日10:26:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   [学习笔记]ProxmoxVE环境下的Windows双机调试http://cn-sec.com/archives/2528287.html

发表评论

匿名网友 填写信息