百趣云 百趣云的博客

Android 10+ 抓包:把用户证书装进系统分区的完整流程

为什么 Android 7 之后抓包变难了

Android 7(API 24)改了网络安全模型:App 默认只信任系统证书,不再信任用户证书。你在设置里装的 Charles 证书进的是用户证书区,App 直接无视——这就是"证书装了但抓不到包"的原因。

解决思路只有一个:把抓包证书塞进系统证书区 /system/etc/security/cacerts/。Android 10+ 的 system 分区是只读的(动态分区+dm-verity 校验),直接 remount 会失败,这就是本文要解决的完整链路。

前置条件

  • 已 root(Magisk)
  • Charles/mitmproxy 的 CA 证书(pem 格式)

第一步:证书转成 Android 认识的格式

Android 系统证书的文件名是 主题哈希.0,不是随便命名的:

# 导出 Charles 证书后,计算哈希并改名
openssl x509 -inform PEM -subject_hash_old -in charles.pem
# 输出类似: 87bc3517
cp charles.pem 87bc3517.0

mitmproxy 的证书在 ~/.mitmproxy/mitmproxy-ca-cert.pem,同样处理。

第二步:Magisk 模块方案(推荐,不碰 system 分区)

Android 10+ 不要硬改 system 分区,用 Magisk 的模块挂载机制——它在启动时把文件 overlay 到 system 上,系统分区本身不动,OTA 和 dm-verity 都不受影响。

手动做一个模块:

adb shell
su
mkdir -p /data/adb/modules/movecert/system/etc/security/cacerts
cp /sdcard/87bc3517.0 /data/adb/modules/movecert/system/etc/security/cacerts/

# 写 module.prop
cat > /data/adb/modules/movecert/module.prop << 'EOF'
id=movecert
name=Move User Cert to System
version=1.0
versionCode=1
author=local
description=Move CA cert to system store
EOF

chmod 644 /data/adb/modules/movecert/system/etc/security/cacerts/87bc3517.0
reboot

重启后证书出现在系统信任区。嫌手动麻烦可以直接装现成的 MoveCertificatesMagiskTrustUserCerts 模块——后者更绝:让所有用户证书自动获得系统证书效力,新装抓包工具不用再折腾。

第三步:验证

# 确认证书已挂载
ls -l /system/etc/security/cacerts/ | grep 87bc
# Charles 起代理,手机 WiFi 设置代理指向电脑,访问 https 网站看能否解密

精髓:抓不到的排查清单

证书装对了还抓不到,按这个顺序查:

  1. App 做了 SSL Pinning:系统证书也不信,只信内置证书。表现是 Charles 里看到 CONNECT 后立刻断开。解法:Frida hook 掉 pinning(TrustManagerOkHttp CertificatePinner),或走 SSL_read/SSL_write 方案
  2. App 走 QUIC:UDP 443 的流量 Charles 根本收不到。路由器/防火墙封掉 UDP 443,逼 App 回退 TCP
  3. App 不走系统代理:OkHttp 可以配 Proxy.NO_PROXY 绕过系统代理设置。用 Postern/Drony 这类 VPN 型抓包工具做全局流量接管
  4. 双向证书校验(mTLS):服务端也校验客户端证书,银行类 App 常见。要从 App 里抠出客户端证书(一般在 assets 或 SO 里)导入 Charles

总结

  1. Android 7+ App 只信系统证书,证书必须进 /system/etc/security/cacerts/
  2. 证书文件名是 subject_hash_old.0 格式,不是任意命名
  3. Android 10+ 用 Magisk 模块 overlay,别硬改 system 分区
  4. 抓不到按序排查:Pinning → QUIC → 代理绕过 → mTLS

交流微信:run1255

By 百趣云 阅读量:3 On