本帖最后由 哈哈呵 于 2019-8-8 00:46 编辑
软件带壳爆破 壳中追码
教程制作不易,如果大家觉得有收获请不要吝啬评分和热心值,谢谢!
今早起来大家都去约会了,我一大早起来默默装了一个XP虚拟机,感觉XP做破解挺好用的。
没人约,只能在家里做教程了。
好了我们开始我们的教程
本教程非常详细!给大家写一个详细的流程包括观察,思路,分析等等。希望能给新手一个明确的方向!做出更多的破解尝试。
本来昨天网上找了个MP3剪切器的软件追码教程,结果做完才发现论坛有人做过教程了。然后只能今天再找一个。难受的一批。
翻了一下找到了一个 叫WilliamSheet的工程计量器 我看了一下网上好像有好几个版本 有无壳的,有有壳的。我就挑了个有壳的来做追码爆破教程了。
继续往下看。
我理解的思路是这样的
软件爆破:运行,寻找关键跳,关键call,然后进行修改或者打内存补丁之类的操作
软件追码:运行,寻找关键字词,寻找关键调用资源的事件函数,寻找关键call,然后再单步寻找出注册码
当然只适用于本地验证
网络验证的话这两天在研究一个,还没太搞明白,搞明白再自己试着破解之后再发出来
回到正题
大家平时一遇到带壳的程序就怕的一批,其实不用怕的,都一样,不一定非得脱壳才能分析,带壳一样能破解。
我们先来观察这个程序的运行流程是怎么样的。
1.外部有一堆文件
2.打开之后显示的是未注册,有试用时间。
3.然后注册界面打开,有机器码,然后让你输用户名,注册码。
4.我们这里先输入一个错误的假码,点注册。
好了弹出来一个注册了,然后让我们重新启动软件
然后从观察到的地方来分析几种破解常用思路
1.从外部一堆文件来看,它是要调动外部资源的,到时可以从调动了哪些关键资源这里入手,或许能找到和真码进行验证的文件。
2.有机器码说明他的试用时间是根据机器码来的,如果遇到无法破解的软件也许可以从更换机器码从而获得无限试用时间试试?就像LOL封机器码那样
3.软件出现了提示弹框,那我们可不可以从监控弹窗的这个按钮行为函数来找到关键判断的地方呢?
4.软件注册完要重启说明是重启验证,我们可以根据这个特征找到一些关键地方,修改之后来实现重启之后验证为真,从而实现爆破
好了,上面是几种思路我们破解最主要的目的就是修改最少的代码,来实现最好的效果,这样对源程序的损伤最小。
所以我们最直接的方式就是找到真的注册码,然后制作注册机进行使用。
我们先把软件关了,查克是第一步,peid 和PE都显示是vmp壳,看字段程序是应该用VB6编写的,这里推荐使用PE查,peid有时候不准。
然后我们把主程序载入OD
进去是一堆乱码,代码虚拟化过。
对于加壳软件我们要把它在OD里面运行起来,然后才能分析。F9运行程序进入主界面。
然后ctrl+g输入表达式401000,这个是加壳程序主要的入口地址,大部分软件都能这样进入。
OK,跳转到了SE程序的入口
我们在这里进行右键搜索ASCALL或者智能搜索。只有在这里才能搜到这些数据,在其他位置搜不到的。
搜索之后我们到了这个界面,中文搜索引擎。我们想想我们刚才注册的时候,是怎样一个流程,提示了什么?提示了我们一个注册成功然后让我们重启,那我们搜索关键词注册看看。
搜到这个,显然不是,我们再find next
好了这个就是我们刚才输入假码然后提示我们重启软件的地方。我们双击回到CPU界面。
到了这里,我们再回思一下刚才的流程-我们先是输入了假码,然后它弹出一个框让我们重启,重启之后肯定是有一遍验证,那重启之前呢?
而这个之间他是怎么验证的?所以我们猜测,它拿着我们的假码去它自己的注册表里访问了一遍真码,然后把假码与真码之间做了一次比对,最后得出我们注册错误的结果。
那我们按这个思路就可以去往上翻翻。
结果我们在上方发现了这段代码
0041FC50 . 68 480E4400 push WilliamS.00440E48 ; UserName
0041FC55 . E8 96EAFEFF call WilliamS.0040E6F0
0041FC5A . 8B03 mov eax,dword ptr ds:[ebx]
0041FC5C . 8B8F 24040000 mov ecx,dword ptr ds:[edi+0x424]
0041FC62 . 50 push eax
0041FC63 . 51 push ecx
0041FC64 . 8BCE mov ecx,esi
0041FC66 . E8 85EAFEFF call WilliamS.0040E6F0
0041FC6B . 6A 00 push 0x0
0041FC6D . 68 2C134400 push WilliamS.0044132C ; 欢迎注册!
这真是个惊喜的发现!大家可能还不知道在VB6里面,push eax push ecx 是很有特色的一组对比代码,一般是拿两组数进行比对然后输出。
在关键词上方出现这组代码是不是很可疑呢?那么在这组代码上面还出现了一个call,确认过眼神,是我们要关注的call!
我们在关键call这里下个断点。
然后我们继续去软件窗口进行注册流程。
然后点注册后窗口并没有弹出来,因为已经运行已经被我们断下来啦!回到OD看见已经断在我们的call这里了。
好了重头戏要来了!注意看!
我们F8单步一步一步仔细向下运行,眼睛要紧盯 寄存器窗口和堆栈窗口!千万不要错过任何一个细节!
当我们运行到MOV的时候就发现了,寄存器窗口中出现了我们刚才测试时候输入的假码!
这是个很喜人的发现!假码已经出现了,那么与他进行比对的很可能就是真码!
我们继续单步!好了我们终于运行到了比对代码这里,寄存器也出现了两组数据,一组是我们之前的假码,那另一组你猜猜是啥?
EAX 003C4DA8 ASCII "111111111111111111111111111111111"
ECX 003C4EE8 ASCII "RegistryNo"
EDX 7C92E4F4 ntdll.KiFastSystemCallRet
EBX 0012F84C
ESP 0012EE30
EBP 0012EE48
没错!就是那个很可能是真码的那个真男人!
以防万一,我们再往下运行试试!
下面依然是出现这个数据。
到了这里,你们是不是以为我成功了?
好吧原本我也是这么以为的,但是破解的道路很可能不是一帆风顺的。
当我去重新注册之后发现,这个注册码是假的!原来是软件误导我们的!我丢!气死我了!
看了一下"真码"的单词字面意思好像是未注册,好吧这里行不通,只能换方向了。
重新理一下思路
当我们输完假码的时候它有一个弹窗提示,那我们就先到这一步看看。
就运行到这个界面不要点掉,然后回OD,暂停,然后去调用堆栈界面看到这个界面。
我们看到他调用了一个叫MessageBoxA的事件函数
双击过去到CPU界面
往上翻翻有没有关键的跳转,然而我往上翻看了半天,并没有发现什么重要的信息,中间试着断了几个可疑地方的断点,F8调试,并没有发现什么重要数据!
有点烦,按照暴躁老哥的性子,这时候应该把这个软件直接Delete扔进回收站,不,这样还不解恨,应该shift+Delete让它永远滚出我电脑。
算了,谁让今天七夕呢,谁让咱没女朋友呢,还是躲在家老老实实继续做吧,省的看朋友圈心烦。
默默的继续思考,那这样那样都不行,再试试其他办法呗,
还是401000去达入口处,回中文搜索引擎看看有啥还能关注的点。
大致翻看了一下全部的内容,发现了这么一块地方,又是未注册,又是机器码的,很可疑,过去看看
这里的未注册应该是开始显示在软件标题栏的那个未注册,机器码应该是注册窗口那个,这两个都很重要。
这两个东西在一起,那我们推测,它是提取每台电脑的机器码,然后根据独特的公式转换成唯一的一个注册码,然后才能注册成功。
点过来后,我们往上翻看见了可疑的一串字符,很像注册码,但应该不是,注册码不会放在这么显眼的地方,但我决定在它上面的CALL上下个断点。
然后我们重新加载软件,F9运行。
好了程序运行起来了,断在了这个地方,这里应该是软件刚开始运行的这里。
F8单步一步一步来
运行到下面的一个CALL的时候,堆栈窗口出现了第一个字符串我们先记录下来
0012F08C 00440914 ASCII "74D4D22B421DAFA814768DB6F8B06FD5"
然后继续单步,在PUSH 这里又出现了我们的假码!希望终于升起,并且是一个字符串和假码一起出现的。
接受了上面的教训,不敢肯定说这个就是真码了,先记录下来!
0012F088 003C4910 ASCII "111111111111111111111111111111111111"
0012F08C 00000000
0012F090 003C4B90 ASCII "74D4D22B421DAFA814768DB6F8B06FD5"
和上面是一样的字符串。
我们继续单步!
又出现了两个在一起的字符串!还是记录下来!
0012F084 0042883E WilliamS.0042883E
0012F088 0012F0B8
0012F08C 003C4DC0 ASCII "31B67C182D9504A80F2E4BA8B9FFEAF3"
0012F090 003C4B90 ASCII "74D4D22B421DAFA814768DB6F8B06FD5"
继续单步
大家看,这个地方又出现了一次比对,堆栈窗口给出的是之前的假码和ASCII "31B67C182D9504A80F2E4BA8B9FFEAF3"这一串!
到这里我不敢断定,然后去把前面的这几串字符串去注册了一下,发现又是假码!还是迷惑我们的!吸取教训了,没那么容易上当!
既然真码没出现,那我们就还是继续单步走!
0012F05C 003C4EB0 ASCII "D802DB6608CAD09A548FCFE312A22"
0012F08C 003C4DC1 ASCII "1B67C182D9504A80F2E4BA8B9FFEAF3"
继续
0012F088 003C4910 ASCII "63B0710DECCA22562D433853F5397A76"
0012F08C 00000000
0012F090 003C4B90 ASCII "74D4D22B421DAFA814768DB6F8B06FD5"
0012F094 02D80020
0012F098 02D80020
0012F09C 0012F168
0012F0A0 6BC53655 MFC42.#4874
好了就到这停止单步,再往后就都是一样的了,前面的字符串都出现了好几次,只有ASCII "63B0710DECCA22562D433853F5397A76"出现了一次,很有可能就是我们真码!
就是它!要是这个不是这个真男人,我就自闭了。
我们去试一下这个码
写入注册码,点注册
当当当当!破解成功!已经是注册成功了!测试了一下完全能使用!
我靠,不知不觉写这么多了,那注册机具体操作就不写了吧,我们知道了内存地址,注册机就很简单了,只要填入相关数据就行了,可以用keymake制作,爱盘有地方下载!
论坛相关的教程很多我就不演示了
总结一下:要先分析软件的运行流程,然后再思考有什么思路破解,然后实战,遇到问题转换思路。
七夕大家都在外面约会,我一个人静静的写完教程,哭了。
教程制作不易,花费了我好几个小时,请大家不要吝啬评分和热心值,谢谢大家!希望大家七夕有个美好的夜晚!
|