艰难的破解入门
文章最后更新时间为:2018年12月21日 20:50:28
破解软件一直是想学的内容,可是一直觉得汇编水平太差,迟迟没入这个门,最近决定跟着恒大的教程走一遍入个门。选择爱破解而不是吾爱破解的教程的原因还是觉得吾爱破解的教程比较难懂,对新手不太友好。
每次写个文章都要说点废话,啰里啰唆的~
首先解释一下这里使用的环境,操作都是在xp虚拟机中进行的。
虚拟机下载地址:
- 微云链接:https://share.weiyun.com/5TyKSPC 密码:p6xgv5
- 百度链接: https://pan.baidu.com/s/1pLbs85d 密码: ja8g
- 软件下载地址:百度链接:https://pan.baidu.com/s/1RdSyTiC77UnuOumkx0JmXg 提取码:1vtg
- OD下载链接:百度链接: https://pan.baidu.com/s/1ggQd4C7 密码: xk9h
当然了win10下也可以破解,只是建议在虚拟机中进行学习。破解软件还需要下载调试工具OllyDBG,各大逆向论坛都有,吾爱破解、看雪、爱破解都行,因为虚拟机中自带了爱破解的工具箱,所以这里就直接利用了爱破解版本的OD。
打开软件我们发现这是一个登陆框,输入账号和密码,显示登录失败:
我们猜想这里可能是有一个比较,就像普通网页的登录一般,和数据库中存在的账号密码进行对比,如果一样就返回登录成功,不一样就返回登录失败。
接下来我们用OD来验证一下。打开OD,然后F3载入软件。
既然会显示登录失败,那么比较函数肯定也在这附近,我们搜索一下“登录失败”这几个字。注意不是“登陆失败”!
右键--》中文搜索引擎--》智能搜索。按ctrl+F,输入“登录失败”
然后进入这里的反汇编窗口:
通过向上查看,我们可以看到有一个jmp指令跳到了登录失败,我们在这行代码上右键,选择“二进制”--》“NOP填充”,就是让这个跳转失效。那么现在,你所填写的注册码或密码,输入所有字符或不输入任何字符,都是正确的了!
然后我们将这个文件保存。右键--》复制到可执行文件--》所有修改,跳转后继续右键 “保存文件”,生成一个新的文件,可以覆盖源文件。
然后打开保存的文件,输入任何数字都显示登录成功。
一个软件就这么被我们破解了,那么我们来思考一下,我们是怎么做到的呢?
首先我们分析软件有一个比较的过程,比较成功显示“登录成功”,比较失败就显示“登陆失败”,那么我们想这几个字一定在反汇编代码中,并且会有一个jmp跳到这里。
所以我们找到跳转到“登陆失败”的指令,然后将这条指令用nop填充,也就是让jmp指令失效。这样就永远不会跳到“登录失败”的地方了。
那么我们想,能不能在jmp上面寻找到比较语句,然后直接找到密码?这也是可行的,在下一课中破解注册机就是这样实现的,关键跳转指令上面的call一般称为关键call,(call指令的作用可以百度一下),找到关键call就在这里下个断点,然后运行程序到这个断点,一般在栈窗口就可以看到输入的密码和注册码的比较了。
上面的软件是没有壳的,但是基本上所有软件都会带壳,所以脱壳是进行调试前的必须要做的一步。以后再记录这些吧。
完。