咨询发布 发表于 2026-5-28 03:23:14

微信小程序反编译:解包wxapkg还原wxml和js完整流程

为什么要反编译小程序

上周要逆向一个商业小程序的接口加密逻辑,没源码,只能从手机里把包抠出来反编译。微信小程序的包是wxapkg格式,加密加压缩,直接解压不行。记一下完整流程,从抓包到还原wxml。


[*]找包:Android手机root后,小程序包在 /data/data/com.tencent.mm/MicroMsg/<userhash>/app/pkg/,文件名_xxx_.wxapkg。没root用模拟器,雷电9系自带root。
[*]解密:wxapkg用的是V1加密时整个文件异或一个固定密钥,V2则前1023字节异或、后面用AES-128-CBC。用wxapkg-tools解V2,命令 wxapkg.py unpack -i input.wxapkg -o out_dir。
[*]还原:解密后得到app-service.js和page-frame.html。wxml被编译进了js,要用wcc反编译回wxml。一个叫wxappUnpacker的项目能批量还原。
[*]看接口:在app-service.js里搜 wx.request,所有接口URL和参数都明文,加密函数也能找到调用入口。


几个坑

第一个坑是包版本。微信8.0.40之后小程序包是V2格式,老的unpacker只支持V1,要找支持V2的fork。第二个坑是分包,主包加多个分包,分包在.wxapkg之外还有单独的子包,要全抓。第三个坑是wxml反编译不是百分百还原,事件绑定和wx:if的层级会丢,要对着js手动补。


# 解密加解包一条龙
python wxapkg.py unpack -i _112233_.wxapkg -o ./out
# 还原wxml
node wcc ./out/app-service.js > app-service.wxml
# 找接口
grep -rn "wx.request" ./out
grep -rn "sign\|encrypt\|token" ./out


反编译完的js用VS Code格式化一下,配合sourcemap能恢复到接近原始结构。我做的小程序最后在app-service.js第3800行找到了加密入口——sign函数是MD5(参数排序加时间戳加salt),salt硬编码在前端,30分钟搞完。

https://www.metk.cn/img/posts/wechat_miniprogram_decompile.jpg

发表于 2026-9-17 18:33:40

我了个去,顶了

北岛林间 发表于 2026-9-17 18:42:11

这类活很吃经验,工具只是辅助。

远山札记 发表于 2026-9-17 18:44:03

这类技术更新的频率很高,老教程参考价值有限。这套思路对其他 App 通用吗?

老猫笔记 发表于 2026-9-17 18:46:43

App 侧的安全基本靠客户端自觉,服务端校验才是最后一道。

踏雪25 发表于 2026-9-17 18:49:05

反调试这块的坑最多,建议先把常见检测点列一遍。你们环境是怎么解决版本兼容的?

阿澈75 发表于 2026-9-17 18:52:44

通信协议那层如果能抓到明文,能省掉大量逆向工作。

一叶杂谈 发表于 2026-9-17 18:55:58

现在的防护思路是增加时间成本,让你算不过来。这类分析一般要多久能出结果?

浅夏杂谈 发表于 2026-9-17 18:59:22

建议把分析过程记录下来,下次遇到类似的能省一半时间。你们环境是怎么解决版本兼容的?

远山听风 发表于 2026-9-17 19:02:54

混淆只能提高门槛,不能真正阻止有心人。有没有推荐的入门资料?
页: [1] 2 3 4 5 6
查看完整版本: 微信小程序反编译:解包wxapkg还原wxml和js完整流程