指南

抓取 Android 应用流量, 无需 Wi-Fi 代理

Android 版 Busymate DevTools 直接在手机上运行基于 VPN 的抓包引擎。没有桌面代理,不需要共享 Wi-Fi,不用设置代理——并且如实说明在未 root 的手机上究竟哪些应用能被解密。

在 Android 上,读取应用 HTTPS 的传统路径是:笔记本上跑一个代理,再在手机 Wi-Fi 设置里手动填一条代理。离开那个网络它就失效了。Busymate DevTools 把代理从画面里拿掉:应用把自己注册为手机的 VPN,看到手机发出的每一个连接,用它在设备上生成的证书解密你选定的主机,并把结果推送到 iOS 应用和桌面代理共用的同一个仪表盘。

有一个平台事实本指南不会隐瞒。从 Android 7.0 起,除非应用主动选择信任,否则它会忽略用户安装的证书。这意味着手机可以抓到所有应用的流量,但只能解密那些信任用户证书库的应用——实际上就是你自己的调试版本,以及系统浏览器和类似客户端。第五步展示只需改一个文件就能让你的应用加入其中,其余情况由证书固定指南说明。

开始之前

你需要 准备什么

一部手机、一个账号,以及——如果你想看到自己应用的解密正文——一个可以重新构建的调试版本。

  • 一部运行 Android 7.0 或更高版本的手机。抓包不需要 root,也不需要电脑。

  • 一个 Busymate 账号。用 Google 登录,或用邮箱和密码登录;登录会把手机配对到你的仪表盘。

  • 你想读取的 API 的主机名,用于 SSL 代理列表。只有列出的主机会被解密。

  • 对于你自己的应用:能够用一个网络安全配置文件重新构建其调试版本,使它信任手机生成的证书。

分步操作

按顺序 执行

六个步骤。应用的引导式设置会逐屏处理平台弹窗;唯一需要在应用之外完成的工作是第五步的调试版本改动。

  1. 01

    安装应用并接受抓包同意书

    从 Google Play 安装 Busymate DevTools;如果你所在地区尚未看到该条目,也可以从 Android 落地页侧载已签名的正式版 APK。首次启动时,应用会请求你明确同意抓取网络流量。抓包是可选的,在你打开之前一直保持关闭——在你同意之前,后台不会运行任何东西。

    Android 版 Busymate DevTools 的网络抓包同意界面
  2. 02

    登录——手机自动配对

    用 Google 登录,或用邮箱和密码登录。和 iOS 一样,登录就是配对:应用用会话换取一份长期有效的设备凭据,存入加密的应用存储,随后手机会在仪表盘的 Devices 标签页显示为 Online。主屏幕显示设备名称、账号标签、抓包开关卡片,以及带有设置齿轮的就绪卡片。

    Android 版 Busymate DevTools 主屏幕,含抓包开关和就绪卡片
  3. 03

    添加你想解密的域名

    通过齿轮打开设置,进入 SSL Proxying。列出你想读取 HTTPS 正文的主机;其余一切保持端到端加密,只显示主机名和请求计数。开头的星号加点号覆盖一个域名及其所有子域名。同一区域还包含解密控件,以及一个 Ignore Hosts 列表,用于屏蔽你永远不想在信息流里看到的后台噪音。

    你不必在手机上做这件事。仪表盘可以编辑同一份按设备划分的列表,那边的改动会实时推送到手机,这样同事可以在你继续测试时替你添加主机。

  4. 04

    运行引导式设置

    点按就绪卡片。引导式设置逐屏引导你完成三个平台弹窗:允许抓包通知,把应用专为你生成的证书安装进手机的用户证书库,以及批准 Android 自身的 VPN 连接请求。每完成一步就会标记为完成,三步全部通过后卡片变为就绪。

    这份证书是你设备专属的——它在手机上创建,绝不从共享服务器下载——正是它让应用能为你选择解密的每个主机出示受信任的证书。

    Android 版 Busymate DevTools 的引导式抓包设置
  5. 05

    让你自己的应用信任用户证书库

    这是任何 Android 抓包工具都无法跳过的一步。从 Android 7.0 起,目标级别为该版本或更高的应用默认只信任系统证书库,所以手机一出示生成的证书,你的应用就会关闭连接。解决办法是一个小小的网络安全配置,仅限调试版本,把用户证书库加到系统证书库旁边。Android 会把 debug-overrides 块从正式版本中完全编译掉,因此它不可能泄漏到生产环境。

    在你的应用中创建下面的文件,把系统锚点和用户锚点放在一起以保证普通 HTTPS 照常工作,在清单的 application 标签中引用它,然后重新构建并安装调试版本。重装旧的二进制文件没有用——信任存在于新构建的应用里。

    仅调试版本使用的网络安全配置,以及清单中的引用
    xml
    <!-- app/src/main/res/xml/network_security_config.xml -->
    <network-security-config>
      <debug-overrides>
        <trust-anchors>
          <certificates src="user" />
          <certificates src="system" />
        </trust-anchors>
      </debug-overrides>
    </network-security-config>
    
    <!-- AndroidManifest.xml -->
    <application
        android:networkSecurityConfig="@xml/network_security_config"
        ... >
  6. 06

    打开抓包并检查

    打开抓包开关。Android 会在状态栏显示 VPN 钥匙图标,手机发出的每条请求都开始出现在仪表盘信息流和应用自带的 Network 界面里——一行状态、统计标签、分类芯片,以及按主机分组、底部带搜索的列表。点按一个主机,再点按一条请求,即可查看完整细节:请求和响应各有 General、Header、Summary、Timing 和 Body 标签页。

    打开你的应用并触发一次调用。它的 HTTPS 条目现在显示可读的头部和解密后的正文,而不是不透明的隧道。用完之后关闭抓包——VPN 断开,证书和应用都可以像其他任何东西一样移除。

    Android 版 Busymate DevTools 的实时 Network 信息流

