花了一天的時間看某幫,apk使用騰訊加固,脫殼後部分大的函式jadx和jeb都反編譯失敗,全程靠frida hook觀察。主要的2個訊息:
pluto/app/antispam app 啟動時候觸發,動態協商金鑰。 這裡沒有簽名可重放
1 客戶端生成10個位元組的隨機字串,假設叫client_random_key。client_random_key按固定格式拼接好,本地硬編碼的金鑰des加密, 密文bytetobit再bittoint後,再拼上各種本地的環境資訊post到服務端
2 服務端返回的資料inttobit再bittobyte後用client_random_key[0:5] + '#G4'作為金鑰des解密,得到2個串server_random_key_1, server_random_key_2
3 拿server_random_key_2直接計算md5,假設叫sign_slat,用於業務請求的簽名
4 固定串md5 + 版本號md5 + server_random_key_2格式化計算md5後 前後15位交換, 假設叫A。 (A + md5(A))的結果 前後60個字元交換,最後得到rc4的金鑰,假設叫base_rc4_key
search/submit/picsearchnew 功能函式,帶簽名,帶時間戳
1 請求的時候 md5(sign_slat格式化 + multipart的key,value字典序排序後拼接成字串)作為請求包的簽名
2 服務端返回的每個內容item都獨立一個金鑰。 base_rc4_key先解密金鑰陣列,拿著sub_rc4_key去解密item,再base64_decode後再次用base_rc4_key解密,再gzip解壓拿到資料。(非常的繞,直接吐血)
有些地方感覺比較不錯
1 動態協商金鑰
2 http multipart anti