硬件断点检测与绕过

此时Dr0为4271B5,表示4271B5地址处被设置了硬件断点。现在我们来看看CONTEXT结构。

硬件断点检测与绕过

硬件断点检测与绕过

这里我们可以看到context结构中Dr0~Dr3寄存器的内容。黄色标注的4271B5是我们设置了硬件断点的地址。其他三个粉红色标注的位零,因为我们只设置了一个硬件断点,所以它们是空的。

当异常处理完毕以后,context中的值将被清零,我们一起来看一看,直接运行起来,断在第二个断点处。

硬件断点检测与绕过

硬件断点检测与绕过

我们可以看到经过了异常处理以后,Dr0被清零了,我们可以编写脚本来恢复它。这里我们有两种方案,

第一种方案:

  在断在KiUserExceptionDispatcher入口处时将context中调试寄存器的值保存一份。当断在下面的ZwContinue的调用处时将调试寄存器的值恢复。

第二种方案:

  在context中定位到程序的返回地址,在返回地址处设置一个断点,当断在返回地址处时恢复硬件断点,相当于重新设置了一次硬件断点。

硬件断点检测与绕过

 

相关文章:

  • 2021-12-04
  • 2022-12-23
  • 2021-07-11
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-23
猜你喜欢
  • 2021-12-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2020-04-18
  • 2021-07-30
  • 2022-12-23
相关资源
相似解决方案