美文网首页Android开发Android开发经验谈Android开发
Android 逆向分析-使用Xpatch破解酷我音乐A

Android 逆向分析-使用Xpatch破解酷我音乐A

作者: 0d1ea6d041fa | 来源:发表于2020-07-10 21:16 被阅读0次

我收集了一些学习用的资料,其中包含了很多学习,面试,中高进阶fluuter资料,还有很多视频详解,如果有同学想进一步了解,详情请看文末。也欢迎各路大神门前来装X。

最近,闲来无聊,便想听听杰伦的老歌。却发现酷我音乐App上周杰伦的歌曲都需要购买会员才能听到。于是乎,就想试试用前段时间开发的App破解工具Xpatch(

https://github.com/WindySha/Xpatch[1]),来破解酷我音乐Vip会员,实现不购买会员听杰伦的歌。下面,便将整个破解过程一一讲解,希望能给大家带来帮助。

反编译Apk

在逆向分析一个Apk之前,我们需要看到它的源代码,所以第一步就是要反编译这个Apk。

反编译一个未加固的Apk Java代码,常用的方法有如下三种:

使用ApkTool(

https://ibotpeaches.github.io/Apktool/[2])将Apk文件中的dex文件反编译为smali文件,通过阅读和查找smali文件中的关键信息来进行破解;

使用dex2jar工具(

https://github.com/pxb1988/dex2jar[3])将dex文件转换为jar文件(class文件),然后再使用jd-gui图形界面工具(

http://java-decompiler.github.io/[4])查看class文件,或者使用Android Studio打开class文件,这样能够直接看到Java源代码,比第一种方法更直观,毕竟smali代码阅读起来会比较费劲。

使用Jadx工具(

https://github.com/skylot/jadx[5])直接将Apk(dex)文件反编译为Java代码,然后使用jadx-gui查阅,或者在Android Studio中打开所有的Java代码。使用Jadx工具还有一个好处是,Jadx自带反混淆的功能(--deobf)。所谓的反混淆,不是让反编译后的源码不被混淆,而是改变混淆后的字符,使其在源码中变得唯一。比如,一个类名混淆后为a.java,开启反混淆就会改成类似于C1034a.java这种形式,这样的好处是,当全局搜索类a.java时,会得到N多无关结果,而搜索C1034a就能得到准确的结果。

对于以上三种反编译Apkd的方法,个人更倾向于第三种,方便快捷还可以反混淆。

通过这行命令,便将所有dex文件都反编译为Java类,保存到out文件夹中。然后再AS中打开out目录,编译方便查看所有的Java类。得到源码后,下面就是分析源码,需要Hook点。

逆向分析

得到了Java源码之后,我们将源码导入到Android Studio中打开。由于是要破解Vip功能,我们首先尝试全局搜索"vip",看看能不能得到一些有用的信息。搜索“vip”的结果为:

结果比较多,但结果中“VipRealInfo”字段以及“VipInfoHelper.java”类,比较引人注目。

于是,我们打开"VipInfoHelper.java"这个类,这个类中的方法并不多,但是有两个方法比较惹眼:

从字面上意思猜测,这两个方法可能就是用来判断是不是Vip用户的,方法内容也很简单,只要这个类的返回的结果是1,那么就是Vip用户,否则是非Vip用户。

这只是一种猜测,为了验证这种猜测,就需要对代码进行调试。在Android开发中,动态调试的主要方法是在代码中添加断点,然后打开AS的调试模式进行逐行调试。但在逆向中,我们并没有完整源码,因此这种方法不太可行。

既然这样不行,我们可以通过在源码中插入调试日志代码的方式进行动态调试,这是一种典型的AOP(切面)编程方式。而Xposed工具就是Android中AOP编程的最好实践方式。使用Xposed工具大致有三种方式:

在Root机器上安装Xposed框架和Xposed App,编写Xposed插件,实现代码拦截;

在非Root机器上安装VirtualApp这种双开框架,然后双开框架中启动App并加载Xposed插件;

使用笔者开发的Xpatch工具重打包需要拦截的App,使其具备加载Xposed插件的能力,然后编写Xposed插件,实现代码拦截;

在这里,我更喜欢使用第三种方案,因为更方便,更稳定,也不需要Root手机。

下面就编写Xposed插件,Hook 的方法和的方法,使其在方法调用前打印一行日志,代码如下:

下面就是验证过程,验证这两个方法是否被调用过。将包含上面代码的Xposed插件安装到手机中,启动用Xpatch打包后的酷我音乐App,并播放付费歌曲。运行后发现,上面两行日志并没有打印出来,这说明并不是通过这里的两个方法判断是否是Vip用户,改这里的方法也不能破解Vip会员。因此,需要寻找其他突破点。

通过AS定位到类和类所在的包vipreal,我们发现在这个包的同级目录下,有一个叫vipnew的包,这个包为什么叫vipnew呢,难道vipreal包是old的?带着这种猜想,我们看看vipnew包中的类是否有突破口。

这个包里的第一个类是,打开其类方法列表:

里面有几个名字叫做的方法,这名字让人浮想联翩,是已经购买歌曲的意思?还是已经购买会员的意思?假如使方法一直返回true,是不是就可以完整播放付费歌曲了?为了验证这种猜想,将其中一个方法拦截,并使其永远都返回true,xposed Hook代码如下:

重新启动酷我音乐App,使其加载新安装的插件,播放一首付费歌曲,我们惊奇地发现,确实可以完整播放了,而且Logcat中也打印出了" called ConsumptionQueryUtil hasBought"这行日志信息。而且,付费歌曲还可以免费下载。这说明会员破解成功!!!

利用Xpatch制作酷我音乐Vip破解版本App

为了方便大家使用,我已经将破解的xposed hook代码上传到了github上:

https://github.com/WindySha/RemoveVideoAdsPlugin[6]

插件Apk文件,可在release页面下载(无法下载的话,可自行clone代码编译apk)。

为了方便使用,使用Xpatch工具可以将酷我音乐Apk和插件Apk打包成一个Apk,具体使用方法是在PC的终端执行如下命令:

命令执行完成之后,在kuwo.apk相同的目录下,会生成一个名称为kuwo-xposed-signed.apk,这个Apk就是自带vip功能的Apk,卸载掉设备上原来的酷我音乐apk,安装这个apk即可享受vip服务,杰伦的歌可以随意听了。

技术总结

使用Jadx工具反编译未加固的Apk,可以得到比较完整的源码,然后在Android studio中打开源码进行逆向分析。使用Jadx时,可以增加参数开启反混淆,更方便定位代码位置。

仅仅是静态分析源码很难准确定位到破解点,需要使用xposed工具调试日志进行动态调试,动静结合,才能够事半功倍。

使用Xpatch工具可以将Apk和插件打包成一个包,更方便使用。

https://shimo.im/docs/dYkqrQcyr98jPKYX/ 《android学习面试fulutter进阶资料免费获取》,可复制链接后用石墨文档 App 或小程序打开。

相关文章

网友评论

    本文标题:Android 逆向分析-使用Xpatch破解酷我音乐A

    本文链接:https://www.haomeiwen.com/subject/jylvcktx.html