一些Android開發死局

語言: CN / TW / HK

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: 需要八仙過海各自踩坑

有公司專人來解決這個問題最好了: