幣程筆記 教學

用 Charles 抓幣安 APP 包失敗:證書 Pinning 解釋

技術研究人員或安全審計員嘗試用 Charles 或 mitmproxy 抓幣安 APP 的 HTTPS 流量時,會發現 APP 直接拒絕連線或報 SSL 錯誤。這是因為幣安實現了證書 Pinning。本筆記從技術角度解釋這個機制。下載 APP 走 幣安官網幣安官方APP;iPhone 裝機看 iOS安裝教程

證書 Pinning 是什麼

普通 HTTPS 驗證流程:

  1. APP 發起連線
  2. 伺服器返回證書
  3. APP 檢查證書是否由系統受信任的 CA 簽發
  4. 任何受信任 CA 籤的都接受

證書 Pinning 是更嚴格的檢查:

  1. APP 內建一份「期望的證書指紋」
  2. 伺服器返回證書後,APP 不僅看 CA,還看是否匹配內建指紋
  3. 不匹配 → 拒絕連線

為什麼金融 APP 要做 Pinning

防中間人攻擊:

  • 攻擊者可以誘騙使用者安裝其根證書
  • 之後用自己的證書劫持流量
  • 普通 HTTPS 驗證會透過(因為根證書已加白)
  • 但 Pinning 會拒絕(因為指紋不匹配)

幣安、銀行、PayPal 等金融 APP 普遍做 Pinning。

Charles / mitmproxy 的工作方式

Charles 抓 HTTPS 包的步驟:

  1. 裝置裝 Charles 根證書並信任
  2. 設定代理指向 Charles
  3. APP 發請求 → Charles 用自己的證書偽裝目標
  4. APP 驗證:CA 受信任(因為裝了 Charles 證書)
  5. 普通 APP 接受 → 抓包成功

但幣安 APP 在第 4 步多查一項:

5'. 檢查證書指紋 → 不匹配 → 拒絕

所以抓包失敗。

抓包失敗的具體表現

現象 原因
APP 啟動後轉圈 TLS 握手被拒
行情圖空白 WebSocket 連線拒絕
API 返回連線錯誤 證書校驗失敗
Charles 看到 SSL Handshake Error 同上
APP 直接閃退(罕見) 處理異常未捕獲

繞過 Pinning 的幾種方式

研究人員可能用:

  • Frida 指令碼:動態替換 APP 內的證書校驗邏輯
  • LSPosed / Magisk 模組:注入修改的程式碼
  • 反編譯 APK 後修改 dex 重打包
  • 使用 PIN-SSL 修改器

這些都需要 root 裝置且違反 APP 使用者協議。幣安 APP 安全機制還可能檢測這些工具。

普通使用者為什麼會遇到這個問題

絕大多數使用者根本不抓包,但有幾種意外場景:

場景一 · 公司網路做 SSL 攔截 公司在路由器層面解密 HTTPS 流量做監控:

  • 裝公司根證書到所有員工裝置
  • 流量被解密
  • 幣安 APP 拒絕連線(指紋不對)

判斷:公司其它需要 HTTPS 的 APP 是否也連不上銀行類。

場景二 · 殺軟的 HTTPS 檢查 卡巴斯基、Avast 等殺軟會掃描 HTTPS 流量:

  • 類似的中間人方式
  • 幣安 APP 可能拒絕

處理:臨時關閉殺軟的 HTTPS 檢查。

場景三 · 裝了「網路加速器」 某些「加速器」實際上做的是流量代理:

  • 使用者不知情地裝了根證書
  • 抓包並加速
  • 幣安拒絕

處理:解除安裝來路不明的加速器。

Pinning 的更新機制

證書 Pinning 的指紋會變(幣安換證書時):

  • 通常 APP 內建多個指紋
  • 一個失效不影響連線
  • 升級 APP 時同步更新

如果你長期不升級 APP,可能某天 Pinning 指紋與伺服器證書都變了,連不上。

客戶端的不同實現

幣安各端的 Pinning 力度:

客戶端 Pinning 嚴格度
安卓 APP
iOS APP
桌面客戶端
瀏覽器 不實現(依賴 OS 信任)

瀏覽器沒有 Pinning(這就是為什麼瀏覽器能被中間人,APP 不能)。

抓包替代方案

技術研究的替代:

  • 用幣安官方 API 文件(公開)
  • 用 SDK 提供的介面
  • Web 版抓包(瀏覽器開發工具)
  • 網路層抓包(Wireshark,但只能看密文)

這些方式都不需要破壞 APP 安全機制。

安全建議

  • 不要安裝來路不明的根證書
  • 公司 / 公共 WiFi 上謹慎用幣安 APP
  • 殺軟的 HTTPS 檢查與幣安並存時把幣安加白
  • 不要 root 自己常用的裝置

FAQ

Q:Charles 能抓幣安網頁版的包嗎? A:能(瀏覽器無 Pinning),但只能看到 web 流量,不是 APP。

Q:mitmproxy 能不能讓幣安 APP 不做 Pinning? A:單獨 mitmproxy 不能。要配合 Frida 等工具。

Q:iOS 上安裝企業根證書後幣安會被攔嗎? A:可能。看具體證書是否被內嵌到信任鏈。

Q:root 安卓上能抓包嗎? A:用 Frida 等工具理論可行,但違反 APP 協議。

延伸閱讀