币程笔记 教程

用 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 协议。

延伸阅读