0x7.so文件汇编修改

0x7.so文件汇编修改


本文通过cocos2d游戏的修改来介绍so文件的汇编修改,提纲如下:



本文使用的样本是cocos2d手游贪婪洞窟,可自行下载,也可以使用链接下载 https://pan.baidu.com/s/1d6BVzS  密码: 8nyk
开始破解之前,照旧安装和确认破解项,发现初始金币为100,我们姑且定为破解金币数量。



对于cocos2d手游,可修改的函数主要位于libcocos2dcpp.so中。



接下来我们开始进行so文件的分析:反编译、确认关键函数及逻辑、十六进制修改。

0x1. so文件反编译
反编译工具为我们熟知的IDA,将so文件拖拽进IDA窗口,反编译后可以得到汇编代码。



0x2.确认关键函数及逻辑
既然是修改金币,那我们在IDA的Exports一栏按Ctrl+F搜索gold,结果如下:



看到结果后,很显然我们需要的是getgold,排除掉两个bool型(布尔型,只有0和1)的getgold,只剩下GameController::getGold(CAVE_MODE),双击进入查看:



那么我们要做的就是,给R0一个更大的值,比如一个固定的比较大的数。在修改之前我们先熟悉一下ARM汇编中的MOV指令:



如果我们需要将1024000赋值给R0,则可以写为 MOV R0,,#1024000

0x3.so文件十六进制修改
这个赋值指令如何修改呢? 这里我们需要借助ARM汇编转换器,将该指令转换为十六进制,然后在so文件中修改十六进制数据达到修改指令的目的。



经转换我们得到 MOV R0,,#1024000的十六进制为 FA 0A A0 E3
IDA中,我们定位到该语句偏移地址,切换到十六进制查看:



我们现在要做的就是,地址为8552B0的十六进制 03 00 A0 E1 修改为 FA 0A A0 E3,此步骤我们使用010Editor来完成。



上图为我们修改后的值,将修改后的so文件放回lib目录下,打包运行即可,请大家自己尝试;可举一反三尝试修改钻石数量。