反调试清除硬件断点

逆向工程 视窗 反调试 断点
2021-06-23 05:06:06

我正在调试的应用程序以某种方式设法清除了我的硬件断点。我正在使用 TitanHide 和 x64dbg。

我正在观察以下行为:

  • 当放置第一个硬件断点时,它只被击中一次 - 在 x64dbg 中仍然可见,但我猜它在现实中被禁用,x64dbg 不知道这一点。
  • 放置另一个断点时,第一个断点恰好命中一次。

我不确定是什么导致了这种模糊的行为,但我所知道的是我的硬件断点没有被击中,所以我研究了可能清除它们的方法。我想出了:

  • ZwSetInformationThread 从调试器隐藏线程。
  • SetThreadContext 重置调试寄存器。
  • 安装向量异常处理程序,故意引发异常,并从那里修改上下文

然而,所有 3 种方法都应该被 TitanHide 捕获,并且异常应该显示在 x64dbg 的日志中(它们没有)。还有其他清除硬件断点的方法吗?

1个回答

结果证明这是 x64dbg 中与硬件断点相关的错误(现在已修复)和驱动程序拒绝访问目标应用程序的某些线程(意味着无法在这些线程上设置硬件断点)的混合。如果您遇到这种情况,我建议更新和检查 OpenThread 权限,因为 x64dbg 在这里静默失败:/