Charles搭配MuMu模拟器抓取HTTPS数据包实战(附疑难排查)
1. 环境准备与工具安装第一次用Charles抓MuMu模拟器的HTTPS包时我踩了个大坑——Android 7.0之后系统不再信任用户安装的证书。折腾了整整两天才发现问题根源后来摸索出这套完整方案。先说说需要准备的家伙Charles 4.6官网下载或汉化版都行MuMu模拟器12实测6.0版本会有ADB连接问题OpenSSL 3.0证书转换必备ADB工具包建议用MuMu自带的安装时有个细节要注意Charles首次启动会提示防火墙权限这时候一定要勾选专用网络和公用网络否则后续抓包会漏数据。我遇到过好几次因为漏选导致只能抓到HTTP请求的情况。2. 证书配置全流程2.1 生成系统级证书普通用户证书在Android 7.0上就是个摆设必须把证书塞进系统信任区。具体操作在Charles导出证书Help → SSL Proxying → Save Charles Root Certificate用OpenSSL转换格式openssl x509 -inform PEM -subject_hash_old -in charles.pem记住输出的哈希值比如a2414e42把证书重命名为a2414e42.0踩坑提醒Windows下用cmd执行时如果报openssl不是内部命令需要把OpenSSL的bin目录加入系统PATH。我建议直接重启电脑生效。2.2 推送证书到系统目录这里需要ADB操作adb push a2414e42.0 /system/etc/security/cacerts/ adb shell chmod 644 /system/etc/security/cacerts/a2414e42.0如果遇到Read-only file system错误先执行adb remount这个步骤我失败过三次后来发现是MuMu的root权限没开彻底。需要在模拟器设置中心→其他设置里把开启手机Root权限和可写系统盘都勾上。3. 网络代理配置技巧3.1 Charles端设置代理配置有个隐藏技巧不要用默认8888端口很多国产软件会占用这个端口导致冲突。我习惯用59999这种冷门端口具体设置路径 Proxy → Proxy Settings → HTTP ProxySSL代理这里要特别注意勾选Enable SSL Proxying添加Location时Host填*Port填*建议勾选Use HTTP/23.2 模拟器网络配置MuMu的虚拟网络比较特殊需要处理10.0.2.2这个特殊IP设置→WLAN→长按已连接网络→修改网络代理选手动主机名填10.0.2.2端口填Charles的监听端口高级选项里把绕过本地代理勾掉实测发现Android 9版本需要额外操作adb shell settings put global http_proxy 10.0.2.2:599994. 疑难问题排查指南4.1 证书安装失败症状能抓到HTTP包但HTTPS全是乱码 排查步骤检查/system/etc/security/cacerts/下证书权限是否为644执行adb shell ls -l /system/etc/security/cacerts/ | grep charles看证书哈希前缀是否匹配在模拟器设置→安全→信任的凭证→系统查看是否存在Charles证书4.2 网络连接异常症状模拟器无法联网或Charles无数据 解决方案关闭Charles的Windows系统代理Proxy→Windows Proxy取消勾选在Rewrite设置中添加规则Match Type选HostMatch Value填10.0.2.2Replace Value填127.0.0.1重启模拟器网络服务adb shell am broadcast -a android.net.wifi.WIFI_STATE_CHANGED4.3 数据包不完整症状Response内容截断或缺失Header 优化方案在Charles的Throttle Setting里关闭带宽限制调整Proxy→Recording Settings→最大缓存改为1024MB对于WebSocket协议需要单独启用SSL代理有次分析某电商APP时发现商品详情API总是抓不全。后来发现是Charles的Enable gzip compression没关关闭后立即恢复正常。这种细节问题特别容易被忽略。5. 高阶技巧与应用5.1 批量导出证书当需要多台设备协作时可以批量处理证书Get-ChildItem *.pem | ForEach { $hash openssl x509 -subject_hash_old -in $_ Rename-Item $_ $hash.0 }5.2 自动化配置脚本我整理了个一键配置脚本#!/bin/bash # 自动配置MuMu抓包环境 adb connect 127.0.0.1:7555 adb root adb remount adb push ${CERT_NAME} /system/etc/security/cacerts/ adb shell chmod 644 /system/etc/security/cacerts/${CERT_NAME} adb shell settings put global http_proxy 10.0.2.2:59999 echo 配置完成请重启模拟器5.3 特定APP抓包技巧针对不同应用场景微信小程序需要额外配置WeChat X5调试Flutter应用在启动参数添加--disable-dart-ssl游戏加速器关闭TCP Fast Open功能最近帮朋友分析一个混合开发APP时发现常规方法抓不到RN模块的请求。最后是通过在Charles的SSL Proxying Settings里添加具体域名解决的这种问题需要具体问题具体分析。
