6、抓包与网络分析:Charles/Fiddler配置HTTPS抓包、Burp Suite设置、TCP/UDP流量分析基础

说到移动App逆向,抓包分析是绕不开的一关。我个人习惯把抓包比作「给App装个窃听器」——你监听它跟服务器说了什么悄悄话,就能摸清它的通信逻辑。今天咱们就聊聊主流的抓包工具怎么配,以及TCP/UDP流量分析的基础思路。

6.1 为什么需要HTTPS抓包?

现在大部分App都强制走HTTPS,明文HTTP基本绝迹了。你想想看,如果App直接发明文,那攻击者随便在WiFi上嗅探一下就能拿到你的登录凭证,这谁受得了?所以苹果和谷歌都强制要求开发者用HTTPS。

但对我们逆向工程师来说,HTTPS加密了,我们就得想办法「解密」。说白了就是中间人攻击——让客户端信任我们的假证书,这样流量就能被截获并解密。嗯,这里要注意:你只能在你自己控制的设备上做这件事,别乱来。

核心原理: 抓包工具生成一个自签名CA证书 → 安装到手机/模拟器并信任 → 工具拦截客户端请求,用自己的证书与服务器建立连接 → 同时与客户端建立另一个连接 → 流量在工具这里被解密并展示。

6.2 Charles配置HTTPS抓包

Charles是我用得最多的工具,没有之一。它的界面清爽,功能也够用。配置步骤其实不复杂,但有几个坑我踩过,得跟你说道说道。

6.2.1 基础设置

  1. 打开Charles,点击菜单栏 Proxy → Proxy Settings,勾选 HTTP Proxy,端口默认8888。
  2. 勾选 SSL Proxying Settings,添加 *.* 表示抓取所有HTTPS流量。
  3. 手机连上同一WiFi,设置代理为电脑IP + 端口8888。

6.2.2 安装证书

这一步最容易出问题。我在项目中遇到过好几次,证书装上了但Charles还是抓不到包,后来发现是没在系统设置里「信任」这个证书。

# 电脑端操作
1. 点击 Help → SSL Proxying → Install Charles Root Certificate
2. 钥匙串访问中找到证书,设为「始终信任」

# 手机端操作(以iOS为例)
1. 浏览器访问 http://chls.pro/ssl
2. 下载并安装描述文件
3. 设置 → 通用 → 关于本机 → 证书信任设置 → 开启Charles证书开关
注意: Android 7.0以上默认不信任用户证书,需要把App的 network_security_config.xml 改成信任用户证书,或者用VirtualXposed等工具绕过。我当年调试一个银行App时卡在这步整整两天。

6.3 Fiddler配置HTTPS抓包

Fiddler跟Charles思路差不多,但它的脚本扩展能力更强。我个人习惯在需要写复杂规则时用Fiddler,平时还是Charles顺手。

6.3.1 开启HTTPS解密

  1. 打开Fiddler,点击 Tools → Options → HTTPS
  2. 勾选 Capture HTTPS CONNECTsDecrypt HTTPS traffic
  3. 选择 ...from remote clients only(只解密远程客户端流量)。

6.3.2 手机端配置

手机浏览器访问 http://你的电脑IP:8888,下载Fiddler根证书并安装。注意:Fiddler默认端口也是8888,跟Charles冲突,如果你两个都装,记得改一个端口。

对比项 Charles Fiddler
界面风格 macOS原生风格,简洁 Windows风格,功能按钮多
脚本扩展 弱,需用外部工具 强,内置FiddlerScript
证书管理 自动生成,一键安装 需手动导出安装
重放请求 支持,但操作略繁琐 支持,且可批量重放

6.4 Burp Suite设置

Burp Suite是安全测试的标配,抓包只是它的基础功能。我一般在做渗透测试时才用它,日常逆向还是Charles更轻量。

6.4.1 代理配置

1. 打开Burp,点击 Proxy → Proxy Settings
2. 添加监听端口(默认8080),勾选「支持HTTP/1和HTTPS」
3. 手机设置代理为电脑IP:8080
4. 浏览器访问 http://burp,下载CA证书
5. 安装并信任证书(步骤同Charles)

