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

好像是模仿 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 文件的修改方式

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


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


以上只是用来技术交流

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

均与本作者无关。