Ollydbg 断点导致应用程序在不命中 BP 的情况下执行不同的操作

逆向工程 ollydbg 记忆
2021-07-02 01:13:56

为了这个问题,我将简化事情。基本上我有一个 CMP,它将内存地址与常量值进行比较。我想更改常量值以强制匹配。

我尝试通过十六进制编辑和更改 ollydbg 中的值来更改常量值。这两种方法都会导致应用程序以不良方式运行,因此必须进行双重检查以检查常量值。我还没有找到第二张支票。

现在这就是有趣的地方,如果我在 CMP 命令上使用 ollydbg 设置 BP 而不更改任何内容,应用程序的行为就好像发生了更改。我已经多次确认这一点,我什至不必停止或重新启动应用程序,一旦设置了 BP,应用程序就会以非常可区分的方式运行,然后在我删除 BP 后立即恢复正常。这个BP永远不会被击中!我已经做了一些进一步的测试,只有在 CMP 命令或以下两个命令(JE 和 MOV)上设置了 BP 时才会发生这种情况

所以我想知道 ollydbg 写入内存以设置 BP 的内容是什么?这是可检测的吗?

1个回答

所以我想知道 ollydbg 写入内存以设置 BP 的内容是什么?这是可检测的吗?

默认情况下,OllyDbg 用INT 3(machine code 0xCC)覆盖软件断点的指令的开头(尽管为了简化事情,它隐藏了这一点)。这是在OllyDbg的V2,它允许您改用配置INT 1HLTCLI等软件断点。

OllyDbg v1 和 OllyDbg v2 都允许您使用硬件断点或内存断点而不是软件断点。所有三种类型的断点都可以被调试者检测到。