日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

BiliBili Android客户端仿写

發(fā)布時(shí)間:2024/3/26 Android 53 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BiliBili Android客户端仿写 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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ù)主要通過兩種方式:

  • 官方發(fā)布并維護(hù)一些開放API,供個(gè)人或其他團(tuán)隊(duì)開發(fā)人員進(jìn)行個(gè)性化的開發(fā)。目前該種方式也逐漸沒落了,僅存豆瓣、QQ等為數(shù)不多的幾個(gè)開放平臺(tái)仍在,目前BiliBili及許多大廠基本都已經(jīng)關(guān)閉了個(gè)人開發(fā)者對(duì)第三方接口的申請(qǐng)。可能是維護(hù)開放API的成本要遠(yuǎn)大于所帶來的引流的收獲,可能國內(nèi)開發(fā)人員也沒有那么多時(shí)間去玩別家的開放API,為了生活就已經(jīng)筋疲力盡了...
  • 通過了解官方API的驗(yàn)簽方式,而使用規(guī)范的官方API進(jìn)行調(diào)用。其實(shí),這種方式跟撿到一張銀行卡,然后猜密碼差不多(不過還好沒有錯(cuò)誤限制,可以一直試下去),不過因?yàn)楹灻绞讲幌胥y行密碼那么簡(jiǎn)單就是6位整型數(shù),而是無限種的加密方式。不過還好,常規(guī)方式就那么幾種,就好像銀行密碼要么123456,要么6個(gè)0一樣,猜個(gè)幾次就能夠猜的出來。
  • para + 排序 + appsecret + md5 拼sign

    原來key1=value1&key2=value2&key3=value3,拼裝后

  • value1value2value3
  • key1value1key2value2key3value3
  • 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文件

    工作流程

  • 使用apktool反編譯apk文件,獲取資源文件
  • 使用dex2jar反編譯apk文件,獲取Java代碼(可能被混淆)
  • 使用Charles截取想要重現(xiàn)的請(qǐng)求(也可以通過Log獲取發(fā)送請(qǐng)求URL,一般會(huì)將在Log中打出網(wǎng)絡(luò)請(qǐng)求)
  • 根據(jù)分析代碼,判斷所需在哪個(gè)so中
  • 猜測(cè)(猜想 + 測(cè)試),驗(yàn)證簽名方式,并通過實(shí)際請(qǐng)求驗(yàn)證
  • 詳細(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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。