6.4.2 拦截与修改

Burp的强项在于可以拦截请求并实时修改。比如你想改一个请求参数看服务器怎么响应,直接在Intercept页面改完再放行就行。我经常用它来测试App的接口安全性——改个user_id看看能不能越权访问别人的数据。

小技巧: 在Burp的Repeater模块里,你可以反复发送同一个请求并微调参数,非常适合做接口fuzz测试。我曾经用这个功能发现过一个App的SQL注入漏洞,直接拿到了数据库里的用户密码哈希。

6.5 TCP/UDP流量分析基础

HTTP/HTTPS抓包只能覆盖应用层流量。如果App用了自定义协议,或者走的是TCP/UDP裸连接,那Charles和Burp就抓瞎了。这时候得用Wireshark或者tcpdump。

6.5.1 什么时候需要分析TCP/UDP?

  • App用了WebSocket或Socket.io(底层是TCP)
  • 游戏App用了UDP协议(比如王者荣耀的实时对战)
  • 自定义二进制协议,不走HTTP
  • DNS查询、NTP时间同步等系统级流量

6.5.2 Wireshark基础操作

Wireshark的界面乍一看很吓人,全是十六进制和乱七八糟的包。但你只要掌握几个过滤表达式,就能快速定位目标流量。

# 常用过滤表达式
ip.addr == 192.168.1.100    # 只看某个IP的流量
tcp.port == 443             # 只看443端口的TCP流量
udp.port == 53              # 只看DNS查询(UDP 53)
http.request.method == GET  # 只看HTTP GET请求
tcp contains "login"        # 查找TCP负载中包含"login"的包

6.5.3 实战:分析一个自定义协议

我记得有一次逆向一个IoT App,它跟设备通信用的是自定义TCP协议。Charles完全抓不到,因为不走HTTP。我只好用Wireshark抓包,发现数据包前4个字节是魔数(0xAA55),后面跟着长度字段和加密负载。

怎么分析的?

  1. 先过滤出目标IP和端口:ip.addr == 设备IP && tcp.port == 12345
  2. 看数据包长度分布,发现大部分包长度在64-128字节之间
  3. 用「Follow TCP Stream」功能看完整会话
  4. 发现魔数后,写个Python脚本解析后续字节
核心思路: TCP/UDP分析的关键是「找规律」。先看包长度、端口号、时间间隔,再深入看负载内容。如果负载是乱码,大概率是加密了,这时候就得结合静态分析找密钥。

6.6 知识体系总览

下面这张图总结了本章的核心逻辑,你一看就明白各个工具在什么场景下用。

抓包与网络分析知识体系 移动App网络分析 应用层 (HTTP/HTTPS) Charles Fiddler Burp Suite 传输层 (TCP/UDP) Wireshark tcpdump Python Scapy 核心思路:先判断协议类型 → 选择对应工具 → 配置证书/过滤条件 → 分析流量内容

6.7 避坑指南

最后分享几个我踩过的坑,你遇到了能少走弯路。

  • 证书装了对但抓不到包? 检查一下App有没有做SSL Pinning(证书绑定)。很多金融类App会校验服务器证书指纹,Charles的假证书会被拒绝。解决办法是用Frida hook掉证书校验函数,或者用JustTrustMe模块。
  • Wireshark抓了一堆包找不到目标? 先关掉所有无关App,只跑目标App。然后用 ip.addr == 目标IP 过滤,如果不知道IP,先抓个DNS包看看它解析了哪个域名。
  • UDP包全是乱码? 大概率是加密了。这时候别在流量分析上死磕,回去反编译App找加密算法和密钥。我遇到过用AES-ECB加密的UDP协议,密钥就硬编码在so文件里。
  • 模拟器抓包总断连? 模拟器的网络栈跟真机不一样,有些App会检测模拟器环境。我建议用真机+USB共享网络的方式抓包,稳定很多。
我的经验: 抓包不是目的,理解通信逻辑才是。拿到流量后,先画个时序图,把请求-响应的顺序和参数变化理清楚,比盯着十六进制看半天有用得多。

公众号:蓝海资料掘金营,微信deep3321