真机抓包实战:Burp Suite配置Android/iOS代理与HTTPS解密
1. 项目概述:为什么要在真机上抓包?
做安全测试或者逆向分析,抓包是第一步,也是最基础的一步。很多朋友习惯在模拟器里操作,觉得方便,但模拟器终究是模拟器,它和真机的环境差异巨大。很多APP,特别是涉及金融支付、社交、电商的,都做了非常严格的运行环境检测,在模拟器里要么直接闪退,要么核心功能被禁用,你根本抓不到想要的数据流。更别提微信小程序了,它的运行环境高度依赖微信客户端,在模拟器里调试的局限性更大。
所以,真机抓包是绕不开的“硬骨头”。这次要聊的,就是如何用安全圈最经典的Burp Suite,在Android和iOS两大移动平台的真实设备上,完成对APP和微信小程序的流量捕获。这不仅仅是配置个代理那么简单,里面涉及到证书安装、系统信任、网络配置、以及应对各种反抓包机制的技巧。我遇到过太多坑,从证书不被信任导致HTTPS流量全是乱码,到APP检测到代理直接拒绝连接,每一步都可能让你卡住半天。接下来,我会把整个流程掰开揉碎,从原理到实操,尤其是那些容易踩坑的细节,都详细过一遍。
2. 核心原理与前置准备
在开始动手之前,必须搞清楚几个核心概念,不然配置错了都不知道问题出在哪。
2.1 抓包的本质:中间人代理
无论是Burp Suite、Fiddler还是Charles,其抓取HTTPS流量的核心原理都是“中间人攻击”。简单来说,你的手机不再直接连接目标服务器,而是先把所有网络请求发送到你电脑上运行的抓包工具(即代理服务器),由抓包工具转发请求给服务器,并将服务器的响应先截获再返回给手机。
为了实现这个,需要两步:
- 流量转向:让手机的流量经过你的电脑。这通过为手机配置Wi-Fi代理来实现。
- HTTPS解密:普通的HTTP流量是明文的,可以直接查看。但如今几乎全是HTTPS(加密的),抓包工具需要“冒充”目标服务器,与手机建立SSL/TLS连接,同时再以客户端的身份与真实服务器建立另一个SSL/TLS连接。这就要求手机必须信任抓包工具颁发的“假”证书。
2.2 工具与环境准备清单
工欲善其事,必先利其器。以下是必须准备好的东西,少一样都可能进行不下去。
1. 软件工具
- Burp Suite:主角。推荐使用Professional版,Community版功能受限较多。确保已安装并可以正常运行。
- 一台电脑:作为代理服务器。Windows、macOS、Linux均可,但需要与手机在同一局域网。
- 一部Android手机:建议系统版本在Android 7.0以上,但低于Android 7.0和高于Android 7.0的配置方法有重大区别,后面会详述。
- 一部iOS手机:系统版本建议在iOS 10以上。需要能访问App Store以下载证书描述文件。
2. 网络环境
- 稳定的局域网:电脑和手机必须连接在同一个Wi-Fi网络下。切记,不要使用任何公共Wi-Fi或需要网页认证的Wi-Fi(如酒店、机场网络),这类网络通常会干扰或禁止代理设置,导致连接失败。最稳妥的方式是使用你自己的路由器,或者用电脑开一个热点给手机连接。
3. 关键信息获取
- 电脑的局域网IP地址:这是手机代理要指向的地址。
- Windows:在命令提示符输入
ipconfig,查看“无线局域网适配器 WLAN”或“以太网适配器”下的IPv4 地址。 - macOS/Linux:在终端输入
ifconfig或ip addr,找到对应网口的inet地址。
- Windows:在命令提示符输入
- Burp Suite代理监听端口:默认是
8080。你可以在Burp的Proxy->Options->Proxy Listeners中查看和修改。
准备好这些,我们就可以进入实战配置环节了。先从相对开放的Android系统开始。
3. Android真机抓包全流程解析
Android的抓包流程因系统版本产生了分水岭,核心区别在于证书的安装位置,这直接决定了系统是否信任你安装的证书,从而决定能否解密HTTPS流量。
3.1 配置Burp Suite代理监听
首先,确保Burp能正确接收来自手机的流量。
- 打开Burp Suite,进入
Proxy->Options标签页。 - 找到
Proxy Listeners部分,确保有一个监听器在运行(通常默认的127.0.0.1:8080就是)。我们需要让它监听来自局域网的连接。 - 点击默认监听器对应的
Edit按钮。 - 在
Binding标签页,将Bind to address从Loopback only改为All interfaces。这一步至关重要,它允许Burp接受来自任何网络接口(包括你的无线网卡)的连接,而不仅仅是本机回环地址。 - 点击
OK保存。此时,Burp的代理服务器就已经在你的电脑IP:8080上监听了。
注意:有些电脑防火墙可能会阻止8080端口的入站连接。如果后续手机连接失败,请暂时关闭防火墙或添加一条允许8080端口的入站规则。
3.2 手机网络代理配置
接下来,告诉手机把流量发到你的电脑。
- 让手机连接上与电脑相同的Wi-Fi。
- 进入手机的
设置->WLAN,长按当前连接的Wi-Fi网络,选择修改网络或高级选项。 - 将
代理设置为手动。 代理服务器主机名填写你之前查到的电脑局域网IP。代理服务器端口填写8080(或你在Burp中设置的其他端口)。- 保存设置。
此时,手机的所有(非系统级)HTTP流量应该已经流向Burp。你可以在Burp的Proxy->Intercept标签页,点击Intercept is on按钮,然后在手机浏览器访问一个HTTP网站(如http://neverssl.com),看看请求是否被截获。
3.3 安装并信任Burp CA证书
能抓到HTTP只是第一步,HTTPS才是重头戏。我们需要让手机信任Burp颁发的证书。
第一步:从Burp导出证书
- 在手机浏览器中访问
http://burpsuite或http://电脑IP:8080。注意是HTTP协议。 - 页面右上角会有一个
CA Certificate的链接,点击它下载证书文件。文件通常名为cacert.der。
第二步:安装证书(分版本操作)
这里是关键,根据你的Android系统版本选择路径:
Android 7.0 (Nougat) 及以下版本: 相对简单。下载证书后,系统通常会提示你为证书命名(如“Burp CA”),然后要求你设置锁屏密码(如果尚未设置)以完成安装。安装后,证书会被放置在
受信任的凭据->用户标签页下。至此,大部分APP的HTTPS流量都可以被解密了。Android 8.0 (Oreo) 及以上版本: 这是巨变。从Android 7.0开始,Google引入了“网络安全配置”和更严格的证书信任机制。默认情况下,用户安装的证书不再被APP信任,除非APP显式地在其配置中声明信任用户证书。 因此,对于高版本Android,我们有两种主流方法:
- 方法A:将证书安装到系统级(需Root):这是最彻底的方法。需要将下载的
.der证书文件转换为.pem格式,然后通过ADB命令或Root文件管理器将其放置到/system/etc/security/cacerts/目录下,并修改权限。完成后,证书会出现在受信任的凭据->系统标签页,所有APP都会信任它。但这需要手机已获取Root权限,对大多数用户门槛较高。 - 方法B:使用低版本Android模拟器或旧手机:这是最实用的妥协方案。准备一台系统版本在Android 7.0以下的备用测试机,或者使用Android 7.0以下的模拟器镜像。在测试机上安装用户证书即可全局生效,非常适合进行常规的抓包测试和分析。
- 方法C:针对特定APP配置(需可修改APK):如果你有APP的源码或能对其进行重打包,可以修改其网络安全配置,使其信任用户证书。这对普通抓包需求来说过于复杂。
- 方法A:将证书安装到系统级(需Root):这是最彻底的方法。需要将下载的
实操心得:对于日常安全测试,我强烈建议备一部系统版本在Android 6.0的旧手机或模拟器专用。它能避开高版本的系统级证书限制,省去Root的麻烦和风险,通用性最强。对于必须在高版本真机上测试的情况(如测试最新系统兼容性),则可能需要结合Root或使用VirtualXposed等虚拟环境来绕过限制,但那又是另一个复杂课题了。
安装并信任证书后,再次用手机浏览器访问一个HTTPS网站(如https://www.baidu.com),然后在Burp的Proxy->HTTP history中查看,应该能看到明文请求和响应,而不是一堆乱码或Tunnel to字样。
4. iOS真机抓包全流程解析
iOS的抓包流程相对统一,但由于苹果的封闭性,证书安装和信任的步骤略有不同,且对微信小程序有特殊之处。
4.1 配置Burp监听与手机代理
这部分与Android类似:
- Burp Suite配置监听
All interfaces,端口8080。 - iOS手机连接同一Wi-Fi。
- 进入
设置->无线局域网,点击当前Wi-Fi右侧的i信息图标。 - 滑动到最底部,找到
配置代理,选择手动。 - 服务器填写电脑IP,端口填写8080,保存。
4.2 安装并完全信任Burp CA证书
这是iOS抓包成功的关键,步骤比Android多一步“完全信任”。
- 在iOS的Safari浏览器中,访问
http://电脑IP:8080。 - 同样点击
CA Certificate下载描述文件。系统会提示“已下载描述文件”。 - 进入
设置->通用->VPN与设备管理(或描述文件),你会看到一个名为“PortSwigger CA”或类似的描述文件,点击它,然后选择安装。可能需要输入手机锁屏密码。 - 关键一步:启用完全信任。仅仅安装还不够,必须手动开启完全信任。
- 进入
设置->通用->关于本机。 - 滑动到最底部,点击
证书信任设置。 - 在“针对根证书启用完全信任”列表中,找到你刚刚安装的“PortSwigger CA”证书,将其开关打开。
- 进入
- 完成以上步骤后,用Safari访问一个HTTPS网站测试。如果Burp能解密流量,说明证书配置成功。
4.3 微信小程序抓包的特殊处理
微信小程序由于其沙盒机制和网络请求库的实现,抓包需要额外注意:
- 确保微信APP信任系统代理:iOS系统下,大部分APP默认会遵循系统的全局代理设置,微信通常也在此列。但为了确保万一,可以先测试微信内打开网页的流量是否能被Burp捕获。
- 处理证书绑定:一些小程序可能会使用证书绑定技术。如果配置正确后,小程序仍无法联网或报错,很可能就是它校验了服务器证书,而Burp的“假”证书无法通过校验。对于这种情况,常规的代理抓包可能失效,需要更高级的动态调试或逆向手段,这已超出基础抓包教程范围。
- 关注WebSocket流量:小程序大量使用WebSocket进行实时通信。在Burp的
Proxy->Options中,确保Intercept WebSockets messages是勾选状态,然后在WebSockets history标签页可以查看这些消息。
注意事项:iOS系统升级后,有时会重置证书信任设置。如果某天突然抓不到HTTPS包了,记得第一时间回来检查
设置->通用->关于本机->证书信任设置里的开关是否还开着。
5. 抓包实战中的高级技巧与问题排查
基础配置只是开始,实战中会遇到各种“妖魔鬼怪”。下面分享一些提升成功率和效率的技巧,以及常见问题的排查思路。
5.1 应对APP的代理检测与SSL Pinning
越来越多的APP,特别是金融类和大型互联网公司的产品,会采用各种反抓包技术:
- 代理检测:APP启动时检测系统是否设置了代理。如果检测到,可能会拒绝发送网络请求或展示“网络环境不安全”的提示。
- 应对方法:
- 尝试使用透明代理模式(需要路由器支持或使用VPN软件将流量导入Burp),但这比较复杂。
- 使用基于Hook的绕过工具,如针对Android的
JustTrustMe模块(需Xposed或LSPosed环境),或使用ProxyDroid等APP实现全局代理而不修改系统Wi-Fi设置。对于iOS,可以使用Shadowrocket或Surge等网络工具配置代理,有时能绕过检测。
- 应对方法:
- SSL证书绑定:APP内置了真正服务器的证书或公钥,在建立SSL连接时进行比对,如果发现证书不是它认识的(比如Burp的证书),就直接断开连接。
- 应对方法:这是最难绕过的一类。通常需要逆向APP,找到进行证书校验的代码逻辑并修改它(俗称“砸壳”和“打补丁”),或者使用Frida、Xposed等动态注入框架,在运行时Hook掉证书验证的函数。这属于移动安全逆向的中高级范畴,需要一定的逆向工程基础。
5.2 精准过滤与高效分析
当所有流量都流向Burp时,HTTP history可能会被各种图片、脚本、统计上报请求淹没。如何快速找到目标?
- 使用Target Scope:
- 在Burp的
Target->Scope标签页,添加你的目标域名或URL前缀。例如,添加*.targetapp.com。 - 然后,在
Proxy->Options->Intercept Client Requests中,勾选And URL Is in target scope。这样,Burp就只会拦截你关心的目标请求,极大提升效率。
- 在Burp的
- 利用Filter:
- 在
Proxy->HTTP history页面,顶部有强大的过滤器。你可以根据状态码、请求方法、文件类型、关键词等进行过滤。例如,过滤MIME type为JSON或XML的,快速找到API接口。
- 在
- 关注
/api/、/v1/等路径:现代APP的接口通常有规律的路径,多关注这些路径下的请求。
5.3 常见问题速查与解决
下面是一个快速排查问题清单,当你抓包失败时,可以按顺序检查:
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 手机无法上网 | 1. 电脑IP或端口填错。 2. 电脑防火墙阻止。 3. Burp代理未启动或未监听所有接口。 | 1. 核对IP和端口。 2. 关闭防火墙或放行端口。 3. 检查Burp Proxy Listeners状态,确保绑定到All interfaces。 |
HTTP请求可见,HTTPS全是Tunnel to或乱码 | 1. 证书未安装。 2. 证书已安装但未受信任(Android高版本/ iOS未完全信任)。 3. APP使用了SSL Pinning。 | 1. 重新下载安装证书。 2. Android检查证书位置(用户/系统),iOS检查“证书信任设置”。 3. 尝试使用绕过SSL Pinning的工具。 |
| 部分APP无法联网或提示网络错误 | 1. APP检测到代理并禁用。 2. 该APP使用了仅限系统证书的网络安全策略。 | 1. 尝试关闭手机Wi-Fi代理,使用透明代理或Hook方式。 2. 对于Android高版本,考虑Root后安装系统证书或使用低版本测试机。 |
| Burp收不到任何手机流量 | 1. 手机代理配置未保存或生效。 2. 电脑和手机不在同一网段。 3. 使用了需要网页认证的Wi-Fi。 | 1. 重启手机Wi-Fi或重启手机。 2. 确认电脑和手机IP前三位相同(如都是192.168.1.x)。 3. 换用路由器Wi-Fi或电脑开热点。 |
| 微信小程序页面白屏或请求失败 | 1. 微信未走系统代理(可能性小)。 2. 小程序服务器使用了证书绑定。 | 1. 确认其他网页请求在Burp中可见。 2. 对于证书绑定,常规抓包方法可能无效,需研究逆向。 |
5.4 保持连接稳定的建议
- 固定电脑IP:在路由器设置中,为你电脑的MAC地址分配一个静态IP(DHCP保留地址),这样电脑IP就不会变,无需每次重新配置手机代理。
- 使用电脑移动热点:这是最稳定、干扰最少的方式。用电脑创建一个移动热点,让手机连接这个热点。此时电脑本身就是一个路由器,代理设置非常纯净。
- 适时关闭拦截:不需要的时候,记得把Burp
Proxy->Intercept的拦截功能关掉(Intercept is off),否则所有被拦截的请求都会挂起,导致APP卡死。
抓包本身是一项基础但极其重要的技能,是真机测试、漏洞挖掘、协议分析的起点。整个过程就像一场侦探游戏,你需要耐心地布置好“监控点”(代理),取得“监听许可”(安装证书),然后才能开始观察和分析“嫌疑人”(APP)的“通信记录”(网络流量)。每一次成功的配置和解密,都是对网络原理和安全机制更深一层的理解。遇到问题别灰心,按照上面的步骤和排查清单一步步来,大部分障碍都能被清除。最后记住,在合法授权的范围内进行测试,这是所有安全工作的前提。
