LivedForward 发表于 2019-9-10 15:27

解锁一款Android应用VIP功能详细思路

本帖最后由 LivedForward 于 2019-9-10 16:05 编辑

软件名称:音乐剪辑
这款软件UI做的特别漂亮,功能也很强大,可以作为一个音乐编辑的工具.

练手分析该软件内购授权思路,并解锁VIP全部功能.


软件授权机制做的很简单,希望大佬哥哥们批评指正.


.


软件没有订阅VIP之前底部有广告,启动界面也会有广告,而且每天功能使用会有次数限制

直接入正题:
软件没有加壳,只是对Java层的方法名和变量名进行了混淆,,可以说是非常简单了.


先将dex转化为jar,然后拖入jd-jui查看源码辅助分析.


这款软件直接修改支付结果是不行的,因为软件会后台异步获取订阅结果和订阅日期,这里就
选择对用户管理类作为入口点.因为一般订阅软件都有一个专门管理用户信息的类,里面就包含VIP
订等相关信息.


以微信支付为例:
在支付回调时会有Toast结果信息,我们根据这个信息定位到com.lixiangdong.songcutter.pro.activity.DingyueActivity




可以看到支付成功的函数调用了a(),跟进 ,继续跟进ViewUtils里的重载a方法:



可以看到程序确实后台异步会从服务器获取订阅信息,大体思路就是匿名内部类实现了一个http通讯回调接口,
回调执行各种通讯结果,我们看到重写的a(LoginBean param1LoginBean)方法里,很明显 SPUtils这个类就是负责
管理用户信息的类.
再往后面看:


看到一个b()方法,应该可能就是初始化用户的相关信息,timeExpire,isVIP等等,
看到这里就好办了,我们可以手动将timeExpire和isVIP等字段赋值,但是timeExpire格式我们还需要
进一步查找.

在之前的一个类DingyueActivity 里看到这个函数:


在用户下订单之前会先对用户信息进行一系列判断,其中就有一个过期时间是否为2099-01-01


看到这里,我的思路就是将timeExpire和isVIP等字段进行修改,然后将用户初始化信息的代码放到程序入口的位置,这样程序启动
就已经是VIP用户了.


现在我们来修改程序对应的smali代码



这里是对应的初始化用户信息的smali代码,可以看到const/4 v3,0x0
这条指令意思是把0x0赋值给占4个字节的v3寄存器,猜想肯定是int型,0x0就是0.
在之前我们就已经知道程序初始化用户信息是将用户isVIP等boolean字段赋值为false
所以在这里我们肯定0x0就是false,所以我们将0x0改为0x1即true,然后将timeExpire赋值
为2099-01-01,将此段smali代码复制到程序入口即可啦!


效果图:登陆就是VIP,没有广告和功能次数限制了,即使不登陆也无广告和功能次数限制.


总的来说分析这个软件的订阅授权还是挺简单的.

Likey 发表于 2019-9-12 13:24

LivedForward 发表于 2019-9-12 11:34
因为这样,程序启动就会将携带VIP的用户信息写入到程序,启动就是VIP了

我知道这样做的原因,就想知道怎么去实现这种破解?怎么切入入口或者说怎么知道哪里是切入点

LivedForward 发表于 2019-9-12 11:34

Likey 发表于 2019-9-12 09:59
楼主能否指点一下“将此段smali代码复制到程序入口”这个是什么操作?何为程序入口?感谢

因为这样,程序启动就会将携带VIP的用户信息写入到程序,启动就是VIP了

yuo 发表于 2019-9-10 15:35

看看一下,好像还不错

lep52 发表于 2019-9-10 15:39

学习一下,看看

jackroc 发表于 2019-9-10 15:40

大神操作
看不懂

麦迪就是帅 发表于 2019-9-10 15:52

不错哦,学习了!谢谢!!

只想划水 发表于 2019-9-10 16:53

裸奔的软件

supnet 发表于 2019-9-10 17:04

谢谢分享

leo_kan 发表于 2019-9-10 17:13

不错哦,谢谢分享

wang1415926 发表于 2019-9-10 17:15

前来学习,感谢分享

heb123 发表于 2019-9-10 19:08


谢谢分享
页: [1] 2 3 4 5 6 7
查看完整版本: 解锁一款Android应用VIP功能详细思路