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,沒有廣告和功能次數限制了,即使不登陸也無廣告和功能次數限制.
總的來說分析這個軟體的訂閱授權還是挺簡單的.
完