逆向破解第⼀课之易语⾔注册程序破解
破解注册程序流程
========
写的不好⼤佬勿喷
⾸先写个⼩易语⾔,易语⾔写起来⽅便就写了易语⾔的注册程序,c 语⾔调⽤winapi 写窗⼝类有点⿇烦就采⽤易语⾔
按钮源码
我们把程序放⼊OD ⾸先我们现收悉⼀下OD的界⾯(因为我也刚⼊门逆向不久,我只能⽤我的理解去写可能不太权威,⼤佬勿喷)
在这个位置我们看⼀个我们写的注册程序的验证流程:
1.点击注册按钮
2.读取注册码
3.判断注册码合法性
4.返回结果
我们看注册码的验证流程,我们先更读注册码的函数在易语⾔中常回调GETwindowTextA函数进⾏读取
CTRL+G输⼊我们跟踪的表达式
这个是我们汇编指令的函数头也就是GETWindowTextA函数的函数头
我们在这下个断点,让程序跑起来
ok我们看到在这⾥我们点击⼀下程序,程序就崩溃了,我们最终要的是在他读取的时候断下来⽽不是让他⼀直断在这,那这时我们怎么办呢我们就需要下个条件断点,那我们该怎么下呢,我们先看堆栈,我们定位到函数GETWindowTextA这个函数我们看⼀下它的⼏个参数
这个001A186C就是它的句柄号,它是读取的注册的这个标签的内容显然不是我们要的效果,我们要的效果是读取编辑框的内容后停下,那我们可以这么下,我们看esp寄存器,我
们每次保存的位置都是栈顶esp这个位置,下⾯的位置为esp+4也就是它的第⼀个参数
字符串函数模拟注册
我们就可以下这样的条件断点我们要让他不等于这个句柄号的时候停下来因为我们每次断的时候都是句柄为这个值的时候断下来,所以我们让他不等于这个的时候再段我们下的条件断点就为esp+4不等于这个句柄号的时候才断,shlft+f2下条件断点
下完条件断点的时候我们再跑⼀下是不是没有断的现象了,可以正常输⼊了我们点⼀下注册就正常断下
了,这个位置就是在读取编辑框内容的时候断下,我们接下去⾛,⾛到我们的弹窗位置,因为我们⾛到弹窗位置我们⽹上跟就能看到它的验证那⼀块
,我们⽤⾃动步过,ctrl+f8
在这个位置⼜进⾏了读取这个我们不管,我们接着跑
ok我们到这个位置程序弹出了注册失败我们⽹上跟上去看断点,我们发现⼀个call这个call可能是成功信息call,我们接下来往上定位看到函数头下个断点,把条件断点去掉,然后我们跑⼀遍,我们在函数头断下,f8单步跳,发现⼀个⼤跳转,这个位置是个关键跳我们在这下个断点,跑⼀编,断的这个位置就是jcc指令也就是我们的if判断语句,我们在这个位置有两个⽅法进⾏破解
第⼀个我们使⽤⼆进制nop填充也就是不执⾏if语句,直接往下⾛
第⼆个
我们就是在寄存器上操作,因为我们的jcc指令是在我们的efl寄存器je跳转是看zf标志位我们把zf标志位强⾏修改,修改之后它就不进⾏跳转让他强⾏往下执⾏

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。