我正在调试的应用程序以某种方式设法清除了我的硬件断点。我正在使用 TitanHide 和 x64dbg。
我正在观察以下行为:
- 当放置第一个硬件断点时,它只被击中一次 - 在 x64dbg 中仍然可见,但我猜它在现实中被禁用,x64dbg 不知道这一点。
- 放置另一个断点时,第一个断点恰好命中一次。
我不确定是什么导致了这种模糊的行为,但我所知道的是我的硬件断点没有被击中,所以我研究了可能清除它们的方法。我想出了:
- ZwSetInformationThread 从调试器隐藏线程。
- SetThreadContext 重置调试寄存器。
- 安装向量异常处理程序,故意引发异常,并从那里修改上下文
然而,所有 3 种方法都应该被 TitanHide 捕获,并且异常应该显示在 x64dbg 的日志中(它们没有)。还有其他清除硬件断点的方法吗?