目录
福利:http://pan.baidu.com/share/home?uk=2804940801#category/type=0
看书是必须的,汇编啊,《加密与解密》,《逆向工程核心原理》…..,但是最终还是要回到实践上,
之前都是接触web,写这个只是加深印象,大牛勿喷
第一课
这里利用的是字符串搜索,跟着查找到关键的jmp指令,然后修改(一般称爆破)
打开软件,输入密码(这个软件已经被脱壳了的,所以不用查壳了,做了之后可看到脱壳之后,没有什么反调试什么的是多么容易破解),记录关键字符串
用od打开,查找字符串
查找”密码错误“那个字符,并双击那个位置
在注意到密码错误上三句有个大于号,说明其他地方跳转过来我们在539ac0下断点(f2),跟着运行,
随便输入密码,跟着回到od就暂停了,看到test al,al, 作用相当于and al,al,但test不改变al的值,只改变标志位,可以看到al为1,and后结果也是1,所以ZF位还是0,jnz就是当ZF位为0的跳转,(ZF为0说明上一次的运算结果不为0,如上一次的运算结果为0,那ZF就是1了),所看看到下面的信息是跳转已实现,跳到密码错误那里了,我们的目的是不要跳,那我们可以把jnz那条指令nop掉,就不会跳了,还可以把jnz改成jz,这样错误的密码就不会跳,正确的反而会跳,比nop差一点而已。
改了之后。保存到文件,还是放到那个目录,那就随便输密码都可以了
第二课
没有源程序,但也差不多,查找字符串,定位到关键代码,查找关键跳,je直接改成jmp就行了
第三课
这里作者是带壳破解,f9运行起来后,直接转到401000处查找字符串“未购买”,查看到访问注册表的,下个断点,直接从栈中可看到注册码
但我就尝试脱壳再破解,先查壳
这个esp定律很简单的手脱,就是下硬件断点
硬件断点分为:硬件执行断点(ON EXECUTION),硬件写入断点(ON WRITE),硬件访问断点(ON ACCESS)3种。
因为这个壳一开始用pushad将8个寄存器入栈,壳对代码解密完毕肯定要popad,而且popad完后栈跟刚载入od时肯定是一样的,这就是栈平衡原理
在命令行输入hw 12ffc0,因为载入od时esp为12ffc4,入口地址一般是push ebp,那么就对esp-4的地址进行写入了,所以我们在12ffc0下一个硬件写入断点,hw中的w就是write,那么设置访问断点就是hr(read),执行断点就是he
可以看到确实是硬件
f9运行,停了下来,这代码不像入口点
再f9运行,这里应该是了,因为之前没解密,od认不出来,现在解密了,再让od分析一下代码
这样即可看到熟悉的入口点
因为映像基址是00400000,所以oep的RVA就是BD9E5
首先导出映像
跟着用importREC重建输入表,这就脱完壳了
脱壳完了就先打开软件输入用户名和注册码,自己输入的一定要记住,我就输入giant,注册码就多个1: 11111111111111,不然在程序中出现了也不知道,他这个是重启后验证的
跟着载入od,这才查找“未购买”的字符,定位到那段代码后向上看(大概翻1页吧),好像有个注册表似的东西,Software那个
下断点,f9后程序就暂停,一直单步f8,你会看到这过程他会从注册表中获取用户名和注册码,同时栈中出现了可疑字符串很可能就是注册码,测试过确实是的
第四课
这个也没程序,上网找了个,peid查了查是NsPack 3.x,也是esp定律
脱壳后发现打开不了,据说是文件校验,下断getfilesize,因为这里应该是要要看看文件大小有没有改变吧
f9运行后,断在了系统的GetFileSize那里,那么栈顶储存的就是返回地址,直接跟随一下,就回到在哪调用的GetFileSize
我们单步几次,可以看到两个cmp
c6c8就是文件大小吧,但好像又有点差别,不知道为啥呢
我们把那两个ja(a:above),因为脱壳了的话文件会变大嘛,一般壳都有压缩功能了
保存到文件就可以了,不过这个本来就不用注册码的,学习就好了
第五课
查壳,没壳,Delphi写的
运行,看看
那查找关键字“注册”
竟然找到注册成功的了,跟过去,发现有个跳转越过了这里
发现一个关键call我们让那个call返回不是0,那就可以做到不跳转了
跟进那个call,改了前面两行代码
最后复制到文件即可
第六课
这个没给源程序,就是vmp的壳吧算是,这应该是常说的虚拟机吧,直接载入od,f9运行,转到401000查找字符串,跟着把关键跳nop掉
第七课
首先打开看看,发现它写入配置文件再重启验证
peid查一下,vmp的虚拟机加的
VMProtect 是一个软件保护软件。通过这个软件保护的代码部分在虚拟机上执行,这使得被保护的程序很难被分析与破解。反汇编程序与MAP文件的运用使您能快速选择需要保护从而避免破解的代码。
因为要打开ini文件后,读取文件内容,才进行注册码的运算比对,所以我们在ReadFile API下断点
跟着转到401000查找字符串,直接看到打开程序后的第一个提示的字符串,跟过去
看到关键跳,这个可以跳过没注册的,删除前面的api断点,在jnz下个断点,f9运行,可以看到栈中出现了像验证码的东西,复制下来验证
可以看到的确是正确的
第八课
这个也是没给程序,大概回忆一下,因为打开程序后注册,弹出注册失败的框,直接给MessageBox下断点,返回两次后才找到关键跳,直接nop掉就可以了
第九课
打开后输入注册码,到ini里面去了,又是重启读取文件的
查一下,好像有壳
直接运行,下断点
GetPrivateProfileString应该是读取ini文件的api函数,
英文描述:The GetPrivateProfileString function retrieves a string from the specified section in an initialization file.
或者cmd直接输入
f9运行后,断下来了,alt+f9回到用户代码领空
单步多几次,注入留意堆栈的变化,
或者按一次f9再次断在GetPrivateProfileString,这次提取RegCode,再回到领空,走几步就在堆栈看到两个可以的,验证可知第二个可以
第十课
PEID查壳 Microsoft Visual Basic 5.0 / 6.0,没加壳,作者那里是查不出来,可能程序有出入
先看看我的,就是常规的,打开注册试试
搜字符串,就找到“注册码错”这个字符串了,直接找关键跳,把它nop掉,f9一下就可以了,破解状态应该保存在文件中,下次就不用在验证了
作者是,到user32下万能断点
查找二进制串
f9运行,输入注册码后,对刚才找到的位置下断,再按确认
跟着暂停后回到程序领空,单步到strcmp那里,就可看到注册码
确实注册成功
右边的立即注册按钮也消失了
第十一课
打开看看,看完就关掉了,因为只能有一个进程在运行,呆会我们还要上od
vb写的,没壳
下个断点MsgBox断点,VB API
f9,点击注册后,回到程序领空,看到有个跳转跳到注册码错误来了
跟过去,下个断再运行注册,发现跳转实现,猜想没错,
nop掉,再f9,发现注册码都帮我们填好了
第十二课
作者是破解弹窗,就关闭软件会叫你注册,先说我获取注册码,再破弹窗
当前目录没有可以的ini文件什么的,
一开始查找注册关键字,因为那时注册码已经判断完毕,但知道它用的是注册表来储存的,下面的红字忽略,因为我犯错误了,有错也挺好的
程序上方有个未购买,这个是先读取注册表判断完后在显示出来的,所以查找未购买,之前肯定是判断注册表的了
向上查找,看着有个注册表的路径字符,下断
重新载入,断下来,f8几步就可以看到注册码了
注册成功
去注册表看看,确实是存在这吧,删掉注册码,我们破解弹窗
载入后,f9,关闭,此时程序会弹窗,不要点击程序,回到od点击暂停或F12,再看看调用堆栈(k那里),跟过去
重新载入,运行后,关闭
返回用户代码,再返回上一层函数即可找到下面的,没实现我们就改成jmp无条件跳转就行
第十三课
打开看看,注册一下
查下壳
作者使用的是搜索字符串,其实很简单的,定位到的代码差不多
下面我用MsgBox 断点吧(vb嘛)
运行,输入注册码,返回用户领空,发现上面有个跳转,是跳到不正确的,跟过去
__vbaVarTstEq 比较变量是否相等,其实下这个断点更快捷吧
把je nop掉就行啦,f9,不过这个要打开每次都要注册,虽然随便输入都能成功,但很烦
由于软件估计有校验,过一会就运行不了,暂时不能让大家看到注册码
第十四课
作者这里主要讲脱壳,还有BC++脱壳后要手动修复IAT
我首先带壳破解一下吧,这个可以带壳找到注册码的
直接载入运行,转到401000查找字符串
跟过去后就,向上走,找到模块(函数)的开头,下个断点,单步f8,慢点你就会发现注册码,有call稍微进去看一层,跟着你会在堆栈中看到可疑字符串,都复制下来,记在记事本上就好,尝试后就最后一个是注册码
脱壳
脱壳的话呢,一看到pushad,肯定esp定律,先f8一下,再hw break [ESP]
f9运行
BC++的OEP就长这样
转存
用importREC修复后运行不了,BC++就是这样,手动修复IAT,我们看到GetModuleHandleA,在该行回车跟过去
跟过来后,向上找到第一个api函数,跟过去内存地址
转换一下显示格式
对比一下importREC自动获取的,地址是错的
修改RVA和大小,显示无效指针删除后再转存哦
脱壳就成功了
第十五课
这次讲的是用DarkDe4去破解上一课的程序,这个可以用于delphi和BC++据说
首先程序先脱壳哦,直接发送到DarkDe4
看看过程那里
刚好有三个按钮,事件,双击一下button1
这个肯定是打开网站这个按钮,我们看看其他两个按钮,暂时看不出来,那我们就在od对应的位置下断,两个按钮都要哦
od f9运行,跟着按一下生成机器码,那个断下来就是生成机器码的按钮了
那么另一个就是处理注册码的了,我们稍微f7 f8一下就能找到注册码了
第十六课
这个没有给程序,就说一下过程,就一直用f8看看是那个call之后就弹框的,跟着就f7跟进去,不断跟,最终看到有个跳转跳过了那个call,直接无条件跳转就行了
第十七课
打开看看
查壳
f9运行,注册后暂停,别点确定哦
执行到用户代码,才点击对话框
向上一点,找到如下代码,
根据那个push找到上面的关键call,关键jmp
重新载如,跟进那个关键call,单步你就发现注册码
第十八课
这节学会用工具制作内存补丁(就是将程序载入内存后,将内存地址的某个地方改了)
打开看看
这次我们从未注册入手
查下壳,没壳
向下多查几个,找到已注册
跟过去之后,向上找了n久,终于找到一个跳过了已注册的跳转,这是一个大跳转
那么我们只做内存补丁将他nop掉,因为他是重启验证的
填写相关信息
生成后直接打开补丁就行了(ko.exe,这是自己命名的)
成功
第十九课
据说这是网络验证的程序,而且是易语言写的
打开看看,注册试试
查下壳,好像没加壳,但好像有,但载入od没提示,应该没有吧
易语言的话,直接载入f9后转到401000搜索二进制串,跟着上面的那个push就是作者说得易语言体(就是易语言的特征吧),那个push的是窗口的资源
跟着用另一个od载入同一个程序,也是转到上面的位置,再搜索push 100001命令
跟着就可以找到其他窗体的地址
跟着再改掉一开始那个push
再保存,最终会得到很多东西,但有些是不能运行的,可以看到有好几个绕过了登陆界面的窗体出现了,这也是一种破解思路吧
第二十课
这个是找上一个程序的“暗桩”的,就是一些隐藏功能什么的,
我们发现push 0x52010001那个窗体,会直接退出
那我们看看是不是有个判断是它退出了,以至于破解人员不能直接运行这个窗体,先设置API断点,就是ExitProcess API
f9运行后停下来,这是栈顶的是ExitProcess的下一条指令的地址,而再上一个返回地址(就是红色框住那个)就是调用ExitProcess的函数的下一条指令的地址
跟过去我们可以看到,有个跳转可以跳过那个call
直接改成无条件跳转后保存成success.exe,这个随便命名啦
打开后以为不行
哈哈,原来是可以的啊
第二十一课
这也是一个网络验证程序,直接本地破解也可以,只不过每次打开都要注册一下而已
打开看看
查壳
既然是delphi,那就用DarkDe4看看
找到了各个按钮响应时间的虚拟地址
载入od,跟过去开始激活那个RVA,并下断点
输入后点击激活,暂停下来,单步
一直f8,发现有个call过不去,那么下断f7进去
进去后,下面可以看到一写加密的字符串,应该是对名字和验证码加密传输到服务器
还可以看到请求服务器的地址,跟着一直f8,就弹窗说错误的用户名或密码了,所以F8过不去的call就是网络验证的关键call,所以nop掉,继续向下
发现一个大的跳转,也直接nop掉看看,在f9,不是的话再改回来
f9,发现判断正确
保存后运行,随便输入账户密码就激活,就可以进入软件了
第二十二课
这个破解我又有了自己的思路,当然也是作者的之前类似的方法,
还有这个程序我的电脑缺少了一个dll,从网上下载放到system32就行了
打开看看
好像直接搜索字符不行,也是没加壳的
我的方法
先说说我的方法吧,在弹出注册码不对的时候,将程序暂停,跟着执行到用户代码,点击对话框的确认,跟着往上找,找到函数开头的地方,下个断点,如下图
f9,再点注册,跟着在栈顶点击在汇编窗口跟随,就到了call指令的下一个指令了,而且我们又找到一个跳过这个call的东西,看下面好像是访问购买网站,看到一个链接了吧,先跟过去吧
发现这里已经标注出switch,在第一个那里下断点,改成jmp的话是打开购买网页
改回来,发现下一个je跳了,那我直接将第二个je和dec eax nop掉了,就行了
保存到文件就可以了,不过每次都要点注册
作者的做法
先用脚本下断点,脚本在作者的破解包有,论坛的破解包
选择脚本
我们看到已经设置断点完毕了
到断点那看看,确实很多
f9,暂停后慢慢向下找,找FFFF,据说这个是VB的比较的标志
找到了,下个断点
之前的断点全删掉
f9运行,跟着f8单步,发现这个跳转实现,那我们直接nop掉,让你实现
再f9,已经显示已注册了,确认就打开程序了,不过要点击右下角才会弹出程序的窗口
但是关于那里还显示没注册
我们查找一下FFFF那个命令
就是下图的这个
右键下断点
f9运行,知道程序运行起来,当点击关于暂停了就是这里了,发现其下面的跳转实现了,直接nop掉
再f9,哈哈,成功
第二十三课
由于程序好像运行不了,没法调试破解了,这里也回顾一下作者的破解过程
查壳,vb没壳,载入od,f9直接就退出了,跟着查找所有模块间的调用,
跟着按按目标文件排序,按pagedown找到vbaEnd,全下断点,f9,跟着在断点前会看到一些跳不过vbaEnd的,把对应的跳转都改为无条件跳转就行了
还有这个程序会关机倒计时,就是执行了shutdown命令,其实他是在当前目录生成一个脚本,跟着我们可以查找字符串,就是那个脚本文件名的名字,跟过去,直接把那个命令置为0,这是一种。
还有就是可以直接不让它生成那个脚本文件
不能实践,只能这样了
第二十四课
这一课呢,学习的是修改程序中的字符串,用PE explorer
首先打开看看
查壳没壳
用PE explorer打开,跟着点击资源编辑按钮
跟着就开始随意修改了,哈哈
我在修改,不断修改
最好保存
可以看到简直是………
第二十五课
最好一课室教你修改od的,不过只说修改标题,不过经过上一节,我们还可以修改图标啊什么的哦
首先直接拖进16进制编辑器,这里用UltraEdit
查找字符串,
继续查啊查,具体看下图红字
我们看看,哈哈,确实是啊
在利用我们上节课使用的PE explorer看看,可以改的东西还是很多的啊,改那个C的图标
改菜单栏,不过这里应该只能改标题,不过可以汉化了,哈哈
版本号也可以改啊~
好了先到这了,有时间总结一下这里学到的破解的各种思路和方法
感谢博主,开始学习漏洞分析。
加油!