BiliBili Android客户端仿写
BiliBili Android第三方——第0步
該項(xiàng)目的原因稍后再寫,想開發(fā)BiliBili的Android第三方客戶端總會(huì)有幾個(gè)必須要跨過的坎,我們第0步主要就是為了這些而做的準(zhǔn)備。
后臺(tái)服務(wù)
已經(jīng)很少有App能過脫離后臺(tái)服務(wù)而獨(dú)立運(yùn)行,即便一些單機(jī)游戲也需要通過網(wǎng)絡(luò)加載新的游戲關(guān)卡等,而我們做第三方App也同樣需要后臺(tái)服務(wù)的支持(除非只是想模擬UI,而非真實(shí)的功能)。
目前第三方客戶端獲取后臺(tái)服務(wù)主要通過兩種方式:
para + 排序 + appsecret + md5 拼sign
原來key1=value1&key2=value2&key3=value3,拼裝后
再加上關(guān)鍵key,私鑰:appsecret=ea85624dfcf12d7cc7b2b3a94fac1f2c
然后一起md5,得到sign,服務(wù)端驗(yàn)證sign是否一致,不一致的請(qǐng)求攔截掉,防止第三方隨意調(diào)用。
工具
Charles
使用charles進(jìn)行截包,分析具體按鈕的請(qǐng)求及返回json數(shù)據(jù)
dex2jar
用于反編譯apk提取jar包,查看java源代碼(可能被混淆)
JD-GUI luyten
用于查看反編譯后的java代碼
apktool
主要用于獲取資源文件,如查看布局、獲得資源圖片等
IDA
主要用于反匯編.so文件
工作流程
詳細(xì)內(nèi)容
一、反編譯apk
-
在BiliBili官網(wǎng)下載官方apk
下載Android版BiliBili -
使用 apktool 和 dex2jar 反編譯apk文件。
apktool apktool d /Users/HaKu/Downloads/BiliPlayer3.apk -f./d2j-dex2jar.sh /Users/HaKu/Downloads/app-debug.apk
進(jìn)行反編譯 -
使用 JD-GUI 和 IDA 分析代碼
通過GUI查看代碼
通過查找GUI可以看出關(guān)于appsecret部分B站APP并沒有直接寫入在java代碼中,而是在bili的so庫中,也算是對(duì)代碼的一種保護(hù),因此需要繼續(xù)下去使用IDA分析so庫的內(nèi)容。
通過IDA查看匯編代碼
此處紅框包圍的代碼即APP調(diào)用so方法獲取appsecret的地方,這里把具體內(nèi)容隱藏,有興趣的朋友可以直接自己操作一遍獲取內(nèi)容。二、通過測(cè)試確定簽名方式
-
建立Demo項(xiàng)目,通過截包確定需要簽名的請(qǐng)求
挑選一個(gè)需要簽名的請(qǐng)求,本例使用直播頁的請(qǐng)求:具體URL為
http://live.bilibili.com/AppIndex/home?_device=android&_hwid=51e96f5f2f54d5f9&_ulv=10000&access_key=563d6046f06289cbdcb472601ce5a761&appkey=c1b107428d337928&build=410000&platform=android&scale=xxhdpi&sign=fbdcfe141853f7e2c84c4d401f6a8758隨便修改下參數(shù)發(fā)現(xiàn)返回為“api sign invalid”,證明該請(qǐng)求有sign驗(yàn)證。
-
通過更改參數(shù) + 猜測(cè)簽名方式,請(qǐng)求驗(yàn)證,看是否被拒絕
經(jīng)驗(yàn)證發(fā)現(xiàn),簽名為上述第三種方式,將所有參數(shù)(包括變量名和值及=&符號(hào))排序后加上appsecret(只有值)之后做md5,得到返回結(jié)果即為所求sign值
完成
至此,已經(jīng)完成了真正后臺(tái)服務(wù)的獲取,并可以通過官方的方式進(jìn)行調(diào)用,也因?yàn)锳PP即便發(fā)新版也需要支持舊版的運(yùn)行,因此短期內(nèi)不用擔(dān)心官方更換secret或者更換簽名的生成方式。最后,這只是完成客戶端開發(fā)的第一步,也算是其中的第一個(gè)難點(diǎn)。UI和業(yè)務(wù)邏輯等都不能屬于技術(shù)難點(diǎn),本系列將著力于描述開發(fā)第三方BiliBili客戶端遇到的坑,當(dāng)然個(gè)人開發(fā)不可能包含整個(gè)APP的功能,因此只會(huì)逐步實(shí)現(xiàn)相關(guān)功能,目前僅完成直播首頁(沒有直播間)和新番查詢兩個(gè)功能,將繼續(xù)利用空閑時(shí)間進(jìn)行開發(fā),并采用些新技術(shù),用于日常工作使用前的demo開發(fā)。
總結(jié)
以上是生活随笔為你收集整理的BiliBili Android客户端仿写的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开心截图,拖拽大作战
- 下一篇: android json教程,Andro