微信小程序抓包实战:Charles与Burp Suite联动配置与安全测试指南

📅 2026/6/29 19:17:09
微信小程序抓包实战:Charles与Burp Suite联动配置与安全测试指南
1. 项目概述为什么需要联动抓取微信小程序数据如果你是一名移动应用开发者、安全测试人员或者是对微信小程序内部运作机制充满好奇的技术爱好者那么“抓包”这个技能你一定绕不开。微信小程序因其轻量、即用即走的特性其网络通信过程相比传统App更为封闭和复杂很多关键的业务逻辑、API接口和数据交互都隐藏在加密的网络请求背后。单纯使用浏览器开发者工具行不通因为小程序运行在微信的沙箱环境中。只用手机上的抓包工具功能有限难以进行深度分析和篡改测试。这就是为什么我们需要将像 Charles 和 Burp Suite 这样的专业抓包工具联动起来。Charles 以其对 HTTPS 流量解密和移动设备代理配置的友好性著称是设置代理环境、捕获流量的“前哨站”。而 Burp Suite 则是安全测试领域的“瑞士军刀”擅长拦截、修改、重放请求并进行漏洞扫描。将它们组合使用相当于你既有了一个高精度的“雷达”Charles来发现所有网络活动又有了一个功能强大的“作战指挥中心”Burp Suite来深入分析和测试这些活动。这个实战配置的核心目标就是搭建一座桥梁让微信小程序发出的所有网络请求先经过 Charles 的捕获和初步解密再无缝转发到 Burp Suite 进行深度处理。无论是分析小程序与后端的 API 调用规律、调试数据传输问题还是进行安全审计、寻找潜在漏洞如越权、注入等这套组合拳都能为你提供前所未有的清晰视野和控制能力。接下来我将从零开始带你一步步完成这套环境的搭建与配置并分享实战中积累的独家技巧和避坑指南。2. 核心工具选型与工作原理深度解析在开始动手之前我们必须理解手中“武器”的特性以及它们协同工作的原理。盲目配置只会导致各种连接失败和证书错误。2.1 Charles流量捕获与SSL解密代理Charles 本质上是一个 HTTP/HTTPS 代理服务器。它的核心工作流程分为三步代理中转你的设备电脑或手机将所有网络流量发送到 Charles 监听的端口默认8888。SSL中间人对于 HTTPS 请求Charles 会扮演一个“中间人”。它先以自己的身份与目标服务器建立 TLS 连接然后再与你客户端建立另一个 TLS 连接。这意味着 Charles 能看到明文数据。记录与展示解密的请求和响应会被 Charles 记录下来并以结构化的方式树状图、列表展示在 GUI 界面中。为了让 Charles 能成功进行 SSL 中间人解密必须在客户端浏览器或手机上安装并信任 Charles 生成的根证书。否则客户端会检测到证书不匹配中断连接。为什么首选 Charles 作为第一环因为 Charles 在移动端配置上体验极佳。它提供清晰的指引让用户在手机上设置代理和安装证书非常简单。而且它对 WebSocket 等协议的支持也很友好这些都是分析小程序时可能遇到的。2.2 Burp Suite安全测试与请求操纵平台Burp Suite 同样是一个代理但它更侧重于安全测试。它的核心模块 Proxy代理与 Charles 功能类似但它的强大之处在于Intercept拦截可以暂停请求和响应让你在数据发送前/接收后任意修改。Repeater重放器可以手动修改并重新发送某个请求用于测试参数变化对响应的影响。Intruder入侵者用于自动化攻击如爆破密码、遍历参数。Scanner扫描器自动化的漏洞扫描器。在联动配置中我们主要利用 Burp Suite 的 Proxy 模块作为“上游代理”或“二级代理”。2.3 联动架构串联代理模型理解了单个工具联动就清晰了。我们的目标是构建一个“客户端 - Charles - Burp Suite - 互联网”的串联代理链。微信小程序在手机或模拟器上将其网络代理设置为 Charles 所在电脑的 IP 和端口。Charles接收到小程序的流量进行记录和解密。然后我们配置 Charles 将这部分流量转发到 Burp Suite 的代理端口。Burp Suite接收到来自 Charles 的流量此时你可以利用 Burp Suite 的所有高级功能进行拦截、修改、扫描等操作。处理完毕后Burp Suite 再将请求发往真正的目标服务器。服务器的响应则沿着原路返回互联网 - Burp Suite - Charles - 微信小程序。这种架构下Charles 成为了一个“流量搬运工”和“初级解码器”而 Burp Suite 则是“主分析引擎”。所有流量在 Charles 中可见同时也能流入 Burp Suite 进行深度测试。注意有些教程会反向配置Burp Suite 上游代理指向 Charles这在原理上也可行但经过大量实践上述“Charles 转发至 Burp”的串联模式更为稳定和直观尤其便于在 Charles 中按需过滤和转发特定流量。3. 环境准备与基础配置详解工欲善其事必先利其器。稳定的环境是后续所有操作的基础。3.1 软件安装与基础设置Charles (v4.6 推荐)从官网下载并安装 Charles。启动后第一次运行会提示是否授予创建代理的权限务必允许。首次启动会有30天试用期可以免费使用。对于学习而言完全足够。网上虽有破解方法但强烈建议支持正版或使用官方试用。进入Proxy - Proxy Settings...。确保HTTP Proxy的Port是8888默认并勾选了Enable transparent HTTP proxying。SOCKS Proxy可以不用管。Burp Suite (Community/Professional 版)从 PortSwigger 官网下载 Burp Suite Community Edition免费版。免费版功能对于大多数抓包和手动测试场景已经足够。Professional 版提供自动化扫描等高级功能。安装并启动。首次启动会让你选择临时项目还是保存项目按需选择即可。进入Proxy - Options标签页。找到Proxy Listeners部分确保有一个监听器在运行通常默认是127.0.0.1:8080。如果没有点击Add绑定端口设为8080绑定地址设为127.0.0.1。关键验证 在电脑浏览器中分别将代理设置为127.0.0.1:8888(Charles) 和127.0.0.1:8080(Burp)访问http://charlesproxy.com/getssl或http://burp应该能看到各自工具返回的特定页面这证明代理服务本身工作正常。3.2 计算机本地代理与防火墙配置联动需要在本地环回网络localhost上建立连接通常防火墙不会阻止。但为了排除一切干扰建议临时关闭防火墙在配置和测试阶段可以暂时关闭 Windows Defender 防火墙或 macOS 的防火墙待调试成功后再开启。检查端口占用确保8888和8080端口没有被其他程序如某些开发服务器、Skype 旧版本等占用。在命令行运行netstat -ano | findstr :8888(Windows) 或lsof -i :8888(macOS/Linux) 可以查看端口占用情况。3.3 移动设备与计算机的网络准备要让手机流量走到电脑两者必须在同一局域网。连接同一Wi-Fi将你的测试手机和安装 Charles/Burp 的电脑连接到同一个无线网络。获取电脑IP地址Windows命令行输入ipconfig查看无线局域网适配器 WLAN下的IPv4 地址。macOS/Linux终端输入ifconfig | grep inet 或ip addr show找到对应 Wi-Fi 网卡的inet地址通常是192.168.x.x或10.x.x.x。 记下这个 IP假设为192.168.1.100。4. Charles 端详细配置步骤Charles 是我们联动配置的起点和关键枢纽。4.1 启用SSL代理并安装根证书这是解密 HTTPS 流量的前提。在 Charles 中进入Help - SSL Proxying - Install Charles Root Certificate。这会将证书安装到电脑的系统钥匙串或证书存储区。关键一步安装后必须手动信任该证书。以 macOS 为例打开“钥匙串访问”找到Charles Proxy...的证书双击打开在“信任”部分将“使用此证书时”设置为“始终信任”。Windows 则在证书管理器中将该证书导入“受信任的根证书颁发机构”。回到 Charles进入Proxy - SSL Proxying Settings...。在SSL Proxying标签页点击Add。Host填写*Port填写443。这意味着 Charles 将对所有主机*的 443 端口HTTPS 默认端口进行 SSL 解密。你也可以针对特定域名添加如*.qq.com。4.2 配置外部代理转发至Burp Suite这是实现联动的核心设置。在 Charles 中进入Proxy - External Proxy Settings...。勾选Use external proxy servers。在Web Proxy (HTTP)部分Server: 填写127.0.0.1(因为 Burp Suite 和 Charles 在同一台电脑上运行)。Port: 填写8080(Burp Suite 默认监听端口)。同样地在Secure Web Proxy (HTTPS)部分填写相同的Server和Port(127.0.0.1:8080)。有一个至关重要的选项Do not use external proxy for localhost addresses。这个选项不要勾选因为微信小程序的很多请求尤其是开发者工具发出的目标地址可能就是localhost或127.0.0.1我们需要这些请求也能被转发到 Burp Suite。如果勾选本地流量会被 Charles 直接处理不会转发。点击OK保存。至此Charles 的配置基本完成。它现在会监听8888端口并将接收到的所有 HTTP/HTTPS 流量包括本地地址转发到本机8080端口即 Burp Suite。4.3 移动设备代理与证书安装实战现在需要让手机流量进入 Charles。在手机上进入当前连接的 Wi-Fi 设置选择“配置代理”或“修改网络”将代理设置为手动。服务器/主机名填写你之前查到的电脑 IP如192.168.1.100。端口填写8888(Charles 端口)。保存设置。此时手机的所有网络流量除了某些系统级或强证书绑定的App都会经过你的电脑。在手机浏览器中访问chls.pro/ssl。这是一个 Charles 提供的便捷地址会自动下载 Charles 的根证书一个.pem或.crt文件。安装并信任证书这是最易出错的一步iOS下载后进入“设置” - “通用” - “VPN与设备管理”找到描述文件并安装。然后进入“设置” - “通用” - “关于本机” - “证书信任设置”找到 Charles Proxy 证书并开启完全信任。Android下载后通知栏点击安装。安装后进入“设置” - “安全” - “加密与凭据” - “安装的证书”确保能看到 Charles 证书。对于 Android 7.0如果抓包目标 App 的android:networkSecurityConfig配置严格可能还需要将证书安装到系统级需 Root但对于大多数小程序测试用户级证书已足够。5. Burp Suite 端联动配置与优化Burp Suite 作为下游配置相对简单但有些细节决定了体验。5.1 配置上游代理可选但推荐理解在 Charles - Burp 的串联模式下Burp 本身不需要设置上游代理因为流量是 Charles 主动送过来的。但理解这个配置有助于排查问题。 在 Burp Suite 中Proxy - Options标签页的Upstream Proxy Servers部分是用于设置 Burp 的上游代理。在我们的架构里不应该在这里添加 Charles。因为我们是让 Charles 把流量“推”给 Burp而不是让 Burp 主动通过 Charles 去“拉”流量。如果错误地在这里添加了 Charles (127.0.0.1:8888)可能会导致循环代理或请求失败。5.2 拦截与流量过滤设置联动后流量会同时出现在 Charles 和 Burp Suite 中。为了高效工作需要进行过滤。关闭 Burp 默认拦截在Proxy - Intercept标签页确保Intercept is on按钮是灰色的即关闭状态。除非你明确需要拦截某个请求否则开启拦截会导致所有流量暂停影响小程序正常使用。设置 Burp 目标范围进入Target - Scope标签页。在这里添加你感兴趣的小程序域名如*.service.weixin.qq.com,*.yourdomain.com。然后在Proxy - Options-Intercept Client Requests中可以勾选And URL Is in target scope这样 Burp 就只拦截你设定范围内的请求避免被无关的系统请求刷屏。使用 Burp 的 History 和 Repeater大部分时间你是在Proxy - HTTP history中查看所有流经的请求。找到感兴趣的请求右键选择Send to Repeater然后在Repeater标签页中深入分析和修改重放。5.3 处理证书错误与HTTPS解密当流量从 Charles 转发到 Burp 时Burp 也会对 HTTPS 请求进行自己的中间人解密。因此你可能会在 Burp Suite 的Proxy - HTTP history中看到大量的TLS handshake failure或证书错误。解决方法在 Burp Suite 中进入Proxy - Options-Proxy Listeners选中你的监听器 (127.0.0.1:8080)点击Edit。在编辑对话框中切换到Certificate标签页。选择Generate a CA-signed certificate with a specific hostname并在Hostname处填写一个通配符域名例如*.weixin.qq.com。但这只能解决特定域名的错误。更通用的方法选择Use a custom certificate然后点击Import导入你在 Charles 中安装的同一个根证书charles-ssl-proxying-certificate.pem。这告诉 Burp Suite“当遇到需要解密的 HTTPS 请求时使用 Charles 的证书来签发伪证书”。这样对于 Charles 已经成功解密的流量Burp 就不会再报证书错误了。6. 微信小程序抓包实战全流程环境配置妥当现在进入激动人心的实战环节。我们将以微信开发者工具中的小程序为例。6.1 在微信开发者工具中配置代理微信开发者工具内置的小程序运行时其网络请求默认不遵循系统代理。必须手动配置。打开微信开发者工具打开或创建一个小程序项目。点击顶部菜单栏的设置-代理设置。选择手动设置代理。HTTP 代理和安全 Web 代理均填写127.0.0.1和8888(即 Charles 的地址和端口)。点击确定并重启开发者工具。实操心得开发者工具版本更新有时会重置代理设置。如果突然抓不到包了第一件事就是回来检查这里的配置是否还在。6.2 启动抓包与验证链路确保 Charles 和 Burp Suite 都已启动并且配置正确。在微信开发者工具中点击“编译”或“预览”运行小程序。在小程序中进行操作触发网络请求如点击按钮加载数据。观察 Charles你应该能在 Charles 的Structure或Sequence视图中看到源源不断的请求主机名主要是localhost(开发者工具本地服务器) 和service.weixin.qq.com等微信后台域名。如果看到Tunnel to或请求内容是乱码说明 SSL 解密可能没成功请复查手机和电脑的证书安装与信任步骤。观察 Burp Suite切换到Proxy - HTTP history。你应该能看到与 Charles 中几乎相同的请求列表可能顺序略有差异。如果 Burp 中空空如也说明 Charles 到 Burp 的转发没成功。请重点检查 Charles 的External Proxy Settings配置并确认Do not use external proxy for localhost addresses没有勾选。6.3 识别与分析小程序关键请求小程序流量可能很杂包含资源加载、API调用、WebSocket连接等。API 请求通常路径包含/api/、/wx/、/mina/等关键词请求方法为POST或GET内容类型Content-Type多为application/json。登录态寻找携带cookie、header中包含X-WX-Skey、token、authorization等字段的请求。这些是维持会话的关键。数据格式小程序与后端通信数据通常为 JSON。在 Charles 或 Burp Suite 中可以格式化 JSON 数据以便阅读。使用 Filter在 Charles 的Filter栏输入域名关键词如weixin.qq.com可以快速过滤出目标请求。6.4 利用Burp Suite进行深度测试当目标请求出现在 Burp Suite 的 History 中后真正的测试才开始。拦截与修改在HTTP history中找到目标请求右键选择Intercept request。然后打开Proxy - Intercept并开启拦截。下次小程序发送相同请求时它会被暂停在 Burp Suite 中。你可以修改任何参数、Header、Body然后点击Forward发送观察服务器返回的不同结果。这是测试越权修改用户ID、SQL注入修改查询参数等漏洞的直接方法。重放与遍历将请求发送到Repeater。你可以反复修改、重放这个请求无需在小程序前端重复操作。例如你可以系统性地修改某个参数的值观察响应变化寻找规律或边界错误。扫描仅限 Pro 版将请求右键发送到ScannerBurp 会自动对该接口进行一些常见漏洞的扫描。7. 高级技巧与疑难问题排查实录掌握了基础流程下面这些经验能让你事半功倍并解决那些令人头疼的问题。7.1 抓取真机小程序流量在开发者工具中抓包是基础但真机环境更真实可能涉及不同的域名、证书校验逻辑。确保手机和电脑在同一Wi-Fi手机代理已设置为电脑IP:8888且手机已正确安装并信任 Charles 根证书。在微信中打开目标小程序。此时Charles 会收到一个连接请求询问是否允许该设备连接。点击Allow。真机小程序的请求域名通常不会是localhost而是正式的线上域名。你需要在 Charles 的SSL Proxying Settings中提前为这些域名如*.yourdomain.com添加 SSL 代理规则或者直接使用通配符*:443。真机特有难题证书强校验SSL Pinning一些安全意识较高的小程序或微信客户端本身会使用“证书绑定”技术。这意味着 App 只信任自己预设的特定证书而不信任用户安装的 Charles 根证书导致 HTTPS 解密失败Charles 中看到Tunnel to或直接连接失败。应对策略尝试绕过对于小程序有时在 Charles 的SSL Proxying Settings中精确添加其域名有效。使用低版本微信较旧版本的微信客户端可能没有启用严格的证书绑定。Root/越狱设备在已 Root 的 Android 或已越狱的 iOS 设备上可以使用JustTrustMe、SSLUnpinning等 Xposed/Frida 模块来禁用证书绑定。但这属于高级操作需要一定的移动安全基础。7.2 过滤无关流量与提高效率联动后流量巨大如何聚焦Charles 端聚焦Focus 功能在 Charles 中右键点击你关心的主机名选择Focus。之后 Charles 会隐藏所有非 Focus 的流量视图非常清爽。Recording Settings进入Proxy - Recording Settings在Include和Exclude标签页中设置规则只记录你需要的域名或路径。Burp Suite 端聚焦Target Scope如前所述善用Target - Scope。Filter Bar在Proxy - HTTP history顶部有过滤栏可以按域名、状态码、关键词等过滤。7.3 常见失败场景与根因分析现象可能原因排查步骤Charles 中无任何请求1. 手机/开发者工具代理未设置或设置错误。2. 电脑防火墙阻止了8888端口。3. Charles 代理服务未开启。1. 复查代理配置的IP和端口。2. 临时关闭防火墙测试。3. 检查 CharlesProxy - Proxy Settings是否启用。Charles 有请求但全是Tunnel to或 HTTPS 请求乱码SSL 解密失败。客户端不信任 Charles 证书。1. 确认手机/电脑已安装并完全信任Charles 根证书。2. 确认 CharlesSSL Proxying Settings包含了目标域名或*:443。3. 尝试在手机浏览器访问https://www.baidu.com看 Charles 能否解密。Charles 有请求Burp Suite 为空Charles 到 Burp 的转发未生效。1. 检查 CharlesExternal Proxy Settings配置是否正确127.0.0.1:8080。2.确保Do not use external proxy for localhost addresses未勾选3. 检查 Burp SuiteProxy Listeners是否在监听 8080 端口。请求在 Burp Suite 中显示证书错误Burp Suite 对转发的 HTTPS 流量进行了二次解密但使用了错误的证书。1. 在 Burp Suite 的 Proxy Listener 证书设置中尝试导入 Charles 的根证书。2. 或者在 Burp 的User options - TLS中尝试启用或禁用某些 TLS 协议版本。小程序功能异常或无法加载代理导致请求延迟或某些特定请求如 WebSocket、UDP被阻断。1. 尝试在 Charles 的Proxy - Throttle Settings中禁用带宽限制。2. 检查是否为必须的域名或协议被错误过滤。测试时可以先关闭过滤规则。7.4 性能优化与稳定性建议按需启动Burp拦截长期开启 Burp Suite 的拦截功能会严重拖慢速度。日常抓包分析时关闭Intercept只使用History查看。定期清理历史记录Charles 和 Burp Suite 的歷史记录会占用大量内存。定期清理Charles:Charles - Clear Session; Burp:Proxy - HTTP history - Filter: select all - Delete可以提升响应速度。使用Project文件在 Burp Suite 中为不同的小程序项目创建不同的项目文件.burp保存状态、配置和历史方便下次直接载入。备用方案如果联动配置过于复杂或遇到无法解决的问题可以回归单工具模式。对于纯 API 分析只用 Charles 可能更轻便。对于需要深度安全测试但流量来源简单如直接来自浏览器的场景可以只用 Burp Suite并配置浏览器代理指向 Burp。这套 Charles 与 Burp Suite 的联动配置就像为微信小程序这个“黑盒”安装了一套精密的监控和测试系统。从环境搭建到实战抓包再到问题排查每一步的细节都决定了最终的成功率。我个人的体会是证书安装与信任是新手最容易栽跟头的地方务必严格按照步骤操作并验证。而联动的精髓在于理解流量走向一旦打通你将能以前所未有的清晰度洞察小程序的网络行为无论是用于开发调试还是安全评估效率都会获得质的提升。在实际操作中耐心和细致的观察比盲目尝试更重要遇到问题多对照上面的排查表大部分都能迎刃而解。