我的一个朋友挑战我破解他编写的一个小程序。基本上,它是一个显示图像的 exe 文件,但为了做到这一点,您需要一个带有密码的密钥文件。
我开始用 ollydgb 对其进行逆向工程,我发现需要存在一个名为 key.txt 的文件并包含密码。我意识到的另一件事是我的朋友使用密码来计算内存地址并调用它。因此,如果您的密码错误,应用程序将崩溃,因为它会跳转到一个随机地址,可能会导致违规。
他基本上将密码存储在EBX中。他放了一个固定值 EAX。然后他做了ADD EAX、EBX,最后是CALL EAX。
所以,知道了这一切,如果我知道接下来要执行哪个地址,我可以从存储在 EAX 中的固定值中减去该地址,我将得到与密码对应的 HEX 值。
我的问题是,我到底怎么知道下一个要执行的地址是哪个?我对破解还很陌生...
我尝试在 CALL 之后指向下一个地址,但它不起作用。我还检查了它正在使用的库,我当然看到了 opengl32,但我不确定我是否必须以某种方式跳转到那个库。
我的问题是,我怎样才能确定下一个要执行的地址?