吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4158|回复: 18
收起左侧

[调试逆向] 利用VMware debugStub机制调试中断现场/KiDispatchException/KiSystemCall64

  [复制链接]
iaoedsz2018 发表于 2025-7-23 21:39
本帖最后由 iaoedsz2018 于 2025-7-24 01:04 编辑

利用VMware debugStub机制调试中断现场/KiDispatchException/KiSystemCall64

中断现场、KiDispatchException、还有syscall/sysenter的内核入口的调试,似乎对很多新手都造成了不小的困扰。

最近突然想到VMware等常见虚拟机都是支持GDB调试的,而这种调试机制,是独立于客户机系统之外的。

windbg之所以不能调试中断现场/KiDispatchException主要就是因为这些代码处于异常分发的逻辑之中,而gdb调试不属于这一体系,所以就能绕过这种限制。

本文以VMware+IDA为例,VirtualBox、QEMU的大致情况应该也基本一致

根据客户机的位数,选择对应的配置添加到.vmx文件中

debugStub.hideBreakpoints= "TRUE"
debugStub.listen.guest32 = "TRUE"
debugStub.listen.guest32.remote = "TRUE"
monitor.debugOnStartGuest32 = "TRUE"
debugStub.hideBreakpoints= "TRUE"
debugStub.listen.guest64 = "TRUE"
debugStub.listen.guest64.remote = "TRUE"
monitor.debugOnStartGuest64 = "TRUE"

debugStub.listen.guest??.remote 允许其他机器来远程调试,非必选项

monitor.debugOnStartGuest?? 会让客户机开机一瞬间就等待调试器,方便调试BIOS,非必选项

配置IDA


32位客户机,端口是8832
64位客户机,端口是8864

附加到虚拟机:


附加成功。但部分内存不能直接跳过去(我也不太清楚IDA为什么这么设计),我们手动设置一下内存区域:

右键插入:

插入范围为0FFFFFFFFFFFFFF00

将地址Rebase过去,这样所有的符号都能直接用了

Rebase的地址就是内核镜像的地址。我这里是0xFFFFF800168A3000

试试效果。

IDT中指向的INT3处理函数直接命中,可以单步调试

syscall的内核入口,可以单步

KiDispatchException更是不在话下

免费评分

参与人数 4吾爱币 +9 热心值 +4 收起 理由
willJ + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
杨辣子 + 1 + 1 谢谢@Thanks!
5omggx + 1 用心讨论,共获提升!
laozhang4201 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

kseds 发表于 2025-7-23 22:20
前来学习
zhangfei666 发表于 2025-7-23 22:30
fjfz19831 发表于 2025-7-24 00:08
Luker 发表于 2025-7-24 06:30
前来学习,感谢分享
F6126735 发表于 2025-7-24 07:15
大佬虚拟机可以无限制安装绑定软件吗
aFeng1188 发表于 2025-7-24 09:19
水电费是的
touji 发表于 2025-7-24 10:20
学习记录一下
blackbyte 发表于 2025-7-24 10:43
代码可做更改吗
mengxz2023 发表于 2025-7-24 11:39
这技术nb
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-9-15 14:46

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表