Burp Suite Pro 2.1抓取微信小程序与APP HTTPS流量实战指南
1. 项目概述:为什么我们需要抓取微信小程序和APP的HTTPS流量?
在移动应用安全测试、逆向分析或者仅仅是出于好奇想看看某个功能背后的数据交互时,我们常常会遇到一个难题:如何捕获和分析微信小程序或原生APP发出的网络请求?尤其是现在,几乎所有的应用都默认使用HTTPS协议进行通信,这层加密保护了用户数据,但也给开发者、测试人员和安全研究者设置了一道屏障。直接使用浏览器开发者工具?对不起,小程序和APP是独立的客户端。用普通的网络嗅探工具?面对HTTPS,你看到的只是一堆加密的乱码。
这就是Burp Suite Pro这类专业工具大显身手的地方。它作为一个“中间人”(Man-in-the-Middle, MITM),能够在你(客户端)和目标服务器之间架起一座桥梁,解密并展示所有经过的HTTPS流量。对于微信小程序和APP来说,由于其运行环境的特殊性(如小程序在微信的沙箱内,APP有证书绑定等机制),抓包过程比抓取普通网页流量要复杂得多。网上教程虽多,但往往语焉不详,或者只针对特定版本,导致新手跟着操作频频踩坑。今天,我就以一个老测试员的身份,手把手带你走通用Burp Suite Pro 2.1抓取微信小程序和APP HTTPS流量的完整流程,并分享那些只有踩过坑才知道的细节。
2. 环境准备与核心原理拆解
在动手之前,我们必须把“战场”打扫干净,并理解我们即将使用的“武器”是如何工作的。盲目操作只会导致一连串的“unexpected status 404 not found”或者连接失败。
2.1 工具清单与版本选择
工欲善其事,必先利其器。以下是本次实操的核心工具清单,版本非常关键,不同版本间配置可能有差异。
- Burp Suite Professional 2.1:这是我们的主力工具。选择Pro版本是因为社区版(Community)功能受限,尤其在项目管理和一些高级扫描功能上。2.1是一个相对稳定且功能完善的版本。确保你从官方或可信渠道获取。
- 一台测试用电脑:作为Burp Suite的运行主机和代理服务器。操作系统Windows、macOS、Linux均可,本文以Windows为例,但原理通用。
- 一部测试用安卓手机:用于测试APP和微信小程序。强烈建议使用真机而非模拟器。许多模拟器(如部分版本的雷电)网络架构特殊,可能导致代理设置失败。手机最好能获取Root权限,这对于处理证书绑定(SSL Pinning)至关重要,但非Root也有绕过方法,后文会详述。
- 稳定的网络环境:确保电脑和手机连接在同一个局域网(如同一个Wi-Fi)下。这是手机流量能经过电脑代理的基础。
2.2 HTTPS抓包的核心:中间人攻击原理
为什么Burp能解密HTTPS?这需要理解HTTPS和中间人攻击的基本原理。
HTTPS = HTTP + SSL/TLS。TLS握手过程中,客户端会验证服务器证书的合法性(是否由可信机构签发、域名是否匹配等)。在正常访问时,你的浏览器信任如“DigiCert”、“GlobalSign”等根证书颁发机构(CA)。
Burp Suite扮演了一个“流氓CA”的角色。当你将设备代理指向Burp时:
- Burp会动态生成一个针对任何访问域名的证书。
- 为了让你的设备(手机或电脑浏览器)信任这些伪造的证书,你必须先手动安装Burp独有的“CA证书”到设备的受信任根证书存储区。
- 此后,当手机上的APP发起HTTPS请求时,它会连接到Burp,Burp用自己的CA证书签发一个假证书给手机,手机因为信任了Burp的CA,便接受了这个假证书,从而与Burp建立了加密连接。
- 同时,Burp以客户端的身份,用真实的服务器证书与目标服务器建立另一个加密连接。
- 于是,Burp坐在中间,左手解密来自手机的流量,右手加密发往服务器的流量,实现了流量的明文窥探和修改。
注意:这个过程仅用于安全测试和学习目的,在未授权的系统上进行此类操作是非法且不道德的。请务必在你拥有完全控制权的设备(你自己的手机、你自己的后端服务)上进行测试。
2.3 微信小程序与APP抓包的特殊性
理解了基础原理,我们还要面对两个“刺头”:
微信小程序:它运行在微信的沙盒环境中,其网络请求并非由系统网络栈直接发出,而是经由微信客户端转发。这意味着:
- 系统级的代理设置(如设置Wi-Fi的HTTP代理)可能不生效。
- 微信客户端自身可能有一套证书校验逻辑。
- 小程序代码中可能使用了强校验,包括证书绑定。
安卓APP:现代安卓APP普遍采用了安全加固措施:
- 证书绑定(SSL Pinning):APP在代码中“硬编码”了它信任的服务器证书或公钥。即使你安装了Burp的CA证书,APP也会因为检测到证书不匹配而拒绝连接,抛出诸如“网络错误”、“证书验证失败”等提示,在Burp里你可能会看到
Client TLS handshake failed之类的错误。 - Android 7.0+ 的网络安全配置:从Android 7.0开始,系统不再信任用户安装的CA证书(除非APP显式配置允许)。这给非Root设备抓包带来了巨大挑战。
- 证书绑定(SSL Pinning):APP在代码中“硬编码”了它信任的服务器证书或公钥。即使你安装了Burp的CA证书,APP也会因为检测到证书不匹配而拒绝连接,抛出诸如“网络错误”、“证书验证失败”等提示,在Burp里你可能会看到
面对这些,我们的策略是:先搞定基础代理和证书安装,再针对性地解决证书绑定和网络配置问题。
3. Burp Suite基础配置与电脑端证书安装
让我们先从电脑端开始,把Burp Suite的代理服务搭建起来。
3.1 启动Burp并配置代理监听
- 启动Burp Suite Professional 2.1。首次运行可能会让你选择项目类型,选择“Temporary project”临时项目即可。
- 进入主界面后,切换到“Proxy”标签页,然后进入“Options”子标签。
- 找到“Proxy Listeners”部分。这里应该已经有一个默认的监听器,运行在
127.0.0.1:8080。我们需要确保它正在运行(Running状态为Yes),并且支持所有接口。 - 点击默认监听器,选择“Edit”。在“Binding”标签页,将“Bind to address”从“Loopback only”改为“All interfaces”。这一步至关重要,它允许同一网络下的其他设备(如你的手机)连接到这个代理。
- 在“Request handling”标签页,确保“Redirect to host”和“Redirect to port”选项没有勾选,除非你有特殊的重定向需求。
- 点击“OK”保存。现在,Burp的代理服务已经监听在你电脑的
8080端口,并准备好接收来自局域网的流量。
3.2 导出并安装Burp的CA证书到电脑
为了让Burp能解密HTTPS,我们需要先让电脑本身信任它。这一步主要是为了后续在浏览器中测试代理是否工作正常。
- 打开浏览器(以Chrome为例),将代理设置为
127.0.0.1:8080。你可以使用SwitchyOmega这类插件,或者直接在系统网络设置中配置。 - 访问任何一个HTTP网站(如
http://burp),Burp会拦截这个请求。放行后,在浏览器地址栏输入http://burp/cert或http://127.0.0.1:8080/cert。这是一个Burp内置的页面,用于下载其CA证书。 - 点击“CA Certificate”按钮,将证书文件(
cacert.der)下载到本地。 - 将证书文件后缀改为
.cer(方便系统识别),然后双击安装。- Windows:在证书导入向导中,选择“将所有的证书都放入下列存储”,点击“浏览”,选择“受信任的根证书颁发机构”,然后完成导入。
- macOS:使用钥匙串访问(Keychain Access)导入,并双击证书,在“信任”设置中,将“使用此证书时”设置为“始终信任”。
- 安装完成后,重启浏览器。现在,通过Burp代理访问HTTPS网站(如
https://example.com),浏览器应该不会弹出证书警告,并且在Burp的“HTTP history”中能看到明文的请求和响应。
4. 手机端代理与证书安装实战
这是最关键的一步,目标是让手机的流量流向电脑的Burp,并让手机系统信任Burp的CA证书。
4.1 配置手机Wi-Fi代理
- 确保手机和电脑连接在同一个Wi-Fi网络下。
- 在手机上,进入当前Wi-Fi网络的详细设置(通常是长按Wi-Fi名称 -> 修改网络)。
- 将代理设置为“手动”。
- 代理服务器主机名:填写你电脑在局域网内的IP地址。在Windows上,可以在命令提示符输入
ipconfig查看(通常是192.168.x.x或10.0.x.x)。 - 代理服务器端口:填写Burp监听的端口,默认为
8080。
- 代理服务器主机名:填写你电脑在局域网内的IP地址。在Windows上,可以在命令提示符输入
- 保存设置。
4.2 安装Burp CA证书到手机
这是让手机信任Burp解密流量的核心步骤,不同安卓版本操作差异很大。
通用方法(适用于大部分情况):
- 在手机浏览器中,访问
http://<电脑IP>:8080/cert。例如http://192.168.1.100:8080/cert。 - 点击下载证书文件。文件通常名为
cacert.der或PortSwiggerCA.cer。 - 系统会提示你安装证书。你需要为证书命名(如“BurpCA”),并选择用途为“VPN和应用”或根据系统提示选择。
- 安装完成后,你可以在系统的“加密与凭据”或“安全”设置中的“受信任的凭据” -> “用户”标签下找到它。
针对Android 7.0及以上版本(非Root设备)的额外难题:如原理所述,Android 7.0+默认不信任用户安装的CA证书。这会导致很多APP(特别是那些使用了网络安全配置的)无法抓包。解决方法有几种,按推荐顺序排列:
- 方法A:将Burp CA证书安装到系统证书区(需Root):这是最彻底的方法。需要将证书文件转换为
PEM格式,重命名为特定的哈希值,并放入/system/etc/security/cacerts/目录,并修改权限为644。完成后,Burp CA证书会出现在“受信任的凭据” -> “系统”标签下,对所有APP生效。 - 方法B:修改APP的APK包(重打包):如果APP是自己开发的或者可以拿到未签名的APK,可以反编译APK,在其
AndroidManifest.xml中指定一个自定义的网络安全配置文件(network_security_config.xml),在其中允许用户证书。然后重新打包并签名。此方法无需Root,但操作复杂,且对已签名的商业APP无效。 - 方法C:使用虚拟系统或特定抓包APP:一些工具如
VirtualXposed、太极配合JustTrustMe或SSLUnpinning模块,可以在非Root环境下绕过部分证书绑定。此外,像HttpCanary、Packet Capture等手机端抓包APP,有时能利用系统VPN权限捕获到部分流量,可以作为Burp的补充。
实操心得:对于个人测试,如果条件允许,优先考虑使用一台已Root的、系统版本较低(如Android 6.0)的测试机,可以省去大量麻烦。如果只能用高版本非Root手机,则重点尝试方法C中的抓包APP,它们有时能抓到Burp抓不到的流量。
5. 抓取微信小程序HTTPS流量详解
配置好手机代理和证书后,我们终于可以挑战微信小程序了。
5.1 基础抓取步骤与常见问题
- 确保手机代理已正确指向Burp,且Burp CA证书已安装到“用户”凭据区。
- 打开微信,任意打开一个小程序。
- 观察Burp的“Proxy” -> “Intercept”标签页和“HTTP history”标签页。
理想情况:你会在“HTTP history”中看到大量来自https://servicewechat.com等微信相关域名的请求,以及小程序自身业务服务器的请求。这些请求和响应都应该是明文可读的。
但更可能遇到的情况是:什么流量都没有,或者只有零星的非HTTPS流量。
问题排查:
- 检查代理连通性:在手机浏览器访问
http://burp,看Burp能否拦截到这个请求。如果不能,说明手机到Burp的网络代理不通,检查IP和端口,关闭电脑防火墙或添加入站规则。 - 检查证书信任:在手机浏览器访问一个HTTPS网站(如
https://example.com),看是否有证书警告。如果有,说明Burp CA证书未正确安装或不被信任。 - 微信的特殊性:微信可能在其Native代码中进行了证书校验。即使系统信任了用户证书,微信自身也可能不认。
5.2 解决微信及小程序的证书校验问题
当基础步骤无效时,我们需要怀疑微信客户端或小程序代码本身做了证书绑定。
- 尝试关闭微信的TLS校验(如果支持):极少数情况下,某些微信开发版或特定版本可能有关闭校验的选项,但正式版通常没有。
- 使用虚拟环境/模块:这是目前非Root环境下比较可行的方案。
- 在手机上安装
VirtualXposed或太极框架。 - 在该框架内安装微信。
- 在框架内安装
JustTrustMe或SSLUnpinning模块并启用。 - 在虚拟框架内打开微信和小程序,此时模块会尝试Hook掉证书校验的逻辑。
- 在手机上安装
- Root环境下使用Frida脚本:如果你有Root权限,这是最强大的方法。Frida是一个动态插桩工具,可以注入脚本来绕过SSL Pinning。
- 在电脑上安装Frida和
frida-server到手机。 - 运行一个通用的禁用SSL Pinning的脚本,例如针对多种框架(OkHttp, Apache HttpClient等)的脚本。
- 启动微信,脚本会自动生效,此时再通过Burp就能看到流量。
- 在电脑上安装Frida和
注意事项:绕过证书校验可能违反微信的用户协议,并存在安全风险。请仅在你自己控制的测试环境和用于合法安全评估目的下进行。此外,微信的加固和更新非常频繁,上述方法可能随着版本更新而失效,需要寻找新的绕过技术。
6. 抓取安卓APP HTTPS流量与对抗证书绑定
抓取普通APP的流程与小程序类似,但核心矛盾更集中在**证书绑定(SSL Pinning)**上。在Burp中,你可能会遇到连接直接断开、收到Client TLS handshake failed错误,或者在APP内看到“网络连接失败”的提示。
6.1 识别证书绑定类型
首先需要判断APP使用了哪种绑定方式:
- 证书绑定:将具体的证书文件(
.cer)打包在APP资源中。 - 公钥绑定:只存储服务器证书的公钥信息。
6.2 绕过证书绑定的实战方法
方法一:使用反编译工具定位并修改(静态分析)
- 使用
apktool、jadx-gui等工具反编译目标APK。 - 搜索与SSL验证相关的关键词,如
X509TrustManager,checkServerTrusted,CertificatePinner,pin等。 - 找到校验代码后,通常采用“暴力破解”法:修改smali代码或直接修改
AndroidManifest.xml,让校验函数直接return(即不做任何校验就通过)。然后重新打包并签名安装。 - 缺点:操作复杂,对加固的APK无效,且每次APP更新都需要重新操作。
方法二:使用Frida进行动态Hook(动态分析,需Root)这是安全测试中最常用的高效方法。Frida可以在APP运行时,动态修改内存中的函数行为。
- 准备一个Frida脚本,例如:
// 示例:绕过常见的OkHttp3的CertificatePinner Java.perform(function() { var CertificatePinner = Java.use("okhttp3.CertificatePinner"); CertificatePinner.check.overload('java.lang.String', '[Ljava.security.cert.Certificate;').implementation = function(p0, p1) { console.log("[*] Bypassing OkHttp3 CertificatePinner for host: " + p0); // 直接不执行任何检查,相当于注释掉了原函数 }; }); - 在电脑上执行命令:
frida -U -f com.example.app -l bypass_ssl_pin.js --no-pause - 脚本注入成功后,再通过Burp代理操作APP,即可看到被解密的HTTPS流量。
- 优点:无需修改APK文件,通用性强,可以针对不同框架编写或寻找现成脚本。
方法三:使用基于Xposed的模块(非Root需虚拟环境)与处理微信类似,将目标APP和JustTrustMe等模块一同安装在VirtualXposed或太极中运行。模块会尝试自动Hook多种网络库的校验函数。
方法四:将Burp证书置为系统证书(需Root)如前文4.2节方法A所述,这是最根本的解决方案之一。一旦Burp CA成为系统证书,很多基于系统证书库进行校验的绑定方式会直接失效,因为Burp签发的证书现在也被系统认为是合法的。
7. 高级技巧与疑难杂症排查实录
即使按照上述步骤操作,你可能还是会遇到各种光怪陆离的问题。这里记录一些我踩过的坑和解决方案。
7.1 Burp抓不到任何包或连接不稳定
- 症状:手机代理设置正确,但Burp的History一片空白,或者流量时有时无。
- 排查:
- 关闭Burp的拦截:确保“Proxy” -> “Intercept”是
Intercept is off状态。开着拦截会让流量暂停,如果没在Burp里放行,手机端就会一直等待。 - 检查防火墙:电脑的防火墙可能阻止了
8080端口的入站连接。在Windows Defender防火墙或第三方防火墙软件中,为Java(Burp)或端口8080添加入站规则,允许TCP连接。 - 检查Wi-Fi的隔离功能:有些路由器或企业级Wi-Fi开启了“客户端隔离”功能,阻止了局域网内设备间的通信。尝试更换网络或关闭此功能(在家用路由器中通常叫“AP隔离”)。
- 尝试其他端口:有时
8080端口被其他程序占用。在Burp的Proxy Listeners中新建一个监听器,使用其他端口如8088、8888,并相应修改手机代理设置。
- 关闭Burp的拦截:确保“Proxy” -> “Intercept”是
7.2 HTTPS网站显示证书错误或连接被重置
- 症状:手机浏览器访问HTTPS网站提示不安全,或APP直接无法连接。
- 排查:
- 确认证书安装位置:对于Android 7.0+,确保已尝试将证书安装为系统证书(Root)或使用虚拟环境方案。仅仅用户证书对很多APP无效。
- 检查证书是否过期:Burp生成的CA证书默认有效期很短。去
Proxy->Options->Import / export CA certificate中查看或重新导出安装。 - 目标服务器端校验:极少数情况下,服务器会校验客户端的证书(双向TLS),这种情况Burp作为中间人无法直接处理,需要将客户端的真实证书导入Burp,这属于更高级的配置。
7.3 只能抓到HTTP流量,抓不到HTTPS
- 症状:Burp里能看到一些
http://的请求,但关键的https://请求看不到,或者看到的是CONNECT隧道建立请求,没有后续内容。 - 原因:这几乎可以断定是证书信任问题。HTTPS握手阶段,因为设备不信任Burp CA,连接在建立TLS隧道(
CONNECT方法)后就失败了。 - 解决:严格按照第4.2节,确保Burp CA证书被正确安装并信任。对于高版本安卓,必须使用系统证书、虚拟环境或Frida等方案来突破限制。
7.4 针对特定错误码的排查
unexpected status 404 not found:这个错误通常出现在你试图访问某个特定的API端点时(例如你在热词里看到的https://api.deepseek.com/responses)。这不是抓包配置问题,而是服务器对你发出的请求返回了404。这意味着:- 你的代理配置是成功的,请求已经到达了Burp并转发给了服务器。
- 服务器收到了请求,但找不到你请求的资源路径(URL)。
- 你需要检查你构造的请求URL、方法、头部或参数是否正确。可以在Burp的
Repeater模块中重放和修改这个请求进行调试。
TLS handshake failed:这是典型的证书问题。参考7.2和7.3的解决方案。- APP闪退或提示“网络环境不安全”:这通常是APP内置了反调试或反代理检测。它们会检测是否设置了代理、是否安装了可疑证书、是否被Frida等工具附加。对抗这些检测需要更深入的逆向工程知识,例如使用
Frida脚本去Hook这些检测函数,使其返回安全的结果。
抓包是一个“道高一尺,魔高一丈”的过程。移动应用的安全防护在不断加强,我们的技术也需要持续更新。没有一种方法能一劳永逸,关键是要理解原理,然后根据目标应用的具体情况,灵活组合使用上述工具和方法。从最基础的代理设置开始,遇到问题层层排查,先解决网络连通性,再解决证书信任,最后攻克证书绑定和反调试,这才是正确的进阶路径。
