如何使用mitmproxy抓取Android系统所有应用的网络流量?
Android 7.0+ 系统mitmproxy抓取全应用流量解决方案
问题核心原因
警告:面向Android API Level 24(2016年推出,对应Android 7.0)及更高版本的应用仅接受系统信任存储区的证书。除非应用手动适配,否则用户添加的CA证书不被信任。除浏览器外,绝大多数应用需要手动修改才可支持。
你自行安装的mitmproxy证书属于用户级信任证书,因此非浏览器类应用默认不会信任,导致无法抓包,可根据你的设备情况选择以下任意一种方案解决:
方案1:已Root设备直接安装证书到系统信任区(无需修改应用,全量生效)
- 导出mitmproxy的CA证书,默认文件名为
mitmproxy-ca-cert.cer - 计算证书哈希值并重命名:本地执行命令
openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer | head -1,会得到类似c8750f0d的8位哈希值,将证书文件重命名为c8750f0d.0(哈希值加.0后缀) - 执行命令
adb push c8750f0d.0 /system/etc/security/cacerts/,将证书推送到设备系统证书目录 - 进入设备shell执行
chmod 644 /system/etc/security/cacerts/c8750f0d.0,修改证书权限为系统可读 - 重启设备后,mitmproxy证书会进入系统信任列表,所有应用默认信任该证书,可直接抓包
方案2:无Root设备,单独修改目标应用网络配置(仅针对单个应用生效)
- 反编译目标APK文件,打开根目录下的
AndroidManifest.xml - 在
<application>标签中添加属性:android:networkSecurityConfig="@xml/network_security_config" - 在
res/xml目录下新建network_security_config.xml文件,写入以下配置:
<?xml version="1.0" encoding="utf-8"?> <network-security-config> <base-config> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config> </network-security-config>
- 重新打包APK并签名后安装到设备,即可对该应用进行抓包
方案3:无Root设备,使用虚拟环境全局代理(无需修改单个应用)
- 安装支持全局代理、CA证书注入的安卓虚拟环境应用
- 在虚拟环境中安装所有需要抓包的目标应用
- 在虚拟环境的安全设置中导入mitmproxy的CA证书,将全局代理地址设置为mitmproxy的监听地址
- 启动虚拟环境内的应用,所有流量都会经过mitmproxy完成抓包
内容的提问来源于stack exchange,提问作者erfan
相关产品推荐
相关产品推荐

