七少月 发表于 2015-8-13 02:19:30

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

本帖最后由 七少月 于 2015-8-13 02:22 编辑

本文作者:七少月《二战英雄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层的数据交互和联系。

终老白发 发表于 2015-8-13 07:38:10

我也来顶一下..

Childhood 发表于 2015-8-13 07:39:57

我了个去,顶了

故巷笑别 发表于 2015-8-13 07:41:52

非常好,顶一下

清风远行 发表于 2015-8-13 07:43:35

我也来顶一下..

何须执手问年华 发表于 2015-8-13 07:46:34

好帖必须得顶起

Rebirth 发表于 2015-8-13 07:49:05

不错,感谢楼主

花墨 发表于 2015-8-13 07:50:13

七少整个视频出来吧{:6_164:}

十梦九他 发表于 2015-8-13 07:51:34

路过 帮顶 嘿嘿

我放不下你 发表于 2015-8-13 08:03:11

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