前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【逆向】解锁一款Android应用VIP功能详细思路

【逆向】解锁一款Android应用VIP功能详细思路

作者头像
Android扫地僧
发布2020-03-19 16:07:33
1.9K0
发布2020-03-19 16:07:33
举报
文章被收录于专栏:Android进阶Android进阶Android进阶

LivedForward

来源:https://www.52pojie.cn/thread-1022003-1-1.html

写在前面:发完这篇文章,我就去捡废品了,记得点在看

软件名称:音乐剪辑

这款软件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,没有广告和功能次数限制了,即使不登陆也无广告和功能次数限制.

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android扫地僧 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档