本文使用的例子可以关注公众号全栈编程笔记回复OD 逆向工具包进行下载
特别声明:例子和工具来源于网络,不保证安全性,在操作之前建议使用冰点还原或者你认为安全的工具保护系统。

本文介绍

本文使用密码登录.exe这个例子来介绍多种方式破解。这里例子的大致工作原理是在一个输入框中输入一个密码,如果错误会提示登录失败

如果输入正确的密码就会弹出一个新的窗口

破解目标,让他弹出来登录成功的窗口

破解方法

字符串破解法

1. 找到文件头

使用 OD 打开例子,按下Ctrl + G进行搜索00401000(exe 程序的文件头)

2. 智能搜索

可以搜索关键字,找到”登陆失败”这几个关键字
右击,找到中文搜索引擎中的只能搜索。

Ctrl + F 搜索 “登陆失败” 找到位置

可以很容易分析发现,是由于这个跳转导致的弹出登录失败的窗口
那我们这里就可以简单的把这个跳转语句抹掉。点击这个语句,右击二进制,使用 nop 填充

再次点击登录按钮可以看到登录成功的窗口弹出来了。

弹窗断点法

因为报错信息是一个错误弹窗,我们可以下一个弹窗断点来找到报出错误的地方。

1. 设置消息框断点

2. 运行程序,使其弹出消息框

3. 寻找调用过程

点击
然后点击
点击 k 查看调用栈

右击第二个显示调用
也可以找到这个位置

Push 大法

push 大法就是让他跳过登录窗口直接到达目标窗口

1. 跳转到文件头

2. 找到窗口

Ctrl + F搜索 push 10001push 10001隔一条指令就是一个窗口,当然有些软件不止一个窗口,可以使用Ctrl + L搜索下一个,把这些窗口复制下来。

3. 进行替换

输入Ctrl + B搜索ff25

可以看到在搜索结果的上面他 push 进去了一个窗口,现在我们把他修改成我们刚才找到的窗口。
右键汇编 将push 0x52010001修改为 push 0x5201000E这个时候打开软件就直接跳出来登录成功了。
有多个窗口的情况下需要挨个尝试,直到找到想要的窗口。

直接跳转

有时候已经找到了关键的代码的时候可以直接使用 jmp 跳转。
比如我们已经找到了这段逻辑,判断 xxx,如果成立则验证成功。那我们可以直接跳转到判断的逻辑下面去,让他直接执行判断之后的逻辑。
这种和 push 大法比较相似,不同的是 push 大法修改的是窗口地址,这里直接把整条 push 都修改了,这里就不赘述了。

如何保存

使用 OD 修改之后可以立刻生效,但是下次打开程序就会失效了,这个时候我们需要把修改保存下来。
右键 保存到可执行文件,所有修改

这个时候会出来这样一个框,右键保存到文件即可