故障排除

可能出现 的问题

Android 上的大多数问题都源于平台对证书的严格要求,信息流会告诉你遇到的是哪一种。

  • 你自己应用的流量仍然显示为加密

    网络安全配置没有生效。确认你在添加它之后重新构建并安装了调试版本,清单指向了该文件,证书也在用户证书库里。如果配置放在仅调试的源码集里,清单属性也必须放在调试清单中。

  • 一个不是你构建的商店应用仍然不透明

    在未 root 的手机上这是预期行为:那个应用从未选择信任用户证书,所以手机只把连接记录为元数据。解密它需要一台 root 过的设备,让证书进入系统证书库——手机集群采用的正是这一级别——即便如此,也打不开固定了自身证书的应用。

  • Android 的 VPN 弹窗反复出现

    另一个 VPN 应用正在运行,或者之前的授权在系统 VPN 设置中被撤销了。同一时间只能运行一个 VPN;断开另一个,然后从引导式设置重新批准弹窗。

  • 抓包通知从未出现

    首次弹窗时通知权限被拒绝了。在系统应用设置里为 Busymate DevTools 重新开启;引导式设置会重新检查并把该步骤标记为完成。

  • 主机在列表里,但按路径匹配的规则没有触发

    按路径匹配的规则需要主机已被解密;对于以加密方式通过的主机,只能看到主机名。先把主机加入 SSL 代理列表,再重新检查规则。

常见问题

大家常问 的问题

我需要 root 吗?

抓包不需要,解密你自己的调试版本或信任用户证书库的客户端也不需要。只有想把证书放进系统证书库、让不是你构建的应用也信任它时才需要 root。

它底层是一个代理吗?

不是。应用注册为手机的 VPN,因此无需触碰任何代理设置,就能看到所有应用在 Wi-Fi 和移动数据上的流量。面向浏览器和后端另有一个桌面代理,但本指南从未用到它。

不在我列表里的应用会怎样?

它们和以前完全一样正常工作。它们的连接只记录主机和时间,从不解密,而且 Ignore Hosts 可以把最吵的那些从信息流里彻底去掉。

你应用的流量, 在手机上读取

安装应用,运行引导式设置,添加那个单文件调试配置,然后看着你应用的请求以解密状态到达。

Ask your mate