第一期 08 API 断点 MessageBoxA

打开软件, 上来就要我们登录

我们输入 123, 弹出 注册失败

我们直接 OD 载入

其实可以直接 BP MessageBoxA

因为有个错误提示信息框, 所以我们就下一个 MessageBox 断点, 让软件在弹窗之前断下来.

下断之后我们 F9 运行

输入 123, 程序停在了系统领空

停在系统领空

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

这是程序在调用API, 并给 API 传参数

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

继续跟出去

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

这个跳转跳过失败提示, 它是关键跳

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

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

给它下断

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

跳转已经实现

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

注册成功

程序提示注册成功, 我们现在就右键保存

由于这个软件已经过期, 所以我们打不开它的主界面了. 这也解释了为什么你可以搜到一大堆字符串, 但你就是无法在程序里看到他们.