xiaoxin520 发表于 2015-8-13 02:13

从二战英雄看coco2dx游戏的smali层和so层内购破解

本文作者:七少月《二战英雄1.22》是一款coco2dx平台开发的游戏,我们通常理解,coco2dx游戏的逆向和纯java的逆向大同小异,都是在于smali层。淡然的教程也写过,实际上就是很相似,在他的教程里,几个典型的coco2dx游戏路径转向等逆向修改是在smali层可以实现。另外,我们还知道,coco2dx游戏有时关键信息可能放在lua或加密的lua里。但好像由于我们过于注重coco2dx游戏于普通java开发的相似性,都把精力放在了smali里,却不太去关注coco2dx的so里。其实,coco2dx和Unity3d的so反而显得更加重要。这从近期流行Unity3d游戏的DLL加密,而解密算法就放在libmono.so中就可以看出来,其实这两个平台的so是更为重要的。根据我的经验,一般而言,coco2dx游戏有两个so,一个是libbspatch.so,另一个是libcocos2dcpp.so,这两个so相比较,当然是libcocos2dcpp.so更重要些。本篇教程并非讲解内购破解,反而这个游戏的内购破解很简单,我要讲的是,注重so和java的联系,才能把知识学习的更痛彻。游戏反编译后,我们可以直接找到JAVA层的内购破解重点,至于原因,就不再多说,可以搜索“支付失败”、“fail”等等,总之重点就在TunnelWar.smali及其分支代码中。这里有几处支付成功与失败,目测方式都差不多,我们只讲一处,如下图:很简单的JAVA代码,我们看看成功与失败的差异就在于nativePayResult这个函数后面的第一个参数是0还是1。TunnelWar.nativePayResult(1)意味着支付成功,TunnelWar.nativePayResult(0)意味着支付失败。我们就知道了,如果想内购破解,只要把TunnelWar.nativePayResult(0)变为TunnelWar.nativePayResult(1)就可以。然而,如果到此为止,我就不会写这个文章了,这并不是想说明的东西。我想说明的是如何从so层去内购破解。从关键函数nativePayResult()名字也能看出来,这是一个原生写在so里的方法。我们打开IDA,静态分析下这个so,打开输出函数窗口,ctrl+f,搜索“nativePayResult”,发现这个函数是so提供给java层TunnelWar类使用的,与我们如上分析的正好一致,如下图:   双击跟进去,直接F5,看C的伪代码,如下图:
非常简单的代码,意思就是一句话,如果v30等于1就执行成功,否则就是失败。我要说的是,请回想相关JAVA层的代码,是否一样,如果v30为1时是成功,那么失败时候是不是值就该是0,与JAVA层我们刚分析是否正好符合。现在我们来到文本视图窗口,看怎么修改这个so,依旧很简单的ARM代码:    我们分析一下:就是让R3与1比较,如果不等于则跳到loc_2FD260这个地址处,也就是执行失败的代码,否则就往下走执行成功。由此,关键指令我们就知道是BNE,这个不等于指令,我们将其改为BEQ等于指令即可。这一点已经在我上次教程《IDA深度修改so与ARM汇编关系》文章里说过,BEQ指令HEX为0A,BNE指令HEX为1A,原因请看我的上篇教程(有视频)。直接把so拉进WINHEX,alt+g快捷键,输入跳转地址“2FD170”,不懂的朋友请看看这句代码所在的地址,再不懂请看看基础知识或我的第一季EXE免杀教程。如下图,选中的4个HEX是上述那句跳转代码的HEX机器码,我们把1A改为0A,至于原因也请看上篇教程: 至此,用APKIDE3.3(少月版),【嘿嘿,给自己宣传一下,莫怪】,重编译,OK!本次教程并非是想讲内购破解,而是想让大家注意两点:1.不要忽视coco2dx中的libcocos2dcpp.so,可能它日后也是加密解密的关键所在;2.不要因为可以在smali中去破解,就不去尝试分析so,实际上,我们应该多注意so层和JAVA层的数据交互和联系。

松陵看松 发表于 2017-11-6 15:32

你好 想请教一下 不做任何修改将游戏的dex文件回编译后dex文件会比源dex文件小然后拖入apk中 无法安装是因为哪里出了问题呢

liang227 发表于 2015-8-13 02:21

前排留名··楼主加油。。

屌丝男 发表于 2015-8-13 06:27

前排留名http://bbs.huorong.cn/?fromuid=14556

师太请您自重 发表于 2015-8-13 06:59

前排留名,大神必须要膜拜,哦,不!是跪拜!!

zxt1005759639 发表于 2015-8-13 08:08

还没学到这{:301_1005:}

gudantegong 发表于 2015-8-13 10:39

大神多出点教程啊

没有气的汽水 发表于 2015-8-13 22:41

我感觉你的教程质量都挺高的

xiaoxin520 发表于 2015-8-14 00:55

没有气的汽水 发表于 2015-8-13 22:41
我感觉你的教程质量都挺高的

感谢感谢:loveliness:

Sear 发表于 2015-9-19 03:05

好文章,赞一个。

xiaomi1991 发表于 2016-4-8 12:33

支持楼主 学习一下
页: [1] 2
查看完整版本: 从二战英雄看coco2dx游戏的smali层和so层内购破解