微信小程序反编译与抓包:从源码到接口全链路解析

2026-07-11 5 min read 2

一、引言

微信小程序的生态日益庞大,但开发者常面临源码保护与调试的双重挑战。反编译技术允许我们还原小程序包(.wxapkg)为可读代码,而抓包工具则能捕获网络请求。本文结合实战,详解从反编译到抓包的全流程,解决PC端小程序HTTPS抓包失败的核心问题。

二、环境准备

需安装:Node.js、Python3、Fiddler Everywhere、微信PC版(3.9+)。确保系统已关闭防火墙或允许代理通过。

三、反编译微信小程序

3.1 获取.wxapkg文件

PC端小程序包位于微信安装目录的WeChat Files/Applet/下,每个小程序对应一个由AppID命名的文件夹。例如:

C:\Users\你的用户名\Documents\WeChat Files\Applet\wx1234567890abcdef\

文件夹内包含__APP__.wxapkg及其他分包。注意:微信3.9+版本后,文件后缀可能隐藏,需通过文件属性查看实际路径。

3.2 使用wxappUnpacker反编译

安装依赖:

git clone https://github.com/qwerty472123/wxappUnpacker.git
cd wxappUnpacker
npm install

反编译命令:

node wuWxapkg.js C:\path\to\__APP__.wxapkg -o output_dir

常见错误:若提示Error: Cannot find module 'xxx',需手动安装缺失模块,如npm install esprima。若报错Cannot read property 'split' of null,通常因文件路径含空格,改用引号包裹。

3.3 修复反编译后代码

反编译得到的JS文件常被混淆,需格式化。使用工具如js-beautify:

npm install -g js-beautify
js-beautify output_dir/app-service.js > app-service-formatted.js

对于WXSS样式文件,可直接查看,但部分属性被压缩。可手动补全或使用在线工具还原。

四、Fiddler抓取PC端小程序HTTPS包

4.1 问题根源

PC端微信从3.9.0版本开始,默认使用系统代理,但小程序请求强制走内置代理,导致Fiddler无法拦截。此外,微信对证书固定(Certificate Pinning)进行了增强,需特殊处理。

4.2 解决方案:全局代理与证书注入

步骤1:关闭微信,在Fiddler中设置HTTPS解密,并导出根证书。打开Fiddler Everywhere,进入Settings > HTTPS > Decrypt HTTPS traffic,勾选所有选项,点击Export Root Certificate保存为.cer文件。

步骤2:将证书安装到Windows受信任根证书颁发机构。双击.cer文件,选择安装证书,存储位置选本地计算机,下一步选择将所有证书放入下列存储,浏览选择受信任的根证书颁发机构

步骤3:修改微信启动参数,强制使用系统代理。创建微信快捷方式,右键属性,在目标框中添加参数:

"C:\Program Files (x86)\Tencent\WeChat\WeChat.exe" --proxy-server=127.0.0.1:8888

注意:端口号需与Fiddler代理端口一致(默认8888)。若微信已运行,需完全退出后重启。

步骤4:绕过证书固定。微信某些请求使用SSL Pinning,需在Fiddler中安装第三方插件如FiddlerCertMaker或手动替换证书。推荐使用Fiddler Everywhere内置的AutoResponder功能,将微信的证书验证请求重定向到本地。

具体操作:在Fiddler中捕获到ocsp.digicert.comcrl.verisign.com的请求后,右键选择Add Rule,设置响应为*reset*或返回200空内容,从而绕过OCSP检查。

4.3 验证抓包

启动微信,打开任意小程序(如“腾讯待办”)。在Fiddler中过滤mp.weixin.qq.comapi.weixin.qq.com,即可看到HTTPS请求。若仍抓不到,检查微信是否使用QUIC协议(端口443的UDP),Fiddler默认不支持,需在设置中启用Capture UDP traffic(仅Fiddler Everywhere支持)。

五、实战:分析反编译后的接口

假设反编译一个小程序后,在app-service.js中搜索https://,发现如下请求:

wx.request({
  url: 'https://api.example.com/v2/user/info',
  data: {openid: 'xxxx'},
  success: res => { console.log(res) }
})

通过Fiddler抓包,可对比实际请求参数与源码是否一致,用于安全审计。例如,若发现openid明文传输,可建议开发者使用加密或签名。

六、常见问题与排查

  • 反编译后文件不全:可能因分包未合并,需反编译所有.wxapkg文件并手动整合。
  • Fiddler抓包无数据:检查代理设置是否正确,微信是否已重启。尝试关闭微信的“使用系统代理”开关(在微信设置中)。
  • 证书错误:微信提示ERR_CERT_AUTHORITY_INVALID,需确认证书已安装至受信任根目录,且Fiddler的HTTPS解密已开启。

七、总结

本文完整演示了微信小程序的反编译与抓包技术,从源码提取到网络请求拦截,为开发者提供了逆向分析的能力。请注意,这些技术仅用于合法目的,如学习、安全测试或自家产品调试,不得用于侵犯他人权益。

IT搬运工

专注技术分享,坚持原创深度内容。

分类
链接
订阅

RSS 订阅关注最新文章

© 2026 IT搬运工 · 站点地图 · 鄂ICP备19007640号-3