APP抓包技巧大全!
一、抓包基础
1. 抓包本质与工作逻辑
抓包是通过技术手段拦截 APP 与服务器间的网络数据包,核心原理是利用「中间人代理」或「网络层监听」获取流量数据。前者如 Charles 通过代理转发请求实现捕获,后者如 Wireshark 直接监听网卡数据。需明确:仅能捕获经过工具监控范围的流量,非 HTTP/HTTPS 协议(如 Socket)需特殊处理。
2. 核心应用场景
- • 接口调试:定位请求参数错误、响应异常等问题
- • 性能优化:分析请求延迟、数据冗余等瓶颈
- • 兼容性排查:对比不同设备 / 系统的请求差异
- • 安全验证:检测敏感数据传输是否加密
二、工具选型与基础配置:分场景实操
1. 主流工具特性对比
| 工具 | 核心优势 | 适用场景 | 局限 |
| Charles | 可视化强、HTTPS 解密便捷 | 移动端常规抓包、接口联调 | 无法绕过 SSL Pinning |
| Fiddler | Windows 适配佳、插件丰富 | Windows 环境调试 | 跨平台支持弱 |
| Sniffmaster | 真机直连、Pin 绕过能力强 | 金融类 APP、加密场景 | 专业版付费 |
| Wireshark | 网络层深度分析、多协议支持 | 底层流量诊断、丢包分析 | 需 Root / 越狱,操作复杂 |
| HTTP Toolkit | 开源免费、跨平台 | 轻量调试、新手入门 | 高级功能有限 |
| 数据综合工具官方文档及实测经验整理 |
|
|
|
2. 跨平台基础抓包(以 Charles 为例)
(1)电脑端核心配置
- 1. 代理设置:菜单栏「Proxy→Proxy Settings」,端口默认 8888,勾选「Enable transparent HTTP proxying」
- 2. HTTPS 解密:进入「SSL Proxying Settings」,点击 Add 输入*:*(全局捕获),Windows 需安装系统证书
- 3. 获取 IP:Windows 执行ipconfig查 IPv4,macOS 用ifconfig | grep "inet "
(2)Android 端配置(分系统版本)
- • Android 7 以下:
- 1. 连接同一 Wi-Fi,长按网络进入「修改网络→高级选项」
- 2. 手动代理:主机名填电脑 IP,端口 8888
- 3. 浏览器访问http://chls.pro/ssl下载证书,进入「设置→安全→安装证书」
- • Android 7 以上:系统默认不信任用户证书,需二选一:
- • Root 设备:将证书移动至/system/etc/security/cacerts/目录
- • 非 Root:修改 APP 的network_security_config.xml,添加信任配置
(3)iOS 端配置
- 1. Wi-Fi 设置:点击网络→「配置代理」→手动输入服务器 IP 和端口
- 2. 证书安装:Safari 访问http://chls.pro/ssl,在「设置→通用→VPN 与设备管理」安装描述文件
- 3. 信任证书:进入「关于本机→证书信任设置」,启用 Charles 证书
3. 无电脑抓包方案
- • Android:Packet Capture
- 1. 无需 Root,安装后点击开始按钮,系统自动创建 VPN
- 2. 选择目标 APP,捕获完成后可直接查看解密的 HTTPS 请求
- • iOS:Stream
- 1. App Store 下载后,按提示安装证书并信任
- 2. 支持按 APP 筛选流量,自动解析 JSON、XML 响应数据
三、进阶突破:加密与特殊场景处理
1. SSL Pinning 绕过实战
金融、电商类 APP 常用证书锁定阻止抓包,核心方案:
(1)工具组合法
- • Sniffmaster:真机通过 USB 连接,无需代理和证书,自动绕过 Pin 验证
- • 搭配 Wireshark:用 Sniffmaster 捕获 TCP 流,Wireshark 分析握手过程
(2)Frida 动态 Hook(技术向)
- 1. 安装 Frida:pip install frida-tools
- 2. 编写 Hook 脚本(示例):
Java.perform(function() {   var SSLContext = Java.use('javax.net.ssl.SSLContext');   SSLContext.init.implementation = function(km, tm, se) {   // 替换信任管理器,接受所有证书   var TrustManager = Java.use('android.net.http.X509TrustManagerExtensions');   this.init(km, \[TrustManager.\$new()], se);   }; });
- 1. 执行命令:frida -U -f 包名 -l hook.js --no-pause
2. 自定义协议解析
- • Protobuf 协议:
- 1. 用 Wireshark 捕获二进制包,导出为 pcap 文件
- 2. 导入 Sniffmaster,加载.proto协议文件自动解析字段
- • WebSocket/gRPC:Charles 4.6 + 支持 WebSocket 帧解析,Sniffmaster 可可视化 gRPC 流式数据
3. 复杂场景应对策略
| 场景 | 解决方案 | 工具组合 |
| SDK 封装请求抓不到 | 用 Sniffmaster 回溯参数构造,排除系统干扰 | Sniffmaster + Postman |
| 模拟器 OK 真机失败 | 检查证书信任状态,改用 USB 物理抓包 | Sniffmaster + Wireshark |
| 请求无日志无流量 | Wireshark 确认是否发包,排查 Socket 协议 | Wireshark + 系统日志 |
| 基于团队实战踩坑经验总结 |
|
|
四、高频问题排查
1. 抓不到包的核心诊断流程
- 1. 网络层验证:
- • 用ping 电脑IP确认手机与电脑连通性
- • 浏览器访问代理地址(如http://192.168.1.100:8888),检查代理是否生效
- 1. 证书有效性检查:
- • Android:进入「加密与凭据」查看证书是否为「系统级」
- • iOS:在「证书信任设置」确认对应证书已启用
- 1. App 防抓包检测:
- • 观察 APP 是否有网络中断、闪退现象
- • 用 Sniffmaster 检测是否存在证书指纹校验
2. 典型问题解决方案
- • 问题 1:HTTPS 显示 CONNECT 无内容原因:未开启 SSL 解密或域名未添加到 SSL 代理列表解决:Charles 中补充添加目标域名,格式为api.example.com``:*
- • 问题 2:Android 14 抓包失败原因:系统强化证书验证,第三方证书默认被拒解决:使用 Sniffmaster USB 抓包,或在 APP 清单文件添加android:networkSecurityConfig
- • 问题 3:抓包数据乱码原因:请求采用压缩编码或自定义加密解决:Charles 开启「Decode response」,若无效则需逆向 APP 加密算法
五、工具进阶技巧
1. Charles 高级功能
- • 请求重写:「Tools→Rewrite」实现参数自动替换,如修改 Token 有效期
- • 断点调试:右键请求选择「Breakpoints」,实时编辑请求体后发送
- • 性能分析:「Sequence」视图查看请求耗时,定位慢接口
2. 数据导出与分析
- • 导出格式:支持 JSON、CSV、XML,Charles 可直接生成接口文档
- • 联动分析:将 pcap 文件导入 Wireshark,用「统计→流量图」分析时序特征
总结
APP 抓包的核心是「工具适配场景」:常规调试用 Charles/Fiddler,加密场景用 Sniffmaster,底层诊断用 Wireshark。
文章来源:乌云安全
华盟君