爆破一款带网络验证的程序,分享思路与过程~
本帖最后由 maxwgf 于 2017-1-24 22:37 编辑今天在网上看到一个外挂脱壳与破解的视频教程,然而视频只讲到了脱壳,却没讲如何破解{:301_1008:}于是自己百度上搜了这款同版本外挂,自己尝试爆破(该版本外挂年份已久,貌似已失效...也是,没失效的话也不可能发出来了,听闻破解外挂有搞头{:301_997:})下面进入主题吧。
首先说一下网络验证,目前非常多的软件采用这种方式来保护程序,防破。有的加一层网络验证,厉害点的就多加几层,这款外挂只加了一层,破解起来比较简单。
1、查壳,发现加了Nspack,采用ESP定律法脱壳,有一点需要留意:
00C247BC 9C pushfd
00C247BD 60 pushad
00C247BE E8 00000000 call 1-PAutoM.00C247C3 ; 到了call这里需要运行,这里会循环解密,循环大概8/9次吧,然后程序会到达OEP,即可脱壳;
2、脱壳后用OD载入程序,我采用F12暂停法破解,首先F9运行,程序跑起来,我们点击登陆,很明显,这是个网络验证;
3、我所了解到的处理网络验证的方法,主要是采取跳过关键call的方式,也就是说,得找到调用网络验证的关键call,然后让程序跳过这个call即可跳过网络验证,达到去网络验证的效果,我们直接暂停,然后找到最后一个函数,右键-显示调用;
4、进入这段程序后,我们发现调用api的这个call附近并没有跳转可以跳过它,也就不是关键call,于是找到段首,F2下断点;
5、接着重新加载程序,F9运行,程序跑起来,然后点击登陆,程序被断下来;
6、我们在右下角的堆栈窗第一个地址处右键-反汇编中跟随;
7、发现第4步中的call来自这行代码,它上面有个call,而且附近有个跳转,可以跳过它,或许这就是关键call,是不是我们试试就知道了,先标注一下它为关键call;
8、我们在段首F2下断点,接着重新加载程序,重复第5步中的操作,程序断下来后,我们开始单步;
9、到了我们所认为的关键call附近,如果下面的是关键call,那么这个就是关键跳转,我们仔细看,初步分析,这个跳转是由一个cmp(比较)控制的,cmp byte ptr ds:,0x0,我们看到 ds:的值为0,这里让ds:与0相比较,如果左边等于等于右边,那么这个jnz就不跳转,如果左边不等于右边,jnz就跳转,为了分析,我们先不做任何操作,继续单步;
10、跳转没有实现,证实了我们上面的分析,继续单步,发现程序走到我们期初标记的关键call的时候,程序进入到我们第4步中所下断点的段首,那就非常明显了,我们的假设与分析是正确的,那的确是个关键call,也就是唤起网络验证的关键点,接下来要做的就是让关键跳转实现,跳过关键call;
11、我们重新加载程序,让程序断下来,单步来到关键跳附近,既然是cmp byte ptr ds:,0并且ds:=0,那么我们只需要将ds:与非0值比较即可,索性我们让它跟1比较好了,0自然不等于1,修改为cmp byte ptr ds:,1,既然左边不等于右边,接下来的跳转就能够实现了,我们单步验证,好,到了这里,我们保存一下破解文件;
12、关掉OD或者重新加载,因为这个程序不能同时在OD内外运行,然后运行破解文件,点击登陆,发现已经成功跳过网络验证,大功告成。
总结:该外挂破解起来比较简单,因为只有一层网络验证,注意点就是脱壳的时候,有个循环解密要留意,另外,程序在OD中运行比较慢,每次单步不是特别流畅。
免CB下载:https://pan.baidu.com/s/1qXOj1aW(土豪随意{:301_978:})
PS:该程序360会报毒,建议在虚拟机内运行,想要练手的可自行下载(已删去破解文件与脱壳文件{:301_997:})~
以上分析仅代表个人观点,如有不足还请指正{:301_996:}
zhuyong770 发表于 2017-1-26 09:07
这是脱机版本的传奇世界辅助?
是不是脱机我不知道,表示不玩游戏{:301_999:}只是针对它的网络验证 Kingsama 发表于 2017-1-26 00:07
学习了,希望楼主多发点這样的教程供我这种小白借鉴。。
谢谢支持,有合适的一定会发{:301_996:} 大神你好 12349xxx 发表于 2017-1-24 22:29
大神你好
{:301_999:}还是新手 楼主的学习精神值得我们学习 云中岳 发表于 2017-1-24 22:41
楼主的学习精神值得我们学习
共同进步{:301_996:} 很好的思路 onhax 发表于 2017-1-24 22:56
很好的思路
{:301_996:}有其他方法也欢迎留言交流 很清晰的思路学习学习谢谢 谢谢分享,很6的思路,借鉴一下 楼主,请收下我的膝盖!!