魔趣中心破解

看别人的博客,心想,写起来不会很难吧,大概就是把自己的思路写下来。但对于我自己,实际写时,才能感受到,要把自己的想法表达出来不简单。实属汗颜。

前言

仅限于技术交流,看不惯的人、键盘侠们,可以离开了,不用多嘴。

修改程序,是用程序语言表达自身意愿的过程。基本的语法知识,是必需的。例如:Java、Smali。接下来会讲解破解的常用手法。总的来说,会写程序,就会修改(破解)程序,因为在写程序时,会理解如何实现方法Void,修改时只是需要用Smali语法表达你的意愿。

历程

文章末尾有附件下载。(基于Moto G修改)

00x00 思路

寻找检测捐赠信息的方法,将其修改,使其方法返回固定值(mkcenter捐赠68cny后,才能使用全部功能,所以准备修改为68cny,想要修改为66666也行)

00x01 准备

使用工具当前Activity(或者其他软件,这里用的是“开发者助手”),查找魔趣中心的activity,可看到如下结果。
img
获取到了activity,可以缩小目标范围,定位代码

01x00 开始

以zip方式打开apk文件,使用dex编辑器打开class.dex,并打开上图中所显示的activity,寻找方法。
img
如上图,并未找到相关方法(全是activity操作方法)

首先考虑,如何检测捐赠信息,并判断捐赠金额?在这里,需要些许经验。例如:魔趣系统的license.class(其中包含生成license方法,以及校验),是不存在于任何apk的,内置于framework的jar中。这里介绍两种方法。

方法1

但是我们只需要知道,哪些class调用了license方法,就可以知道究竟哪些class是我们需要的。

在dex中搜索License字样,在搜索到的class中,寻找正确的class即可。

方法2

更简单的思路。魔趣判断是否能使用全部功能,肯定会校验捐赠金额是否达到68cny。所以,我们只需要搜索包含68的class即可(需要注意的是,在smali下,数字是以16进制表示,请搜索16进制字符)。

通过上面两种方法其一,或者并用,会找到这个class。
img

01x01 定位

找到class之后,就是定位方法Void了。判断最易修改的方法,需要找到对应的特性,可能找到的方法,修改后都能达到效果,但是,修改某些方法可以一步实现。

例如com.mokee.center.fragment内的class中,有关于控制魔趣中心的方法(例如:isOTA方法),但是治标不治本。通过观察,可以发现,程序内部检测捐赠信息,是通过com.mokee.center.utils.Utils类中getPaidTotal()方法获取捐赠金额(get获取,paid支付过的,total全部,就是字面意)
img

01x02 修改

本篇难点:Smali修改。如何使此方法返回68f?(f指float类型)这里需要用到smali知识,感兴趣Google搜索学习,不感兴趣,可以直接复制下面的代码,替换getPaidTotal内全文。下图是修改后的getPaidTotal方法。

const v0 0x47823500

new-instance v1 Ljava/lang/Float;

invoke-direct {v1,v0} Ljava/lang/Float;-><init>(F)V

return-object v1
img

注意修改寄存器数量
img

02x00 后继

保存并退出。由于魔趣中心属于系统软件,system分区下不需要修改签名,也不要修改签名

将apk替换到/system/priv-app/MokeeCenter/MokeeCenter.apk,随后强制停止魔趣中心(重启手机也可以),然后重启魔趣中心,即可应用修改。

02x01 问题

这种修改方式,会造成后遗症—–无法OTA。解决方法:使用修改版下载OTA文件后,替换回原版魔趣中心,再安装OTA。或者修改OTA包内META-INF/com/google/android内文件,将包含MokeeCenter的行删除。

03x00 下载

附件:暂无(回家之后发布)

想要更好的破解方案?例如直接生成mokee.license文件,请关注我的下一篇博文。