首页
论坛
专栏
课程

分享:

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目录下,打包运行即可,请大家自己尝试;可举一反三尝试修改钻石数量。


上一篇 :
下一篇 :
讨论 (5)
爱雪的小孩子 2018-1-30
 举报
讲得不错,对新手可以构造一个整体的框架
LiOTe 2018-5-12
 举报
感谢.
oldking 2018-6-13
 举报
https://bbs.pediy.com/thread-228439.htm
老师能看下我这个游戏是怎么破解的么?    已经完全混淆过了的.
感谢.
Du 2018-8-31
 举报
R3赋值给R0作为返回值  是怎么看出来的
阿风风 2018-10-8
 举报
对汇编语言不熟悉,看得吃力
沪ICP备16048531号-1
沪公网安备 31011502006611号