打开软件, 上来就要我们登录
我们输入 123
, 弹出 注册失败
我们直接 OD 载入


BP MessageBoxA
因为有个错误提示信息框, 所以我们就下一个 MessageBox 断点, 让软件在弹窗之前断下来.
下断之后我们 F9 运行
输入 123
, 程序停在了系统领空

我们 F8, 让它弹窗, 然后我们点 确定
, 回到 OD 继续 F8, 这是因为我们要找到关键跳

我们向上找找有没有可以跳过这个提示的关键跳, 如果大家经验丰富的话, 这基本上是没有的, 我们 F8 退出当前的 call, 然后看看上层有没有关键跳

还是没有跳过这个 call 的关键跳, 我们继续单步跟出去

好了我们终于找到了关键 call, 这是个无条件跳转, 那为什么我们刚才没有跳过错误提示的那个 call ? 不难看到, 这个 jmp
下面有个跳转来源, 肯定是这个跳过了 jmp
, 所以运行了错误提示 call

我们选中这个代码, 然后下方会出现跳转指令的地址, 我们右键转到这个跳转

F2 下断, 记得删掉刚才的 API 断点, 我们 F9 运行, 程序停在关键跳

这个跳转已经实现, 它会跳过我们的 jmp
, 点一下 EIP 寄存器回到程序运行的代码, 我们把这个跳转 nop
掉

程序提示注册成功, 我们现在就右键保存
由于这个软件已经过期, 所以我们打不开它的主界面了. 这也解释了为什么你可以搜到一大堆字符串, 但你就是无法在程序里看到他们.
这个程序并没有加密字符串, 所以我们也可以直接搜索字符串进行破解