最近某手更新了8.0版本,這讓我們的爬蟲小夥伴可難受了。
某手更新8.0之後,最直接的問題就是抓不到包。
我們需要逆向分析一下8.0的網絡協議,看看到底使用了什麼技術,才讓我們抓不到包呢。
分析藉助的技術&工具
1、jadx
2、frida
網絡請求框架分析請求協議
通過查看app源碼,可以清楚看到okhttp3的包名,使用okhttp3就很香。
okhttp3分析
1、打印網絡請求
通過他的sign或者sig3算法位置打印即可
frida 是真的香
|
var s = Java.use("j.a.*.*.s");
|
|
s.a.overload('okhttp3.Request', 'java.util.Map', 'java.util.Map').implementation = function (a1, a2, a3) {
|
|
console.log(a1)
|
|
return this.a(a1, a2, a3)
|
|
}
|
可以清楚的看到請求的url還有get的參數,不過發現沒有打印出來協議相關的信息。
2、打印網絡響應
打印一下第一步的調用棧
|
var exc = Java.use("android.util.Log").getStackTraceString(Java.use("java.lang.Exception").$new());
|
|
console.log(exc)
|
這裏的就可以去打印響應數據了。
這就好了,app使用的協議是quic,這也就是爲什麼通過Charles抓不到包的原因了。
okhttp3本身是支持quic的,但是app這裏沒有用到。
從這篇文章就能發現蛛絲馬跡
https://cloud.tencent.com/developer/news/666059
|
客戶端、網絡庫統一設計
|
|
對 QUIC 協議的支持需要客戶端、服務端統一設計,kQUIC 也做了相應的工作。
|
|
|
|
客戶端網絡庫項目代號是庫 Aegon,目標是代替原 OKHTTP/AFNetworking 和進行 API 請求和短視頻下載,提供了 QUIC 協議的支持、完善的上報信息,並基於對數據指標的分析和對協議的深入理解,對網絡庫中持續進行了多項協議相關的優化,包括預建連、SSL Session 複用優化、客戶端 BBR、POST 請求 0RTT 優化等等。
|
|
|
|
一般 APP 使用的開源的網絡庫包括 OKHTTP 和 AFNetwork,都不支持跨平臺,OKHTTP 是 Android 端,AFNetwork 是 iOS 端。**網絡庫在設計之初就把跨平臺作爲一個重要的目標,爲**的雙端提供統一的網絡優化解決方案。
|
所以Aegon是客戶端代號,全部的包名是aegon.chrome
,剩下的就好辦了。
解決問題
通過上面類似步驟的hook和打印調用棧,發現app本身有一個類似開關的地方。
"enable_quic": true
把這個開關利用hook改成"enable_quic": false
,那就可以抓包了。
看看hook修改後的請求協議吧。
看看Charles是否能抓到包。
最後小結
frida Hook在app啓動的時候,不要attach,建議使用xposed進行Hook,主要app會在開機的自啓動,以上只用學習交流,請勿用於非法研究。