我最近遇到了这种被广泛使用的反调试技术。
在终极反调试参考中,作者在“指令计数”部分写道
与不存在调试器时相比,调试器会干扰单步执行,导致指令数不同。
通过对这种技术进行一些试验,似乎当您在 x64dbg 中设置硬件断点时,所有线程的调试寄存器不仅被设置,而且还被冻结 - 例如 - 如果程序调用 SetThreadContext 来更改这些寄存器, x64dbg 似乎把它们改回来了。
鉴于 x64dbg 的工作原理,以及该技术依赖于这些调试寄存器,该技术是否仅限于检测硬件断点的存在或修改?