以前抓安卓的 HTTPS,套路很固定:电脑上装个抓包软件,手机配好代理,再装上一根证书,开抓。这套流程现在在不少手机上跑不通了------证书装完 App 照样不认,有的 App 代理一开就断网。搜安卓抓包软件,看到的教程还有不少停留在老流程上,照着做就是踩坑。问题不是软件本身是环境:这几年安卓抓包的环境变了三件事,每一件都在改写"选哪款工具"的答案。这篇按变化点讲清楚,末尾给一张选择表。
这几年变化比较大的有三件事:
- 系统证书信任收紧:Android 7 起,系统把证书分成"用户证书"和"系统证书"两层,App 默认只认系统层------你装进手机的证书它不认,代理解密自然失败
- 证书绑定成了标配:越来越多的 App 在代码里固定服务端证书或公钥,代理一换证书就被它识别出来
- 测试设备形态分化:模拟器一键开 root 很常见,老内核的设备还有不少,抓包方案得同时兼容这两类环境
下面按这三件事逐条展开,每条给对应的解法。
系统证书信任收紧之后
Android 7 之前,装进手机的用户证书 App 普遍认,代理装好证书就能解密;Android 7 之后默认只信任系统层证书,用户装的证书对它等于不存在。表现就是:证书装好了、代理配好了,请求还是密文,或者干脆失败。照老教程配的步骤,多半卡在这一层。
对应的路有两条。一是已 root 设备把证书装进系统层,让 App 认它------高版本安卓的证书管理界面里,用户证书和系统证书是分开的,手动搬需要 root 权限。二是不装证书:整机抓包从网卡层取流量、自动解密,全程不做中间人,证书信任规则对它没有影响。在 TraceEagle 里选中设备、选网卡(默认 Wi-Fi)、开抓,流量自动解密成明文,全程不用碰证书。设备已 root 时,需要证书的场景还能自动把信任证书装到系统层,省掉手动步骤。
App 开始自己校验证书
第二件事是证书绑定。代理抓包靠"换证书"解密,App 绑定证书后自己校验,一换就被识破------表现是代理下一开就失败,或流量全是密文。解法绕开"换证书"这个动作:应用层抓包从 App 内部直接取明文,不做中间人,证书绑定、自定义加密都拦不住。操作上,在 TraceEagle 里指定目标 App:从已装列表选、填包名或进程名,留空则抓当前前台 App,然后开抓。常规方式取不到明文时(静态链接、自研库那类),打开"socket 流量"开关兜底,换一条更底层的路取数据;想抓 App 启动初期的几条请求,勾"重启目标程序",它会先关掉再重新拉起目标。这套只针对单个 App,适合把整机模式下解不出的顽固目标定点拿下。
老设备与模拟器是另一重考虑
第三件事影响的是兼容性。模拟器测试的占比不低,好在抓包软件对模拟器的支持都挺到位:常见品牌的安卓模拟器自动识别,不用插线,模拟器一般自带或一键开启 root,正好满足整机抓包的 root 前提。老内核的设备要注意一点:部分抓包方式有内核要求,设备偏老时开抓会明确提示不支持------这时换兼容性最好的"网卡密钥"方式,它不挑内核,老设备、各类模拟器都能用。抓包所需的辅助组件会按设备架构自动下载并缓存,不用手动配环境,这点在模拟器上尤其省事。整机抓包还有一层好处:不用挑 App、不用装证书,开抓后手机上的任何流量都能看。
代理这条路没有死
免证书的路覆盖了 root 设备,代理模式仍然有它的位置:设备没 root,或需要改写请求、重放、断点拦截这类完整能力时,还得走代理。高版本安卓上两个应对:已 root 就让工具把信任证书自动装到系统层;App 做了证书绑定就配合解除绑定。Charles 这类传统工具的主场也是这里,TraceEagle 的代理模式同样提供改写、重放这套能力------代理链路成熟,配规则改写和断点是完整的调试组合;HttpCanary 这类安卓端工具适合快速在手机上确认一条请求,不用开电脑。工具之间是配合关系,按场景各取所需。
把设备情况和目标摆在一起,选型就是一行表的事:
| 你的情况 | 用哪种 | root | 证书 |
|---|---|---|---|
| 老设备 / 模拟器 / 拿不准新旧 | 网卡密钥(推荐默认) | 要 | 不用 |
| 较新的已 root 真机 | 网卡抓包 | 要 | 不用 |
| 只盯一个 App,或整机下只出密文 | 应用层抓包 | 要 | 不用 |
| 没 root,或要改包重放 | 代理抓包 | 不用 | 要装 |
提醒:免证书的三种抓法都要求已 root 设备------模拟器一般自带或一键开启 root;真机没 root 时,只剩代理加证书这一条路。
安卓抓包软件怎么选,关键在证书这里:免证书的三条路覆盖已 root 设备,代理路留给没 root 和要改包的场景。先按设备和目标选择,再决定装哪款,比到处翻教程高效。
小细节:模拟器抓包优先选网卡密钥最稳;辅助组件第一次开抓时按设备架构自动下载,等它缓存完即可;网卡模式下个别 App 只出密文(自带或非标准加密组件),对这种 App 直接用应用层抓包定点解决,不用全盘重来。把环境变了的三件事记在心里,选安卓抓包软件时就能少踩大半的坑。