解锁一款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,没有广告和功能次数限制了,即使不登陆也无广告和功能次数限制.
总的来说分析这个软件的订阅授权还是挺简单的. LivedForward 发表于 2019-9-12 11:34
因为这样,程序启动就会将携带VIP的用户信息写入到程序,启动就是VIP了
我知道这样做的原因,就想知道怎么去实现这种破解?怎么切入入口或者说怎么知道哪里是切入点 Likey 发表于 2019-9-12 09:59
楼主能否指点一下“将此段smali代码复制到程序入口”这个是什么操作?何为程序入口?感谢
因为这样,程序启动就会将携带VIP的用户信息写入到程序,启动就是VIP了 看看一下,好像还不错 学习一下,看看 大神操作
看不懂 不错哦,学习了!谢谢!! 裸奔的软件 谢谢分享 不错哦,谢谢分享 前来学习,感谢分享
谢谢分享