反汇编 - 为什么 CMP 指令将被比较的值乘以 2

逆向工程 拆卸 ollydbg 调试器 反汇编者 快手
2021-06-14 09:29:16

我将切入正题,我有一个破解程序,该程序里面有密码,需要找到密码才能完成挑战。

我很容易找到带密码的cmp指令但是数字密码乘以2。

程序中没有任何东西可以乘除密码,那么这一定是其他原因造成的

所以我必须将密码的十六进制值转换为十进制并除以 2以获得真正的密码。

这是 cmp 指令:

CMP DWORD PTR SS:[EBP-C],961DB0

0x961DB0 / 2 是密码。
EBP-C 有密码。

我想知道为什么在这个 cmp 指令中密码被乘以 2。

OLLYDBG 看到密码

源代码的照片,我没有在照片中。

源代码 !!

非常感谢您提前。

1个回答

cmp指令不会将任何东西乘以 2。相反,在您的 ollydbg 屏幕截图中看到的这段代码是您附加的质量较差的源代码图像中以下行的实现:

if ((!key) || (key > (0x1337 * 2000)))

首先,在 address 中0x01051C09key与 进行比较0如果key等于则0跳转到0x01051C18否则,key与 相比较0x0961DB0如果key低于或等于0x0961DB0另一个跳跃。如果key更大的0x0961DB0执行继续0x01051C18

正如您现在应该已经猜到的那样,0x0961DB0只是0x13372000 倍。

说明0x01051C180x01051C22呼吁实施wrong,制定eax正确的返回值(1),然后跳转到(我假设),其中函数序言和ret执行。