一些Android開發死局
- 問下安卓如何防止 root 下抓包, app 介面請求並沒有做加密措施
- 怎麼防止使用者自己呼叫網站 API 傳送 POST 請求篡改資料
- 如何對 Android APP 抓取 HTTPS 包?
- APP抓包研究
TL;DR: 功夫不負有心人。沒有徹底的辦法。最好的辦法永遠是在服務端控制資料。
如果能用Firebase的話,可以第三方接入AppCheck來防止中間人。
一些精彩發言:
kings0527 永遠無法防止 只能提高門檻 https 僅僅防止中間人 證書信任 僅僅防止不會過 ssl pinning 的人 證書校驗 僅僅防止沒有逆向能力的人 引數加密 僅僅防止逆向能力很低的人 自寫協議 僅僅防止逆向能力不高的人 所以 看情況 看成本 加策略 不要為了防止抓包而防止抓包 應該是 你為什麼要防止抓包??? 防爬蟲???那可以加請求頻率限制 可以加風險等級評估 比如是不是正常使用者????是不是正常手機???是不是正常操作流程??? 防攻擊??? 那可以加 web 防火牆 可以提高自己 router 容錯率 防刷推廣安裝量??? 加溯源 加留存 加異常打點 建資料模型觀察
icyalala ssl pinning (也就是客戶端內建證書) 來防止初級的抓包 引數簽名+客戶端防逆向 服務端風控,這是最主要的 根據我待過的幾個公司的經驗,就算大廠也基本就是這些了 整體來說就是增加成本降低風險,完全避免是不可能
客戶端的掙扎
有證書就可以抓包。
Root後在任何API版本都可以裝任何證書。
Android N(API 24)及之後,應用才可以強制只信任系統證書。之前可以不Root裝使用者證書。
據說iPhone裝證書很容易。
搬起石頭砸自己的腳的辦法:
-
禁止代理
connection = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY)
HttpURLConnection
-
檢測Root
- 容易繞過
- 可能檢測錯誤
- 犧牲無辜的Root使用者的體驗
-
自定義證書、SSL Pinning
- Android N及之後才可以強制證書
- 複雜
保活
終極方案:
- 成為系統應用
- 成為國民應用,廠商會主動增加白名單
- 使用FCM(不適用於中國大陸)
現在已經沒有更多奇技淫巧了。雖然一直有人聲稱有黑科技,但從未親眼見過。
Foreground Service + Wake Lock是普通應用唯二能做的。此外可以多接入一些推送。
最後,也是最重要的一步,引導使用者設定應用白名單,這樣基本可以確保正常使用。
個人開發者 海外收款
TL;DR: 需要八仙過海各自踩坑
有公司專人來解決這個問題最好了: