简单的暴破
暴力破解的原理:
比如说有一个门被锁了,想进去需要开锁;
一般的思路是找到钥匙,或者研究锁的原理然后想办法开锁;
暴力破解就是直接把锁砸了;
1.分析程序
有一个简单的程序,在输入框中输入正确的密码;
然后点击check按钮,如果密码正确则弹出正确框;
如果密码错误,弹错误提示;
分析:
可以从弹框处入手,弹框说明程序刚判断过了密码;
怎么判断密码是否正确的代码应该就在附近;
然后绕过判断目的就达到了;
弹框是通过调用windows的接口来实现的:MessageBoxA;
在MessageBoxA处下断点即可;
2.下断点
用od打开程序,在命令框中输入:bp MessageBoxA;
作用是在MessageBoxA调用后的地方下断点(break point MessageBoxA);
下断点后,程序在执行到断点处时会暂停,便于观察;
3.点击运行键或按F9让程序执行到目标位置
然后随便输入一个密码,点check;
这时程序将停在断点处;
也就是刚调用了MessageBoxA;
4.分析堆栈
od右下角的是堆栈区;
一般调用函数会用汇编的call指令;
call指令执行时,会将call后面的一条指令的内存地址入栈;
而断点的地方就是刚调用完MessageBoxA时;
也就是说,此时栈顶保存的就是调用MessageBoxA的地方的内存地址即:0042A1AE;
右键单击0042A1AE,选Follow in Disassembler;作用是追踪到目标内存地址处;
分析程序:
可以看出是一个子程序,在子程序开头下个断点,可以单步执行了分析;
5.按Alt+B,或者点击图标B切换到断点窗口,为了避免影响,将其它断点禁用,只保留刚下的断点;
禁用弹框函数处的断点
6.再次点击目标程序的check按钮,程序停在新断点处;
分析得出:
这是一个子程序;
该子程序只是用来弹窗报告失败信息;
并没有判断是否密码输入错误;
因此需要知道是在哪里调用该子程序;
和前面一样的套路,因为此时的断点在子程序的第一条指令处;
所以栈顶处保存的这就是该子程序执行后的内存地址;
Follow in Disassemblur 继续追踪;
然后分析程序
7.修改判断指令
8.保存所有修改:右键单击空白处-》Copy to executable-》All modifications;
选Copy all
然后在空白处右键-》Backup-》Save data to file;
另存为一个新程序,注意重命名;
9.运行破解后的程序
备份了一个名为wst.exe的程序;
该程序被破解了,随便输入什么都是弹成功窗口;