仿最新BiliBili客戶端(已開(kāi)源)
時(shí)間:2023-04-23 16:36:01 | 來(lái)源:網(wǎng)站運(yùn)營(yíng)
時(shí)間:2023-04-23 16:36:01 來(lái)源:網(wǎng)站運(yùn)營(yíng)
仿最新BiliBili客戶端(已開(kāi)源):
前言該項(xiàng)目仿照B站的Android客戶端進(jìn)行開(kāi)發(fā),初衷是想學(xué)習(xí)流行的Android技術(shù),但是沒(méi)有數(shù)據(jù)資源。因?yàn)橄矚g逛B站,而且B站的Android客戶端又是Google推薦的MD設(shè)計(jì)規(guī)范,于是花了些時(shí)間研究B站的網(wǎng)絡(luò)請(qǐng)求,最后成功搞定,與@Android_ZzT同學(xué)達(dá)成一致,合作開(kāi)發(fā)這個(gè)模仿B站的練習(xí)項(xiàng)目。該項(xiàng)目在工作之余開(kāi)發(fā),所以更新時(shí)間不定。
前期準(zhǔn)備一、B站網(wǎng)絡(luò)請(qǐng)求抓包首先是對(duì)B站的網(wǎng)絡(luò)請(qǐng)求進(jìn)行抓包,環(huán)境是mac,開(kāi)始嘗試使用Charles,由于B站的網(wǎng)絡(luò)請(qǐng)求大多為Https,Charles的證書(shū)設(shè)置總是不成功(沒(méi)找到正確的打開(kāi)方式),無(wú)法抓到Https的包,就放棄了。
這里推薦mitmproxy,是一款在github上托管的開(kāi)源抓包工具。
官網(wǎng)地址:
http://mitmproxy.org/github地址:
https://github.com/mitmproxy/mitmproxy教程:使用mitmproxy進(jìn)行移動(dòng)端的HTTP抓包
Tips:Https抓包需要安裝證書(shū),大部分手機(jī)按照官方文檔或是教程文章都可以成功安裝,但是小米手機(jī)無(wú)法正常下載,官方文檔中提到證書(shū)會(huì)放在~/.mitmproxy目錄下,所以可以手動(dòng)傳到手機(jī)中進(jìn)行安裝。
在設(shè)置好證書(shū)和代理之后,我們就可以開(kāi)始進(jìn)行https抓包了,先打開(kāi)app首頁(yè)
觀察mitmproxy并找到對(duì)應(yīng)網(wǎng)絡(luò)請(qǐng)求
這樣就可以分析分析接口參數(shù)調(diào)用B站API了。但是我們發(fā)現(xiàn)大部分的接口都需要一個(gè)sign參數(shù)作為動(dòng)態(tài)的檢驗(yàn)口令,而sign又是如何生成的呢,接下來(lái)我們需要反編譯,尋找與分析源代碼中的sign簽名邏輯。
二、反編譯反編譯與簽名邏輯參考了@HaKu的
BiliBili Android第三方——第0步
大致操作這篇講的很詳盡了,就不贅述了,這里提一些遇到的問(wèn)題吧。
上述文章反編譯的版本比較老(文章作者后續(xù)也沒(méi)有更新),老版本中SecretKey直接存放在了so庫(kù)中,在反編譯新版本的時(shí)候(我當(dāng)時(shí)用的v5.4),B站對(duì)于SecretKey使用了AES加密,在反編譯源碼中可以找到算法模式,秘鑰以及偏移量等參數(shù)(具體為bl包下的chd、chb類,和nativelibrary包下的LibBili類),但是經(jīng)過(guò)試驗(yàn)沒(méi)有成功……這方面了解非常少,如果有大佬能試驗(yàn)成功,請(qǐng)不吝賜教!最后還是找了老版本中的AppKey和AppSecretKey,都存儲(chǔ)在libbili.so中,具體版本號(hào)為v3.14。
成果效果圖如下:
Version 1.1.0- 架構(gòu)搭建
- 分析 Api
- 完成主頁(yè)界面
Version 1.2.0- 完成直播播放頁(yè)面
- 集成IjkPlayer并簡(jiǎn)易封裝
- 集成DanmakuFlameMaster和來(lái)自czp3009的bilibili-api完成彈幕功能
一些開(kāi)源庫(kù)的更新- 前期準(zhǔn)備
- 反編譯資源文件
- mitmproxy抓取 Api(支持https)
- 獲得 B 站 signKey 簽名邏輯
- 框架搭建
用到的開(kāi)源庫(kù)- RxJava2 最coooooool的響應(yīng)式編程框架
- RxLifecycle 解決Rxjava內(nèi)存泄漏
- Retrofit 最流行的Android網(wǎng)絡(luò)請(qǐng)求的框架
- Okhttp3 和Retrofit搭配,項(xiàng)目中簽名邏輯使用該庫(kù)的攔截器模塊實(shí)現(xiàn)
- Dagger2 門(mén)檻略高但功能強(qiáng)大的依賴注入框架
- Butterknife 綁定View的依賴注入框架
- Eventbus 組件間通信
- Fresco 圖片的加載和處理,功能強(qiáng)大,但相比其他圖片庫(kù)有點(diǎn)大
- Fragmentation 簡(jiǎn)化Fragment操作并填坑的庫(kù)
- Multitype RecyclerView多類型庫(kù)
- IjkPlayer b站出品基于FFmpeg的開(kāi)源視頻播放框架
- DanmakuFlameMaster 烈焰彈幕使-b站開(kāi)源彈幕解析繪制引擎項(xiàng)目
原創(chuàng)作者:Misery_Dx
原文鏈接:
https://github.com/TeamNB/FakeBiliBili歡迎關(guān)注我的微信公眾號(hào)「碼農(nóng)突圍」,分享Python、Java、大數(shù)據(jù)、機(jī)器學(xué)習(xí)、人工智能等技術(shù),關(guān)注碼農(nóng)技術(shù)提升?職場(chǎng)突圍?思維躍遷,20萬(wàn)+碼農(nóng)成長(zhǎng)充電第一站,陪有夢(mèng)想的你一起成長(zhǎng)。