我有一个有趣的应用程序,它似乎在使用ReadProcessMemory读取特定内存区域时崩溃。我知道它对 RPM 没有任何特别之处,因为:
- 注入 DLL 以直接读取该内存区域也会导致崩溃。
- 使用CheatEngine 等应用程序扫描区域也会导致崩溃。
它也不是警戒区或带有特殊保护标志的区域。这只是一个私有的 R+W 区域。
起初我以为他们正在安装这里描述的硬件数据断点,但在检查所有线程的调试寄存器并看到它们都为零后,我得出结论,使用了另一种技术。
我怀疑每当读取那段内存时,它们都会以某种方式引发异常。我希望了解他们在做什么以及如何检测它,或者至少让 RPM 不会使应用程序崩溃。
PS 我无法将调试器附加到此应用程序,并且可执行文件已加密,但我知道各种 TLS 回调与 VEH 异常处理程序一起使用。