1. 为什么Android 7.0抓HTTPS包这么麻烦记得我第一次在Android 9.0设备上尝试用Charles抓包时明明按照老教程一步步操作却死活抓不到HTTPS流量。折腾了大半天才发现原来从Android 7.0Nougat开始系统做了个重要改动不再信任用户安装的CA证书只认/system分区下的系统证书。这个安全机制叫做证书固定化(Certificate Pinning)初衷是为了防止中间人攻击。想象一下如果你的手机随便安装个证书就能解密所有HTTPS流量那黑客岂不是也能这么干所以Google要求所有APP默认只信任系统预装的证书。实测发现这个限制对开发者调试影响很大。比如你要分析某个APP的API调用或者排查HTTPS请求失败的原因传统方法直接失效。我遇到过最头疼的情况是某些金融类APP还额外做了证书绑定连系统证书都不认必须用特殊方法绕过这个我们后面再聊。2. 准备工作Root手机与工具安装2.1 获取Root权限的正确姿势首先声明Root手机会失去保修且存在安全风险建议使用备用机操作。我常用Magisk来Root因为它支持不修改系统分区systemless对OTA更新更友好。具体步骤解锁Bootloader各厂商方法不同通常要连续点击版本号开启开发者选项下载对应机型的TWRP Recovery刷入通过TWRP安装Magisk.zip首次开机后配置Magisk Hide隐藏Root状态注意部分国产手机如小米需要先申请解锁权限华为近年机型基本无法Root2.2 配置Charles代理环境建议使用Charles 4.2版本老版本可能不支持新加密算法。关键配置点# 查看本机IPMac/Linux ifconfig | grep inet # Windows用 ipconfig在Charles的Proxy Settings里端口默认8888勾选Enable transparent HTTP proxyingmacOS用户记得在系统网络设置里配置HTTP代理手机连接同一WiFi后手动设置代理为电脑IP:8888。这时候打开浏览器应该能看到Charles弹出连接确认框说明基础代理通了。3. 证书安装的魔鬼细节3.1 下载证书的隐藏坑点很多教程说用手机访问chls.pro/ssl下载证书但实测发现Chrome下载的可能是.crt格式QQ浏览器下载的是.pem格式华为浏览器可能会拦截下载我建议直接在Charles里导出证书Help → SSL Proxying → Save Charles Root Certificate选择PEM格式保存为charles.pem3.2 证书转换与重命名这是最易出错的环节重点看# 获取证书哈希值注意不是文件md5 openssl x509 -subject_hash_old -in charles.pem # 输出第一行就是哈希前缀比如9fb67cec # 重命名证书 mv charles.pem 9fb67cec.0常见错误用了-subject_hash而不是-subject_hash_old新算法结果不同忘记在哈希后加.0后缀证书内容被修改必须保留完整的BEGIN/END CERTIFICATE段落3.3 推送证书到系统目录需要adb有root权限adb root adb disable-verity adb reboot adb root adb remount adb push 9fb67cec.0 /system/etc/security/cacerts/ # 修改权限 adb shell chmod 644 /system/etc/security/cacerts/9fb67cec.0如果遇到Read-only file system可能是没执行remount。华为EMUI系统可能需要额外操作adb shell mount -o rw,remount /system4. 高阶问题排查指南4.1 仍然抓不到包怎么办先确认基础代理是否生效访问http://httpbin.org/ip 看返回IP是否是电脑IP在Charles的Structure视图查看HTTP请求HTTPS抓包特殊检查项Charles的SSL Proxying Settings中添加要抓取的域名如*:443手机时间必须与电脑同步误差不超过2分钟某些APP如微信会校验证书有效期需要定期更新Charles证书4.2 绕过证书绑定的黑科技对于顽固APP可以尝试使用Objection框架注入绕过SSL Pinningpip install objection objection -g com.target.app explore android sslpinning disable用Frida脚本hook证书验证逻辑对APP进行二次打包修改网络安全配置4.3 性能优化技巧长时间抓包可能导致Charles内存占用暴涨建议设置Recording Settings里的Include/Exclude列表定期清理会话Edit → Clear Session启用Sequence视图替代Structure视图节省内存5. 安全注意事项虽然抓包是开发利器但务必注意不要在Root过的手机上登录银行APP测试完成后及时关闭代理定期清理/system下的自定义证书敏感数据抓包建议在隔离网络环境进行有次我在咖啡店抓包时意外发现同一网络下其他人的微信消息居然出现在Charles里——原来他们没关代理设置。这提醒我们网络安全意识比技术本身更重要。