ollydbg 2.01 中的“调试应用程序已修改调试寄存器”

逆向工程 ollydbg 调试 调试器 反调试
2021-07-08 09:02:15

我有以下问题。当我使用 ollydbg v2.01 打开示例时,我会在此处收到该消息:

Debugged application has modified the debugging registers. 
Maybe it called ZwContinue() or SetDebugContext(). 
The modifications are saved to the log.

这意味着什么?我该如何解决?我没有更改任何选项以使用默认配置。

编辑:当我尝试在评论中描述它时,我可以在 ollydbg v1.10 中打开相同的示例,但不能在 ollydbg v2.01 中打开。我的意思是,我可以在 v2.01 中打开它,但它从 RETN 指令开始并终止进程。现在,我在http://www.ollydbg.de/version2.html读到,olly 用 INT3 指令替换了 ZwContinue()。我将 v1.10 中打开的示例与 v2.01 中的示例进行了比较,是的,在 v1.10 中它有很多 INT3 指令,但在 v2.01 中有 INT3。正如我在下面所说的,由于 Debug child process 选项,我需要 v2.01。

最好的祝福,

2个回答

什么是调试寄存器

此警告的技术含义很简单,Olly 注意到您正在调试的程序更改了 CPU 的调试寄存器。这些寄存器可用于促进启用 CPU 的调试。最初的用例是通过使用这些 CPU 特定功能来加快调试工作。

一般来说,调试器使用调试寄存器有一些广泛的优势,特别是对于反分析可执行文件。

  1. 更高效/快速的调试体验。
  2. 通过大幅缩短完成某些调试任务所需的时间,更快的调试使得基于时序的反调试变得更加困难。
  3. 硬件辅助断点和调试功能更难绕过或检测,并且由于大多数与逆向相关的调试器过去没有使用它们而受到的关注较少。

第 2 条和第 3 条可能看起来相同,但尽管实现了相似的目标,但原因却完全不同。

Ollydbg1 和 2 的区别

Olly v2 默认情况下开始使用调试寄存器用于它自己的调试工作。这对于以前的 olly 等反分析特定调试器来说并不常见,这在开始时被证明非常有用,并且是一个不错的主意。重要的是要注意 olly1 公开的调试寄存器用法,但它的重点较少,并且不是默认行为。

这可以通过取消选中此复选框来关闭: Ollydbg 配置

我也遇到过这个问题。在我看来,这可能意味着被调试者采取了一些反调试措施,但绝对不是那个意思。作为证据,我已经用一些不能包含任何反调试措施的 PE 对其进行了测试。我使用了 Olly v2,在设置中我让 Olly 在启动/附加应用程序时在系统断点处停止。如果您知道实用恶意软件分析 (PMA) 一书,那么我已经加载了实验室 20-01、7-2(只是随机的)并在入口点和其他一些位置设置了硬件断点。我遇到了同样的问题 - 断点已修改为零。