-
-
[原创]深度理解 VEH-CheatEngine vs VEH-PAGE_GUARD
-
-
[原创]深度理解 VEH-CheatEngine vs VEH-PAGE_GUARD
本文将从原理到源码、从实验到实战,彻底讲清楚两种方案的本质差异,并论证 CE VEH Debugger 的断点核心是 DR0-DR3 + DR7 硬件调试寄存器。
特征:页级粒度,一次性触发,自动消失。
特征:字节级精度,CPU 硬件执行,持久有效。
CE → Memory View → Debug → 设置第 5 个断点:
4 个。不多不少。正好是 DR0、DR1、DR2、DR3。
PAGE_GUARD 没有这个限制——你想给多少页加 GUARD 都行。
CE VEH 断点选项:
与 DR7 位域完全对应:
PAGE_GUARD 做不到:
在 VEH Handler 内拦截,CE 断点命中时:
如果是 PAGE_GUARD:
实测是 0x80000004。铁证如山。
VEH Handler:
源码直接操作 DR 寄存器。没有任何 VirtualProtect、PAGE_GUARD 的影子。
用 API Monitor 监控 CE 设置 VEH 断点时的系统调用:
CE VEH Debugger 在以下场景稳定工作:
如果是 PAGE_GUARD:
多线程游戏 + PAGE_GUARD = 直接GG。
也别把它一棒子打死。它有自己的定位:
一句话:PAGE_GUARD 是单线程穷人的无限断点,自己查查自己没问题。
输出:
这就是 CE VEH Debugger 的核心原理。20 行代码复现。
| 维度 |
PAGE_GUARD |
DR7 硬件断点 |
| 粒度 |
4KB 整页 |
1 / 2 / 4 / 8 字节 |
| 数量 |
无限 |
最多 4 个 |
| 触发异常 |
0x80000001 |
0x80000004 |
| 多线程 |
竞态灾难 |
安全(每线程独立 DR) |
| 性能开销 |
高(同页误触发) |
零(CPU 硬件比对) |
| 触发后状态 |
GUARD 自动移除 |
断点持续存在 |
| 监控类型 |
读 / 写 |
执行 / 写 / 读写 |
| 检测难度 |
VirtualQuery 一查便知 |
需要 GetThreadContext |
DWORD old;
VirtualProtect(addr, size, PAGE_READWRITE | PAGE_GUARD, &old);
ctx.Dr0 = (DWORD_PTR)targetAddr;
ctx.Dr7 = 0x000D0001;
"You can only have 4 breakpoints at a time when using the VEH debugger"
[内核课程]《Windows内核攻防实战》!从零到实战,融合AI与Windows内核攻防全技术栈,打造具备自动化能力的内核开发高手。