我很容易找到带有密码的cmp指令,但是数字密码乘以2。
在程序中没有任何可以乘或除的密码,然后这一定是由其他原因引起的。
,所以我必须将密码的十六进制值转换为十进制并除以2才能得到真实的密码。
这是cmp指令:
CMP DWORD PTR SS:[EBP-C],961DB0
0x961DB0 / 2为密码。
EBP-C为密码。
我想知道为什么在此cmp指令中密码要乘以2。
源代码的照片,我没有
非常感谢您。
#1 楼
cmp
指令不会将任何东西乘以2。相反,您在ollydbg屏幕截图中看到的代码片段是从您附加的质量欠佳的源代码图像执行的以下行:if ((!key) || (key > (0x1337 * 2000)))
首先,在地址中将
0x01051C09
,key
与0
进行比较。如果key
等于0
,则跳至0x01051C18
。否则,将key
与0x0961DB0
进行比较。如果key
小于或等于0x0961DB0
,则进行另一个跳转。如果key
大于0x0961DB0
,则执行继续到0x01051C18
。您应该已经猜到了,
0x0961DB0
只是0x1337
乘以2000。从
0x01051C18
到0x01051C22
的指令就是实现调用wrong
的过程,将eax
设置为正确的返回值(1
),然后跳转到执行prolog和ret
函数的位置(我假设是)。评论
谢谢,但是假设我们没有源代码,如何确定0x0961DB0为0x1337 * 2000?
– AqueleCaraComNome
18-09-23在1:25
我们不一定认识到这一点。相反,我们可以将条件写为键> 0x0961DB0。基本上是一样的。
– NirIzr
18-09-23在1:27
现在我明白了,谢谢您澄清问题。
– AqueleCaraComNome
18-09-23在1:32
评论
可以用真实代码替换这些照片吗?它将使问题变得更好,并为其他人重现。