前言:登山赛车(Hill Climb Racing)是一款有趣的休闲游戏。玩家需要驾驶一款赛车跑在山地上,由于山地非常颠簸,需要玩家很好的把握油门和刹车,保证车子就不会翻过来。沿途可以收集金币,用来改造车子。奈何好的车子太贵,金币收集过程漫长。于是乎想到是否能够通过反编译apk修改金币值。
效果图:
用到的工具可以参考我的另外一篇文章
原理分析:
登山赛车,通过玩游戏发现,即使在没有网络的情况下,金币也能进行收集增加,通过这样的一个信息,我们可以大胆的猜测,储存金币数量的应该是保存在手机本地的,这个时候我们想到一般我们在保存到本地时都用到哪些方式:1、SharedPreferences 2、数据库 3、本地文件File ,一般前两者用的比较多。既然我们有了思路,那就行动吧。
第一步:一般我们程序的主界面都喜欢叫HomeActivity 或MainActivity ,通过查找还真有MainActivity(这来的有点简单了)
第二步:通过对MainActivity的分析,我们发现其中有两处比较像,见下图:
你们肯定心里会疑问,你咋就知道是这两处呢,主要是因为这两处都有coins这个关键词,英文好些的童鞋应该知道这是硬币、钱币的意思,看着是不是和金币很像。我们点进去发现InAppPurchaseStore正是我们要找的类(这一步来的也比较轻松,只能说作者比较懒,都按照常用逻辑来,取名字也比较符合字意),见下图:
99999999是我已经修改过后的。既然我们已经找到这个类,那接下来就开始反编译apk得到smali文件找到InAppPurchaseStore.smali并修改。
第三步:修改文件,点进去发现都是一些你看不懂的语法,不过没关系,我们有技巧。通过上面反编译可以看到我们需要修改的两处代码对应的行数分别为:27、37,接下来我们全局搜索这两个关键词:见下图
只要修改这两处就行了,如果你搜索到这两处还不会修改smali文件,可以在AS中导入java2smali插件,通过插件自动完成,但是插件生成的只是依赖于你当前项目的smali文件,你还需做适当修改。
第四步:打包apk,并签名,到这里破解登山赛车金币限制就成功了,修改其他值:如钻石也是同样的方法,可自行研究。