反编译小程序
因为最近有需要从小程序里提取接口,这里搜集了下资料便开始反编译小程序,也经过了不少波折。
这里我一开始利用的是电脑版微信的小程序,打开微信设置-文件管理-打开文件夹
打开后返回上层目录到Applet目录下,这个目录下是电脑版微信小程序的存放目录
D:\Users\Mr.D\WeChat\WeChat Files\Applet\
因为有多个小程序而且无法识别哪个是需要反编译的小程序,这里先把所有文件夹全部删除掉,然后再次在微信里打开小程序就会再次自动生成,然后目录变成了下面这个样子。
这个wx开头的文件夹里放的就是我需要反编译的微信小程序了(里面还有一层数字目录)
这里可以看到电脑版微信小程序的位置大概就是:D:\Users\Mr.D\WeChat\WeChat Files\Applet\wxxxxxxxxxxxx\xx\__APP__.wxapkg
这个__APP__.wxapkg
就是小程序的源文件了
接下来按照网上的教程开始反编译
安装node环境
node官方下载地址:https://nodejs.org/zh-cn/download
下载反编译脚本并解压
wxappUnpacker下载地址:https://github.com/yswunstoppable/wxappUnpacker
在wxappUnpacker脚本目录启动powershell,依次安装以下依赖
npm install esprima
npm install css-tree
npm install cssbeautify
npm install vm2
npm install uglify-es
npm install js-beautify
npm install escodegen
npm install cheerio
全部安装完毕后的脚本目录
然后在命令行里输入
node .\wuWxapkg.js D:\xxx\__APP__.wxapkg
然后问题就来了,报错 Magic number is not correct!
来回捣鼓了好几次还是不行,我就想是不是电脑版的小程序和手机版的小程序有区别?
于是我又从用夜神模拟器找到小程序的wxapkg,利用自带的文件管理找到路径
/data/data/com.tencent.mm/MicroMsg/xxxxxxxxxxxxx/appbrand/pkg/xxxx.wxapkg
把这个wxapkg发到PC上
再次执行 node .\wuWxapkg.js D:\xxx\__APP__.wxapkg
然后看到执行过程以为要成功了,最后还是报错了,
if (err) throw Error("Save file error: " + err);
^
Error: Save file error: Error: ENOENT: no such file or directory, open 'D:\Users\Mr.D\WeChat\1\pages\pay\plugin:\wx4ee21ba011b1f4e7\pay.json'
at D:\Users\Mr.D\WeChat\n\wuLib.js:86:24
at agent (D:\Users\Mr.D\WeChat\n\wuLib.js:64:23)
at fs.js:1397:7
at FSReqCallback.oncomplete (fs.js:164:23)
虽然在xxxx目录下生成了文件
但是很明显有一部分并没有成功还原。
又搜集了下资料,把报错js的if条件语句注释掉后再次报错
看js也看不出哪里有问题,然后又到网上搜集资料,得出一个结论:无解,得到的消息是最近官方小程序再一次进行了更新,无法解析wxss,让小程序的反编译变得更加难。
甚至在Ubuntu里装了一遍环境运行(这里用Ubuntu是因为有些小程序插件加压文件会有带 ' :
'的文件名,而Windows下不允许这样的符号作为文件名,而Linux系统没问题)
这里只能用已反编译出来的部分文件进行检索
打开微信开发者工具
因为没有反编译出app.json
所以这里直接新建项目
然后把反编译出的文件覆盖新建项目目录下
然后就可以全局搜索我们需要提取接口的位置和需要解码的参数位置了
结束语
2020.7.21 小程序反编译脚本wxappUnpacker
已失效,无法完全反编译出文件。