最近下载了一款游戏『狂暴之刃』

好像是模仿psp的战神:斯巴达之魂 


 

可惜游戏中的画面还是没有PSP做的好

在网上看到这款游戏的安卓破解版

都是内购破解,无限金币,无限钻石之类的


就想着既然那么多金币钻石

都是用来升级武器之类的

最终也就是升级他的攻击力

于是思考能不能修改它的攻击力呢?


开始着手试下

需要用到的工具如下:

Android killer

IDA pro

arm_asm

010Editor

首先将游戏apk拖入Androidkiller中解包

得到的目录结构,如下图:

随便浏览了一下

发现这是用cocos2d-x游戏引擎制作的


那么多数数据初始化应该就是在lib文件夹里

打开后缀名为.so文件所在的目录



以我的习惯就是先从比较大的文件开始看

因为游戏中初始化的东西多了,逻辑多了

那么它的so文件肯定也大

(个人观点,猜的,我也没使用cocos2d-x开发过游戏)




所以把大文件直接拖入ida中查看此文件

映入眼帘的是这样的一种格式,如下图:


那么一般我都会在Exports栏下搜索关键字

因为Exports栏下都是一些方法的输出

如果游戏中一般要获取钻石、金币之类的

正常的习惯就是getCoin,getDiamond。。。


但是一般我都直接搜Coin,Diamond。。。

因为如果写这个游戏的人他写的是get_Coin,get_Diamond。

或者别的,那我们就搜不到了,因为有下划线或其他的


那么我们直接在此栏下面Ctrl+F搜索attack(攻击)

得到一堆的结果

那么我们怎么判断哪个是真的获取攻击值呢

一般就直接找那种有getXXX什么的

当然可能也有别的情况,这里可能需要点英文基础

不懂的也可以立马百度查,看懂一些关键字

有时候也能大概猜到哪个函数的作用。


看到heroAttack,猜想有可能,点进去看下。

一脸懵逼,其实汇编我也看不太懂,还在学习中。

再继续看以下的方法看到有getWeaponAttack

这个极有可能就是获取攻击力的方法

点进去看看,按空格键,切换到试图模式

一般我看这种方法,都会大致浏览下整个方法

看起来不是很复杂,虽然也看不太懂


但是如果它要输出的话,肯定在最后获取一个数值

最后就是给R0赋值了,那我们就直接给它赋固定值吧

变成不管它上面的逻辑怎么处理

到最后一定是执行我们给的固定值

那么我们找到关键点了,点击此处,然后切换到Hex-view-1查看它的16进制码

复制它的地址及对应的16进制码

先放到txt文件中,然后关闭这个文件


怎么直接给R0赋值?

这里需要用到一个工具arm_asm.exe

这是一个汇编转16进制码的工具,此工具有些是无法转换的,例如。。。

关闭ida之后

我们再使用010Editor打开刚才的那个so文件

可直接把so文件拖入010Editor

因为知道最后获取攻击力的地址了

所以这里直接Ctrl+G跳转到那个地址

改完----保存----再次编译---运行

penta kill


已经破解的游戏和arm_asm工具:

http://pan.baidu.com/s/1miTyFgc 密码:8g4v


总结:

这里主要讲到so文件的修改方式

和利用一些关键词去修改,分享微不足道的思路


如果你有搞怪的方法,还请留言一起探讨下


以上只是用来技术交流

如果您使用该已经破解的游戏用于任何非法用途

均与本作者无关。