安卓手機上已經裝了證書了,然后如果charles沒配置ssl proxying setting,則網路正常,但抓不了https請求,把https請求相關的域名配置到 ssl proxying setting, 則直接網路都用不了(提示證書錯誤)。請問知道是為什么嗎?
有人說是因為charles抓不到安卓7.0https請求,但是我用安卓6.0的手機試了也不行。
如果真是charles抓不了安卓7.0https請求,有什么最便捷的方式來修改嗎?
uj5u.com熱心網友回復:
抓包失敗可能有兩個因素:1. Android API 可以在網路鏈接時,要求 Proxy.NO_PROXY ,這個時候,使用 Charles (Mac OS), Fiddler (Windows) 都是不行的,是 Android 系統庫直接不使用代理,所以抓不到;
2. 第二種是 網路鏈接限制,比如抓 HTTPS 的包,原始 客戶端 和 服務器 使用了 雙向 HTTPS 認證,那么 Charles 的 證書就無法使用,客戶端 Android 系統會檢測服務器證書,服務器也會檢測客戶端請求的證書,那么 Charles 作為中間證書就導致無法正確請求。
對于 1 的解決方式 是 使用 Droni 這個 Android APP,相當于 提供一個 本地VPN 方式,這樣客戶端的 NO_PROXY 就無效了。當然如果客戶端 增加了 NO_VPN 的設定,也不行。
對于 2 是無解的,這種只能從其他角度來處理。有以下方式:
1. 如果是單向認證,就是 客戶端驗證服務器,而服務器不驗證客戶端,那么就可以在 Root 手機中,使用 xposed + just trustme 再配置抓包。
2. 如果是 雙向內容,可以通過 xposed 等 Hook 方式,來獲取網路的請求地址、日志列印等方式,來輔助獲取,比如 Uri u = new Uri(" https://hman.info/ "); 這個陳述句,你可以通過 Xposed 來 Hook Uri / Url 的 構造。
這個 2 非常復雜,同時也是為什么 現在大部分的服務平臺都要求 https 的原因,使用 HTTPS 雙向認證,可以有效地保護網路內容。
3. 對于上述方式,都是從網路來入手,還有一種可以通過 反編譯的方式,直接進行靜態分析。如果是 加固的,那么 可以使用 真機 + Xposed + Fdex2 來試試脫殼匯出,再用 dex2jar 和 jd-gui 來輔助反編譯,看原始碼,靜態分析網路請求。
總體來說,你太難了~,安卓程式員太難了~
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/9256.html
標籤:Android
上一篇:unity匯出xcode工程報錯 Undefined symbols for architecture arm64
下一篇:微信小程式
