好 — 我把在 Windows 上用 Fiddler 抓取 MuMu(网易/模拟器)流量的完整操作笔记做成了可复制的实操步骤、常见问题与解决方案。包含:代理配置、HTTPS 解密、CA 证书安装(含 Android 7+ 的限制)、 adb 命令、以及遇到问题的排查清单。你可以直接按步骤跑一遍。
目标
在宿主机(Windows)上运行 Fiddler,拦截并分析 MuMu 模拟器里 App / 浏览器的 HTTP/HTTPS 请求/响应。
前提
- Windows 主机能联网并安装 Fiddler(或 Fiddler Classic)。
- 已安装 ADB(Android Debug Bridge)工具,并能访问 MuMu(
adb devices
能看到设备)。 - MuMu 模拟器可上网(通过 NAT),或能设置代理。
- 若需拦截 HTTPS,后续会说明证书安装与 Android 版本限制。
步骤一:准备与开启 Fiddler
- 下载并安装 Fiddler Classic(或 Fiddler Everywhere)。
- 启动 Fiddler,打开
Tools → Options → Connections
:- 勾选 Allow remote computers to connect(允许远程主机连接)。
- 确认 Fiddler listens on port(默认
8888
),可自行修改。
- 如果要抓 HTTPS,打开
Tools → Options → HTTPS
:- 勾选 Capture HTTPS CONNECTs、Decrypt HTTPS traffic。
- 若提示生成证书,接受并生成根证书(Fiddler 会在系统证书存储中加入根证书)。
- 在 Windows 防火墙中允许 Fiddler / 端口(8888)入站,或临时关闭防火墙以便验证。
步骤二:确认宿主机 IP(供模拟器代理使用)
在命令行运行:
ipconfig
找到你的主机在与 MuMu 互通的网卡 IP(常见是 192.168.1.xxx
或 10.0.x.x
)。记下该 IP,下面称为 <HOST_IP>
。
注意:MuMu 与宿主机网络模式通常是 NAT,宿主机 IP 一般可被模拟器访问。若不确定,用
ping <HOST_IP>
在模拟器 shell 中测试(见 adb shell)。
步骤三:在 MuMu 中配置代理(两种方法)
方法 A:系统 Wi-Fi 代理(持久 / 适用性更好)
- 在 MuMu 打开 Settings → Network & internet → Wi-Fi(或长按当前网络) → 修改网络 → 显示高级选项。
- 在
Proxy
一项选择Manual
,填写:- Proxy hostname:
<HOST_IP>
- Proxy port:
8888
(或你在 Fiddler 中设置的端口)
- Proxy hostname:
- 保存并重连网络。此时大部分应用的 HTTP/HTTPS 流量会走代理(但见下面 Android 7+ HTTPS 限制)。
方法 B:使用 ADB 全局代理(命令行,临时)
adb shell settings put global http_proxy <HOST_IP>:8888
清除代理:
adb shell settings put global http_proxy :0
# 或
adb shell settings delete global http_proxy
方法 B 有时对新版 Android/Wi-Fi 设置影响不同,且只对 HTTP 有效;HTTPS 需要应用支持系统代理。
步骤四:验证代理是否工作(简单测试)
- 在 Fiddler 界面看是否有来自 MuMu 的请求出现。
- 在模拟器里打开浏览器访问
http://httpbin.org/get
或某个明文 HTTP 地址,观察 Fiddler 是否捕获。 - 若看到流量,说明代理设置生效;若没有,检查防火墙或
<HOST_IP>
是否正确。
步骤五:拦截 HTTPS(最容易出坑的部分)
方式一:安装 Fiddler 根证书为“用户证书”
- 在 Fiddler 中
Tools → Options → HTTPS → Actions → Export Root Certificate to Desktop
(导出 .cer 文件),文件名例如FiddlerRoot.cer
。 - 把证书推到模拟器并安装:
adb push FiddlerRoot.cer /sdcard/
# 在模拟器上:Settings → Security → Install from storage,选择 /sdcard/FiddlerRoot.cer 并安装为“用户证书”
- 浏览器(系统浏览器)通常会信任用户证书,Fiddler 即可解密 HTTPS。你会在 Fiddler 中看到解密后的请求/响应。
限制(重要)
- 从 Android 7.0(Nougat)起,应用默认不信任用户安装的 CA 证书(仅信任 system CA),除非该应用使用了
networkSecurityConfig
明确允许 user CAs。因此:- 系统浏览器通常还是信任的(视设备实现)。
- 大多数第三方 App(特别是采用 okhttp / 自定义网络安全配置的企业 App)不会信任用户证书 → 无法被 Fiddler 解密 HTTPS。
方式二:把证书加入 System CA(需 root 权限)
只有在模拟器被 root 或有权限把证书放入 /system/etc/security/cacerts
才可,使所有应用信任 Fiddler CA。
大致步骤(仅在有 root 的模拟器可行):
- 将证书转换为 DER 格式并生成哈希文件名:
# 在 Windows / WSL / Linux 上
openssl x509 -inform PEM -in FiddlerRoot.cer -outform DER -out FiddlerRoot.der
# 得到 hash 名称(Android 6及以前用 subject_hash_old)
openssl x509 -inform DER -in FiddlerRoot.der -subject_hash_old -noout | head -1
# 例如输出 abcd1234
# 重命名为 abcd1234.0
mv FiddlerRoot.der abcd1234.0
- 通过 adb push 到 system 证书目录(需要 remount 可写并 root):
adb root
adb remount
adb push abcd1234.0 /system/etc/security/cacerts/
adb shell chmod 644 /system/etc/security/cacerts/abcd1234.0
adb reboot
- 设备重启后,系统 CA 中将包含 Fiddler CA,所有 App 的 HTTPS 都能被解密。
警告:修改系统证书存在风险,仅用于测试环境。生产设备不要这样做。
方式三:修改 App 的 networkSecurityConfig(源码/重打包)
如果你能修改 App(测试版),在 res/xml/network_security_config.xml
中允许 user certs 或直接添加 debug-only 信任。适用于你控制的 App。
步骤六:MuMu 特殊注意点(兼容性)
- 有的 MuMu 版本自带 root 功能或可一键获取 root;若是无 root 的发行版,无法把证书放到 system CA。
- MuMu 的 Android 版本决定对用户 CA 的信任策略(Android 7+ 限制),建议查看 MuMu 的 Android 版本(系统设置 → 关于手机)。
- MuMu 可能对网络做 NAT,host IP 若无法访问可尝试
10.0.2.2
(部分模拟器的特殊地址指向宿主机);但 MuMu 不一定支持10.0.2.2
,更稳妥用宿主真实 IP。
步骤七:抓包调优、导出、筛选技巧
- 在 Fiddler 中使用 Filters 筛选
Process
/Host
/URL
,把噪声流量(Windows 更新、服务)过滤掉。 - 若要只看 MuMu 流量,在 Fiddler 的
Filters
里启用Show only traffic from browser
并加上主机 IP 或端口条件。 - 导出会话:
File → Export Sessions → All Sessions
(支持 SAZ/ HAR 等格式)。 - 查看请求体 / 响应体:选中会话,查看 Inspectors(Raw / JSON / Text / Image / WebForms)。
- 若遇到网页资源未正常渲染,检查是否跨域或证书问题导致资源被阻止。
常见问题与排查清单
- Fiddler 没捕获到任何请求
- 确认 Fiddler 允许远程连接并监听正确端口;Windows 防火墙是否阻止。
- 确认 MuMu 的代理是否设置为
<HOST_IP>:8888
(系统 Wi-Fi 代理或 adb 设置)。 - 在模拟器
adb shell ping <HOST_IP>
测试连通性。
- 能抓到 HTTP,但 HTTPS 不显示解密内容
- 确认 Fiddler 的 HTTPS 解密已启用。
- 模拟器是否安装了 Fiddler CA(用户证书或系统证书)。
- App 是否拒绝用户 CA(Android 7+ 限制或 App 使用证书固定 pinning)。
- 个别 App 无法被解密(即使装证书)
- 很可能该 App 使用了 certificate pinning(证书绑定)或自定义 trust manager → 需要使用 Frida 等工具 hook 或在测试环境禁用 pinning。
- 或 App 的 networkSecurityConfig 明确禁止 user CAs。
- 代理配置重复 / 无效
- 清除 adb 全局代理后重设,或重启模拟器以刷新网络配置。
- 若有 VPN / 宿主代理冲突,检查链路。
- 证书安装失败 / 系统不认
- 检查证书格式(DER vs PEM)。Fiddler 导出可选 DER。
- 尝试用系统安装界面安装,或用 root 放到 system CA。
额外技巧与高级方案
- 使用 Charles / mitmproxy:原理相同,操作也类似;mitmproxy 更适合脚本化。
- 用
adb reverse
(针对本机服务):若要模拟器访问宿主机某服务,可用adb reverse tcp:8080 tcp:8080
(仅对 ADB 设备有效,模拟器需支持)。 - 若 App 做了 pinning:可用 Frida 动态 hook 绕过 pinning(测试用途),或使用修改过的 APK / debug build。
- 日志与抓包结合:将 App 日志(logcat)与 Fiddler 抓包时间点对齐,便于问题定位:
adb logcat > app.log
最后小结(快速步骤回顾)
- 启动 Fiddler,允许远程连接并启用 HTTPS 解密。
- 确定
<HOST_IP>
(宿主机 IP)。 - 在 MuMu 中设置系统代理(
<HOST_IP>:8888
)或用adb shell settings put global http_proxy <HOST_IP>:8888
。 - 导出并安装 Fiddler 根证书到模拟器(用户证书),或把其放入 system CA(需要 root)。
- 在 Fiddler 中观察/过滤/导出会话;遇 HTTPS 问题按上面排查清单处理。
发表回复