ollydbg 中的可疑断点消息

逆向工程 ollydbg
2021-07-07 02:42:27

我想设置断点,突然出现以下消息:

您想在代码部分之外放置断点。在数据上设置的 INT3 断点将不会执行,并且可能对调试的程序产生灾难性的影响。你真的要在这里设置断点吗?

注意:您可以在选项|安全中永久禁用此警告。

在不知道那是什么的情况下,我猜这是不允许设置断点的。所以我的问题是:

如何绕过烦人的消息?或者更好:我必须怎么做才能看不到这个?

1个回答

PE文件有几个部分一样.code.data.bss等每个部分有特殊用途,如.code部分通常包含了程序代码,即指令,该.data部分房屋的初始化变量等。

上述规则只是编译器遵循的约定。在打包/混淆的程序中,约定可能并不总是适用。您可以在数据段中有指令,反之亦然。这样做是出于各种原因,例如阻碍分析、反汇编等。

当您在 Ollydbg 中尝试INT3在恰好位于标记为数据的部分中的指令上设置断点时,Ollydbg 会抱怨,这就是您看到的消息。

这样做的原因是假设您设置断点的指令实际上是数据。在这种情况下,当程序读入地址处的值时,它将读取0xCC(INT3 -> 0xCC) 而不是实际值。这可能会导致程序崩溃。此外,由于这是一个读操作,断点永远不会被命中。

如果需要,您可以在 Ollydbg 选项中禁用该消息,但并不总是建议这样做。相反,如果您确定它是一条指令,则可以忽略警告并设置断点。

另一种方法是不使用INT3断点,而是在上述地址执行时设置硬件断点(HWBP)。这样程序就不会崩溃,即使 hwbp 设置在数据上。HWBP 是在我的 CPU 上强制执行的,并且不会像INT3断点那样以任何方式修改程序