抓包分析 Android 应用的网络流量
抓包分析 Android 应用的网络流量
📚 前置知识
本配方涉及以下核心技术,建议先阅读相关章节:
- ADB 速查手册 - 设备连接与证书推送
- HTTP/HTTPS 协议 - 理解请求响应结构与 TLS 握手
问题场景
你遇到了什么问题?
想知道某个 App 调用了哪些 API 接口
需要分析 API 的请求参数和响应数据
想查看 App 发送了哪些敏感信息(设备信息、定位等)
需要找到加密签名的生成逻辑
想重放或修改 API 请求
本配方教你:配置抓包环境,拦截并分析 HTTPS 流量,绕过 SSL Pinning 限制。
预计用时: 15-30 分钟(首次配置)
工具清单
必需工具
- Android 设备/模拟器(已 Root,或可安装证书)
- 抓包代理工具(选择其一):
- Burp Suite(推荐,功能最强)
- Charles(UI 友好)
- mitmproxy(开源,可编程)
- Frida(用于绕过 SSL Pinning)
可选工具
- Wireshark(分析底层 TCP/UDP 流量)
- HttpCanary(Android 上的抓包工具,无需 PC)
前置条件
确认清单
| |
- Android 7.0+:需要 Root 权限安装系统证书
- Android 6.0-:可直接安装用户证书,无需 Root
- 或使用支持用户证书的 App(Target SDK < 24)
解决方案
第 1 步:配置抓包工具(5 分钟)
使用 Burp Suite(推荐)
1.1 启动 Burp Suite
| |
- 打开 Proxy → Options
- 在 Proxy Listeners 部分
- 点击 Add,配置:
- Bind to port:
8888 - Bind to address:
All interfaces(或选择你的 Wi-Fi 网卡)
- 点击 OK 保存

验证:浏览器访问 http://YOUR_PC_IP:8888,应该看到 Burp 的错误页面(表示代理工作正常)
使用 Charles
1.1 启动 Charles
下载:https://www.charlesproxy.com/download/
1.2 配置代理
- Proxy → Proxy Settings
- 设置 Port 为
8888 - 勾选 Enable transparent HTTP proxying
使用 mitmproxy
| |
第 2 步:配置手机代理(2 分钟)
2.1 连接到同一 Wi-Fi
确保手机和 PC 在同一局域网。
2.2 设置手动代理
- 打开手机 设置 → Wi-Fi
- 长按当前连接的 Wi-Fi → 修改网络
- 展开 高级选项
- 代理设置改为 手动:
- 代理服务器主机名:
YOUR_PC_IP(如192.168.1.100) - 代理服务器端口:
8888
- 代理服务器主机名:
- 保存
2.3 验证代理连接
| |
第 3 步:安装 HTTPS 证书(5-10 分钟)
为什么需要? HTTPS 流量经过加密,需要安装证书才能解密查看。
Burp Suite 证书安装
3.1 下载证书
- 手机浏览器访问
http://burp - 点击 CA Certificate 下载
cacert.der
3.2 安装证书
- Android 7.0+ (需要 Root):
| |
Charles 证书安装
- 手机浏览器访问
http://chls.pro/ssl - 下载并安装证书
- Android 7.0+ 同样需要安装到系统目录(参考 Burp 步骤)
mitmproxy 证书安装
- 手机浏览器访问
http://mitm.it - 点击 Android 图标下载证书
- 安装步骤同上
第 4 步:开始抓包(1 分钟)
4.1 清空旧记录
- Burp: Proxy → HTTP history → 右键 → Clear history
- Charles: Proxy → Clear Session
4.2 启动目标 App
在手机上打开要分析的应用,正常使用。
4.3 查看流量
在抓包工具中:
- 查看 HTTP history / Sequence
- 筛选目标 App 的域名
- 分析 Request/Response 内容
示例分析点:
- 请求 URL 和参数
- Request Headers(
User-Agent,Authorization, 自定义签名头) - Request Body(POST 数据)
- Response Body(API 返回的 JSON/XML)
第 5 步:绕过 SSL Pinning(如遇到)
症状:
- 证书已安装,但 HTTPS 请求仍无法抓取
- App 显示"网络错误"或直接闪退
- 抓包工具显示 SSL 握手失败
原因:App 启用了 SSL Pinning(证书锁定),拒绝信任系统证书。
方法 1: 使用 Frida 通用脚本(推荐)
下载脚本 bypass_ssl_pinning.js:
| |
| |
| |
方法 2: 使用 Xposed 模块
JustTrustMe 安装步骤
- 确保设备已安装 Xposed Framework
- 下载 JustTrustMe 模块:https://github.com/Fuzion24/JustTrustMe
- 在 Xposed Installer 中激活
- 重启设备
方法 3: 修改 APK(重打包)
APK 重打包步骤
如果 Frida 被检测,可以修改 APK 来信任用户证书:
- 反编译 APK
- 修改
AndroidManifest.xml,添加:1<application android:networkSecurityConfig="@xml/network_security_config"> - 创建
res/xml/network_security_config.xml:1 2 3 4 5 6 7 8<network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" /> <certificates src="user" /> </trust-anchors> </base-config> </network-security-config> - 重新打包并签名 APK
工作原理
MITM(中间人攻击)流程
| |
SSL Pinning 是什么?
App 内置了服务器证书的指纹(Hash),只信任特定证书:
| |
常见问题
问题 1: 手机无法连接代理
症状:浏览器显示"无法连接到代理服务器"
检查:
- PC 和手机是否在同一 Wi-Fi?
- PC 防火墙是否允许 8888 端口?
| |
| |
问题 2: 证书无效
症状:浏览器显示证书无效
Android 7.0+ 限制:
- 默认只信任系统证书
- 必须将证书安装到
/system/etc/security/cacerts/(需要 Root)
无 Root 设备的解决方案:
- 使用 Magisk + MagiskTrustUserCerts 模块
- 或修改 APK(参考方法 3)
问题 3: Frida 脚本不生效
可能原因:
App 使用了自定义网络库 → 需要定位具体的类名和方法,定制 Hook 脚本
Frida 被检测 → 使用重命名的 frida-server:
| |
问题 4: 抓不到某些请求
可能原因:
使用了 HTTP/2 或 QUIC → Burp Suite → Proxy → Options → HTTP/2 → 勾选"Enable HTTP/2"
直接使用 Socket 通信 → 需要使用 Wireshark 或 tcpdump 抓取原始 TCP 包
加密的自定义协议 → 需要逆向分析加密算法并解密
延伸阅读
相关配方
- 密码学分析 - 分析 API 签名和加密算法
- Frida 反调试绕过 - 如果 App 检测到 Frida
- TLS 指纹分析 - 理解 TLS 指纹技术
工具深入
- Frida 完整指南
- [Burp Suite 使用技巧] - TODO,一个比较流氓的工具
案例分析
💡 思路一句话: 抓包的关键是「选对工具链」— HTTP 用 mitmproxy/Charles,HTTPS 需要证书信任处理(Android 7+ 需要 root 注入系统证书),非 HTTP 协议用 Wireshark + Frida hook socket。
快速参考
一键启动脚本
- macOS/Linux:
| |
- Windows:
| |
快速 SSL Pinning 绕过
| |
相关内容
- 使用 TLS 指纹识别检测和绕过应用指纹
- APK 文件结构详解
- Android Studio 调试工具集
- 学习资源 (Learning Resources)
- 使用 Frida 脱壳加固 App 并修复 SO 文件
支付宝
微信