简单的暴破

暴力破解的原理:
    比如说有一个门被锁了,想进去需要开锁;
    一般的思路是找到钥匙,或者研究锁的原理然后想办法开锁;
    暴力破解就是直接把锁砸了;
 
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的程序;
该程序被破解了,随便输入什么都是弹成功窗口;
 
 
 
posted @ 2019-08-26 11:23  L丶银甲闪闪  阅读(334)  评论(0编辑  收藏  举报