第一期 05 EAX 决定胜负

这次主要是关键 call 返回值的问题

查壳发现没壳, 直接打开

打开直接让我们注册, 输入用户名 MXYLR 和假密码 123456, 提示注册码有误, 记住这个字符串, 我们 OD 载入

输入用户名和假密码

直接搜字符串 注册, 神奇了, 没找到错误信息, 倒是找到了成功信息, 直接跟进去
很容易就在上面找到了一个关键跳, 上面的 call 就是俗称的 关键 call, 关键 call 直接影响关键跳

注册成功的信息

关键跳关键call

关键跳

这个跳转跳过了注册成功, 那么很简单了, 我们不能让它跳过注册成功, 直接在关键 call 下断

这个 je 是根据 test al,al 来决定是否跳转, 而 test al,al 是比较这个 call 的返回值, 所以这个 call 才是关键, 我们在这里下断, 这几个指令不懂请直接百度

话说回来, 如果你修改跳转的话, 只是修改这一处, 而程序可能会有其他跳转, 但是关键 call 就不一样了, 关键 call 就是个函数, 程序可以多次调用函数, 我们直接把这个函数爆破了, 就完事大吉了

在关键 call 处下断

关键 call 下断, F9 运行, 输入刚才的用户名和密码, 我们 F8 单步, al = 00, 于是下面的跳转就实现了

跳转实现的原因是这个 call 返回值为 0, 所以我们 F9 运行就会提示注册码有问题

我们点 注册 让它再次停在断点, 这次我们 F7 跟进去

函数内部

这个 call 算了一大堆最后算出个 0, 我们管它怎么算, 我们直接在开头给它改成 mov eax,1, 然后在第二行弄个 retn, 让它返回真

暴力retn

也许改成 mov al,1 更容易理解

然后右键保存

注册按钮已经点不了, 说明我们已经搞定了

打开破解版, 注册的提示已经没有了, 我们的工作已经搞定了