记一次外挂破解(无算法分析,求不吐槽)
前天,基友下了一个外挂,要收费,问我能不能搞一搞,我便跃跃欲试。(话说我在吾爱的三次发贴,一是为老爹,二是为妹子,三是为基友,看来哥真的是一个德智体美劳全面发展的五好青年呢!!)注:由于此破文不涉及任何算法分析,仅仅是记录出破解的全程思路,包括走过的弯路。大牛们就不要吐槽我贫瘠的汇编水平了。
1、我首先把软件上传到http://www.virscan.org/,有2个引擎报毒,whatever! 如果报毒的多,我就放虚拟机里面来玩。 双击运行(担心的可以放虚拟机里面跑)有一个弹窗,确认之后就是充值窗口,值得一提的是,本人win8系统,直接打开和右键使用管理员身份运行,得到的特征码是不一样的,随意输入充值码之后,就提示充值成功,重启软件验证如下图:
看来软件会把输入的充值码存在本地,至于是文件还是注册表,等下再来找。
2、上peid,无壳,哈哈,可以省不少功夫。
3、上OD,载入之后查字符串发现关键的地方,如图:
双击错误信息,来到相关位置,发现上方有一个跳转非常可疑,从004026B2跳到004033AF,这未免也太远了吧,目测这是关键跳,如图:
心里有些蛋蛋的失落,未免也太简单了,随意地把004026B2处的代码改为 JLE 004033AF,让它不要跳,另存为之后,发现程序启动不了。。。好吧,改成nop,仍然启动不了。那改回去先。
4、既然这个位置无法爆破,那就慢慢找其它地方吧。继续在字符串里面找,发现了一个可疑的地方:
00402C55 PUSH 新服挂机.004BE24C sail\波波1
00402D98 PUSH 新服挂机.004BE24C sail\波波1
既然那个充值码是重启验证,肯定会存在本地的。目测就是存在注册表里。在注册表里面找这个字段,果然找到了刚随意输入的注册码。如下:
此时感觉胜利在握,读取注册表时断下来,然后单步跟踪,然后查出正确的充值码或者是暴力破解,然后升职加薪,出任CEO,迎娶白富美,走向上生巅峰!
额,好了,在这两个读取键值的地方下断点。F9运行。
我勒个去!!!怎么直接提示错误信息了,这尼玛不符合剧情啊,不读注册表你重启验证毛线啊!!
试了几次,还是一样,直接弹出错误对话框。 感受到了来自软件作者婶婶的恶意!
5、把充值码存在注册表,启动的时候没读注册表怎么就知道我没注册呢? 真相只有一个! 那就是这个软件启动的时候肯定做了网络验证。把QQ、浏览器、之类的软件全关了,祭出我的杀器,wireshark!
果然有稀奇的交互,(学了多年网络,总算有除了接网线之外的价值)如下图。
咦,这个网址好像有点熟悉,这不就是刚刚在字符串里面看到的两个网址吗? 我还以为是广告。
0040216F PUSH 新服挂机.004BE171 http://qqq1228.blog.163.com/blog/static/243062007201411991534114/
004021EC PUSH 新服挂机.004BE1BB →
0040226E PUSH 新服挂机.004BE1BE http://hi.baidu.com/bobocai/item/6e52711ba23ad63db83180ca/
004022EB PUSH 新服挂机.004BE1BB →
怀着崇拜的心情,我打开了这两个网址,大片的license迎面扑来。你问我为啥知道这是license,我。。。我也不知道,反正它是就对了,并且,不出意外,应该就是特征码加密后得到的。
→703dd0cd3c:2042年5月26日→多开→
→b99ab0d315:2017年6月1日→多开→
→74387097d8:2015年12月13日→多开→
→c17adea9a4:2015年12月24日→多开→
→2ed7a18ca8:2016年1月19日→多开→
直到此刻才明白,这软件是先去网络验证了本机是否有授权,再验证本地的充值码。缺1不可。
6、不错不错。既然知道了原理,我们就有办法去搞一搞,我首先的想法是,在拿到网络的数据之后,与本地的做比较时,一定有一个关键地方,稍作修改应该就解决这一步了。
于是,在访问两个网址资源的地方下断点,F7单步。
走到我头晕眼花也没找到关键地方。放弃。 不过倒是找到了生成本机的识别码的地方,如下图:
7、吃饭的时候脑子里面还是这个事,突然想到,如果把它验证的网址改一下,改成我自己的,然后把我自己的特征码填上去,不就解决了?!顿时为自己的机智点了10个赞。
马上开通了百度博客。
尼玛,我百度博客的账号比作者的账号多2个字符,直接修改那个文本资源,写不完啊!!
然后经历了长达几小时的改验证网址的过程,始终都仍然是失败。
实在没办法了,无耻地咨询了软件作者,要了一个试用的充值码,同时,我发现验证博客上已经添加了我的key。
我把这个key也放在我自己的博客上。然后用修改了验证网址的版本,怎么都不成功,软件作者也没办法了。甚至添加了我两个特征码(见第一个图)对应的key。还是未注册。
直到,我打开了未修改的原版程序,居然没有提示未注册,而是提示还有2天到期!
再次尝试之后发现,只要我修改验证网址,就会失败,哪怕程序仍然请求了网页,并走了很多的流程,最后仍然走向失败。
这对于不擅长看汇编的我实在是捉急了。
8、既然改验证网址是失败的,那我现在想法就是修改key了。把我自己的key改成别人的key一样可以解决问题。第一想法便是修改自己机器的特征码,跟踪之后发现4480B0这个CALL里面便是生成特征码的关键地方。EAX中存放的值转化为10进制便是特征码。修改之,如下图。
改完之后特地到虚拟机里面跑了下,确实是固定了key. 发给基友试一下效果,结果他说他的特征码是一串字母,无论是不是以管理员身份运行。此时才想起来最初就试过,以管理员身份运行不一样。接着修改了OD的启动模式,然后重新调,这下子改不成功了,因为是一个字符串,长短还不固定。改了几个地方都是报错。
然后发现自己很二,干嘛改加密前的特征码,直接改加密后的,改成和别人一样不就好了。
找到了关键代码, call 40106f之后就拼出了加密后的key,如下图。
先在程序中随便找了个空白的位置 00507FE0 写上了我要改的key。 然后直接修改,如下图:
9、保存运行,已经成功,提示还有9000多天到期。不过还有一个充值码的问题没解决。现在的程序仍然会进行充值码的校验,此时再下注册表位置的断点,断下来之后,跟踪,轻易地发现了关键跳转。因为是明码比较,如下图修改。
修改之后既然注册表里面的充值码为空,也可以正常软件了。
总结:
和前两次的破解一样,没有算法分析,只是一个不断见招拆招的过程。
软件就不放上来了,小众游戏的小众挂。
tmsdy 发表于 2015-3-23 19:46
哇!!! H大来了。。
母鸡啊,换了之后就是不成功,我看了字符串里面好像也没有其它标记啊。。。具体 ...
{:1_886:}第二篇精华技术要求更高,不如第一篇好拿,还需要再努力下,话说可以跟下具体为啥换了地址就不行了,应该你也很好奇啊。 Hmily 发表于 2015-3-23 19:23
换地址的思路赞一个,但为啥会不成功?是不是他页面里有什么特征没写上?
哇!!! H大来了。。
母鸡啊,换了之后就是不成功,我看了字符串里面好像也没有其它标记啊。。。具体的也没有跟下去
都不加精~~~{:1_937:}{:1_937:} 厉害啊,支持学习了!
破解就是不断的寻找代码的过程,确实需要耐心。 文笔一流啊,适合出书!{:1_918:} 不错 分析的很详细
感谢分享 纯手打,真是有心了 我也是醉了,这弯真远 换地址的思路赞一个,但为啥会不成功?是不是他页面里有什么特征没写上?