这次主要是关键 call 返回值的问题
查壳发现没壳, 直接打开
打开直接让我们注册, 输入用户名 MXYLR
和假密码 123456
, 提示注册码有误, 记住这个字符串, 我们 OD 载入

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


这个跳转跳过了注册成功, 那么很简单了, 我们不能让它跳过注册成功, 直接在关键 call 下断
这个 je
是根据 test al,al
来决定是否跳转, 而 test al,al
是比较这个 call
的返回值, 所以这个 call
才是关键, 我们在这里下断, 这几个指令不懂请直接百度
话说回来, 如果你修改跳转的话, 只是修改这一处, 而程序可能会有其他跳转, 但是关键 call 就不一样了, 关键 call 就是个函数, 程序可以多次调用函数, 我们直接把这个函数爆破了, 就完事大吉了

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

跳转实现的原因是这个 call
返回值为 0, 所以我们 F9 运行就会提示注册码有问题
我们点 注册
让它再次停在断点, 这次我们 F7 跟进去

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

也许改成 mov al,1
更容易理解
然后右键保存

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