抓包是排查 *** 故障、分析接口、调试 App 的必备技能。本文用“自问自答”的方式,带你从零完成安卓手机抓包,并重点突破 HTTPS 加密流量。
一、抓包前必须准备的硬件与软件
Q:我需要哪些工具?
A:
- 一台电脑(Win/Mac/Linux 均可)
- 一部已解锁开发者选项的安卓手机(Android 7.0 以上)
- 抓包软件:Charles、Fiddler、mitmproxy、Packet Capture 四选一
- 数据线或同一局域网 Wi-Fi
- 可选:VPN 热点工具(如 VpnHotspot)用于旁路抓包
二、安卓 7.0+ 的 HTTPS 证书信任难题
Q:为什么安装 Charles 证书后仍提示“证书无效”?
A:
- Android 7.0 起,系统默认不再信任用户安装的 CA 证书,除非 App 主动声明
networkSecurityConfig
。
- 解决思路:
1. 把证书装进系统分区(需 Root)
2. 修改 App 的 networkSecurityConfig(需重打包)
3. 使用平行空间或 VirtualXposed 等虚拟环境
三、无 Root 抓包 HTTPS 的三种可行方案
方案1:使用 Packet Capture + VPN 模式
步骤:
- Google Play 安装 Packet Capture
- 打开 App,点击右上角开始按钮,系统会提示创建 VPN,点“允许”
- 在列表里找到目标 App,点击绿色小飞机即可开始抓包
- 导出 PCAP 文件,用 Wireshark 分析
优点:无需 Root、操作简单
缺点:只能查看应用层数据,无法修改请求
方案2:使用 VirtualXposed + TrustMeAlready 模块
步骤:
- 安装 VirtualXposed 与 TrustMeAlready 模块
- 在 VirtualXposed 中添加目标 App 与模块,重启虚拟环境
- 在电脑端运行 mitmproxy,手机 Wi-Fi 设置 *** 到电脑 IP:8080
- 打开目标 App,HTTPS 流量即可明文显示
优点:无需 Root、可动态修改请求
缺点:部分 App 检测虚拟环境会闪退
方案3:使用 adb + run-as 获取调试版 App 沙箱证书
步骤:
- 手机连接电脑,执行
adb shell
run-as 包名
进入 App 沙箱
- 把抓包工具证书 push 到
/data/data/包名/files/
- 在 App 的
networkSecurityConfig
中引用该证书
优点:不触碰系统分区,相对安全
缺点:仅适用于可调试版本的 App
四、Root 用户如何永久信任抓包证书
Q:Root 后如何把 Charles 证书装进系统?
A:
- 导出 Charles 证书为 charles.pem
- 计算哈希:
openssl x509 -inform PEM -subject_hash_old -in charles.pem | head -1
- 重命名为
hash.0
,例如 7f8c0d24.0
- adb remount 或 Magisk 挂载 /system 为可写
adb push 7f8c0d24.0 /system/etc/security/cacerts/
- 修改权限:
chmod 644 /system/etc/security/cacerts/7f8c0d24.0
- 重启手机,系统即永久信任该证书
五、实战:抓取某短视频 App 的推荐接口
Q:我想拿到推荐视频的 *** ON,该怎么做?
A:
- 手机与电脑同局域网,电脑启动 mitmproxy:
mitmweb -p 8080
- 手机 Wi-Fi 设置 *** 到电脑 IP:8080,浏览器访问
mitm.it
安装证书
- 若手机 Android 10+,用方案2的 VirtualXposed 绕过证书校验
- 打开短视频 App,下滑刷新推荐流
- 在 mitmweb 界面过滤
/aweme/v1/feed/
,即可看到返回的 *** ON
- 复制 cURL,Postman 重放,验证字段含义
六、常见问题速查表
- 提示“SSLHandshakeException”? 检查证书是否被系统信任,或目标 App 是否启用证书固定(Certificate Pinning)。
- 提示“ *** 不可用”? 关闭 *** 后重试,确认 App 是否检测 *** 环境。
- 抓到的数据乱码? 检查是否启用 gzip 解压,或尝试
br
解码。
- 如何导出 HAR? Charles 菜单 File → Export Session → HAR Format。
七、进阶技巧:自动化抓包与脚本分析
Q:我想每天定时抓包并生成报告?
A:
- 电脑端用 mitmdump 启动脚本:
mitmdump -s capture.py -p 8080
- 脚本示例(Python):
from mitmproxy import http
def response(flow: http.HTTPFlow):
if "aweme/v1/feed" in flow.request.pretty_url:
with open("feed.json", "a", encoding="utf-8") as f:
f.write(flow.response.text + "\n")
- 配合 crontab 每天凌晨执行,自动收集数据
- 用 pandas 解析 *** ON,生成可视化报表
掌握以上 *** 后,无论是调试自家 App 还是研究竞品接口,都能游刃有余。记得在合法合规的前提下使用抓包技术,尊重用户隐私与服务条款。
暂时没有评论,来抢沙发吧~