Mac 主机上的 windows 内核调试(使用 VMware fusion)

逆向工程 数据库 风袋 调试
2021-06-13 08:12:04

在windows主机中,我们可以使用WinDBG和串口通信来连接windows内核,最简单的方法是使用VirtualKD。

现在的问题是,是否有可能使用 MacOS 主机和 VMware Fusion 做同样的事情(VirtualKD/WinDBG 替代方案)?我可以使用 GDB 远程调试,或者我必须进行主机到主机(VM 到 VM)的调试,甚至可以使用两个 VM 进行内核调试?

谢谢

3个回答

是的,您可以使用两个 VM 进行内核调试。您将需要连接他们的串行端口。

http://www.vmware.com/support/ws3/doc/ws32_devices3.html#1023828

以上是针对Windows的。OS X 设置需要手动完成:http : //www.dcl.hpi.uni-potsdam.de/research/WRK/2011/01/running-wrk-on-mac-os-with-vmware-fusion/index .html

在 WinDbg/IDA 端的连接字符串中使用串行端口,而不是您可能习惯的管道。

VirtualKD 仅适用于在 Windows 主机上运行的 VMWare,因此它在这里无济于事。

GDB 调试也总是可能的(通过debugStub.*设置)。优点是您不需要第二个 VM,并且可以调试任何东西,包括 BIOS 和内核的任何部分。缺点是您没有 WinDbg 提供的良好元信息,例如模块、进程和符号。

使用 VMWare Fusion 进行内核调试

在提升的命令提示符中打开目标 VM:

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

关闭目标(被调试者)和开发(调试器)VM 的电源。

导航到每个 VM 的 .vmwarevm 包,右键单击,选择“显示包内容”(或 cd 进入 VM 的包)。

删除对现有serial0端口的所有引用,该端口用于无配置打印。复制并粘贴下面的配置,必要时对其进行修改。

serial0.present = "TRUE"
serial0.pipe.endPoint = "client" # change to "server" for the target VM
serial0.fileType = "pipe"
serial0.yieldOnMsrRead = "TRUE"
serial0.startConnected = "TRUE"
serial0.fileName = "/tmp/kdpipe" # or any other world-writeable path

打开您的虚拟机,并使用来自开发虚拟机的 Windbg 通过 com0 进行连接。

VMWare Fusion 开机顺序

  • 术语:
    • 客户:你在这个上运行windbg
    • 服务器:你在这个上破坏了内核
  • 脚步:
    • 首先启动服务器,因为它是管道“服务器”,必须创建管道。
    • 接下来启动客户端。
    • 启动windbg,让它在com0 上等待。
    • 服务器现在将一直启动到 Windows,因此您将无法连接
    • 重启服务器

根据我的经验 VirtualKD 在此设置中不起作用。我试图让 VisualDDK(同一个人并使用 VirtualKD)在这个确切的设置中工作,但没有任何乐趣。最后,我在 Mac 上安装了 bootcamp,Windows 7 作为主机,VMWorkstation 运行我的目标。一切都很好,而且都是肉汁。