【Android(安卓)安全逆向02】某音乐 | Android APP 破解

数码小果酱
熬夜修仙。法力无边。我命由我。不由天。

声明: 文章中的技术只做研究之用,禁止用来从事非法用途,如有使用文章中的技术从事非法活动,一切后果由使用者自负简单案例


首先先来个简单案例:


安装一个简单 demo 的 apk 文件到雷神模拟器:


打开:


输入用户名和密码登录


我们不知道账号和密码,但是想登录成功,该如何操作呢,我们可以对这个 apk 文件进行反编译。


使用 Jadx


先看一下这个 apk 的逻辑,使用 Jadx:


首先查看有哪些页面,在【资源文件】-【AndroidManifest.xml】-【】定义了页面:


可以看到只有一个页面,其中的【android:name】后面是类,可以去这个类中查看相关信息。


我们在登录的时候会看到【登录失败】,可以通过全局搜索:【导航】-【搜索文本】找到这个【登录失败】字段。


双击进入:


看到【name.equals】和【pass.equals】两个参数,知道这个就是我们要找的账号和密码。


就此,我们可以在很多 app 新发布的时候,多观察看看是否有这种的测试代码,如果有的话,就可以直接登录 app。


下面,我们使用 Android Killer 工具,修改 apk 文件,使我们输入任何账号密码都可以登录成功。


输入【登录失败】,搜索字符串:


双击进入:


聪明的小伙伴会想到:我们直接把【登录失败】四个字改为【登录成功】,就可以了。


改成功后直接编译:


编译成功后,安装:


安装成功后点击运行:


输入任意账号密码都可以提示登录成功。


另一种方法:


我们开始改【跳转】,首先找到登录失败的代码块:


再去上面把所有跳转到这个【cond_0】的跳转命令全部注释掉。


再编译:


编译成功后,安装运行,发现达到预计效果。


对某音乐 apk 进行破解


下面我们开始对酷我音乐 apk 进行破解,首先安装运行查看:


在音效选择中,发现收费内容:


我们不想付费开通,怎么办呢,下面我们一起操作一下。


首先进行使用【Android Killer】进行反编译,点击【是】:


搜索关键词【开通车载VIP】:


发现没有结果。


扩展


对Android在引用字符串的时候:


1.直接把字符串写在代码里面;


2.在代码里面通过字符串的索引id来引用res\values\strings.xml中的字符串。


查看某音乐的文件:


使用 notepad 全局搜索:


可以搜索到:


然后搜索【dialog_content_tips_use_car_effect】:


搜索结果:


总结


搜索的过程:


1


“开通车载VIP” -> res\values\strings.xml:dialog_content_tips_use_car_effect -> public.xml:0x7f08001d


定位到id之后,就可以直接在代码里面搜索了。


找到了逻辑代码,这是我们想要的结果,然后我们就在这文件中操作。


重点


1、 破解车载音效付费功能


问题:我们看不懂这些代码怎么办???


首先我们要知道我们是要干什么,我们是要破解,不是要开发,不需要读懂全部代码,只需要把付费功能取消或者绕过就行。


我们要先找【是或者否】判定用户身份是否为 VIP 的代码:


【if-nez v0, :cond_0】


我们的目的是:让【if-nez v0, :cond_0】跳转成功。


我们讲解一下这个命令是什么意思:


1


2


if 判断语句 nez :not equal zero (v0不为零就跳转到cond_0)


那我们直接给 v0 赋值,让 v0=3:


1


const v0, 0x3


这个就好了,因为我们搜索结果是两处,还有一次也是相同操作。


或者让它始终跳转到:cond_0


1


2


3


if-nez v0, :cond_0


改为:


goto :cond_0


这样两个地方我们就修改好了,我们在文件里修改和在【Android Killer】里修改是一样的。


然后编译:【要使用 apktool_2.4.1 编译】


然后开始安装:


安装成功后,点击音效测试,发现不再提示 VIP 付费弹窗:


2、破解车载皮肤特权付费功能


同上,搜索“专属汽车皮肤特权” strings.xml中看一下name:dialog_content_tips_use_pay_skin   id:0x7f08001e


快速确定代码文件:


向上找,同上方法:


然后保存,编译,安装:


皮肤更换成功:


完成。


逆向过程的总结


1.找线索。包括字符串、事件、判断..


2.定位到关键的地方;


3.对于修改来说,非常常见的修改方式是赋值、改跳,需要进行函数调用、还有一些自定义添加逻辑代码;


逻辑推理


从开发者的角度,会有一个专门用来识别用户是不是VIP的通用的地方A


1.换皮肤的时候,调用A来判断是不是会员;


2.设置音效的时候,调用A来判断是不是会员;


3.当时听付费歌曲的时候,调用A来判断是不是会员;


所以,只需要修改掉A就ok。

发表于:2024-11-29 16:45
6个回复
您还没有登录,登录后才可回复。 登录 注册