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. 1. 代理设置:菜单栏「Proxy→Proxy Settings」,端口默认 8888,勾选「Enable transparent HTTP proxying」
  2. 2. HTTPS 解密:进入「SSL Proxying Settings」,点击 Add 输入*:*(全局捕获),Windows 需安装系统证书
  3. 3. 获取 IP:Windows 执行ipconfig查 IPv4,macOS 用ifconfig | grep "inet "
(2)Android 端配置(分系统版本)
  • • Android 7 以下
  1. 1. 连接同一 Wi-Fi,长按网络进入「修改网络→高级选项」
  2. 2. 手动代理:主机名填电脑 IP,端口 8888
  3. 3. 浏览器访问http://chls.pro/ssl下载证书,进入「设置→安全→安装证书」
  • • Android 7 以上:系统默认不信任用户证书,需二选一:
    • • Root 设备:将证书移动至/system/etc/security/cacerts/目录
    • • 非 Root:修改 APP 的network_security_config.xml,添加信任配置
(3)iOS 端配置
  1. 1. Wi-Fi 设置:点击网络→「配置代理」→手动输入服务器 IP 和端口
  2. 2. 证书安装:Safari 访问http://chls.pro/ssl,在「设置→通用→VPN 与设备管理」安装描述文件
  3. 3. 信任证书:进入「关于本机→证书信任设置」,启用 Charles 证书

3. 无电脑抓包方案

  • • Android:Packet Capture
  1. 1. 无需 Root,安装后点击开始按钮,系统自动创建 VPN
  2. 2. 选择目标 APP,捕获完成后可直接查看解密的 HTTPS 请求
  • • iOS:Stream
  1. 1. App Store 下载后,按提示安装证书并信任
  2. 2. 支持按 APP 筛选流量,自动解析 JSON、XML 响应数据

三、进阶突破:加密与特殊场景处理

1. SSL Pinning 绕过实战

金融、电商类 APP 常用证书锁定阻止抓包,核心方案:

(1)工具组合法
  • • Sniffmaster:真机通过 USB 连接,无需代理和证书,自动绕过 Pin 验证
  • • 搭配 Wireshark:用 Sniffmaster 捕获 TCP 流,Wireshark 分析握手过程
(2)Frida 动态 Hook(技术向)
  1. 1. 安装 Frida:pip install frida-tools
  2. 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. 1. 执行命令:frida -U -f 包名 -l hook.js --no-pause

2. 自定义协议解析

  • • Protobuf 协议
  1. 1. 用 Wireshark 捕获二进制包,导出为 pcap 文件
  2. 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. 1. 网络层验证
  • • 用ping 电脑IP确认手机与电脑连通性
  • • 浏览器访问代理地址(如http://192.168.1.100:8888),检查代理是否生效
  1. 1. 证书有效性检查
  • • Android:进入「加密与凭据」查看证书是否为「系统级」
  • • iOS:在「证书信任设置」确认对应证书已启用
  1. 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。

文章来源:乌云安全

本文来源乌云安全,经授权后由华盟君发布,观点不代表华盟网的立场,转载请联系原作者。

发表回复