反编译小程序
我们首先打开微信开发者工具,开发一个工程,然后点击自动真机调试,选择启动PC端自动真机调试
然后就会在本地电脑中微信打开小程序,这时候找到 C:\Users\用户名\Documents\WeChat Files\Applet 下可以看到新增的以小程序id为目录名的目录。
打开进去之后会找到 APP.wxapkg 文件,这个就是小程序包。
然后使用https://github.com/codeteenager/WxAppUnpacker-1工具对其进行解压。
- app-service.js:小程序工程中所有 JS 文件的汇总,已被混淆;
- app-config.json: 小程序工程 app.json 以及各个页面的 JSON 配置文件汇总,可直接查看;
- page-frame.html: 所有页面的 .wxml 和 app.wxss 样式文件的汇总,可读性差,需要还原;
- *.html: 包含每个页面对应的 .wxss 信息,可读性较好;
- 资源文件: 各类图片、音频等资源文件;
基础库解压
打开微信开发者工具的源代码,他是基于 NW.js运行的,找到package.nw,在源码中有一个 vendor 文件夹是值得注意的,通过它可以快速新建一个示例项目,同时里面有一个十分重要的 2.17.0.wxvpkg 包,它是微信小程序的基础库。
然后打开vscode搜索unwxvpkg插件并下载,下载完之后右键包文件unpack wxvpkg即可解压。
我们也可以使用wxappUnpacker来解包,我们clone一下wxappUnpacker项目到本地,并且拷贝需要解包的基础库到目录中,之后安装项目依赖,依赖安装完成之后执行命令。
shell
node ./wuWxapkg.js 2.17.3.wxvpkg
执行完命令后项目中就多了一个dist文件夹,目录中的WAWebview.js和WAService.js分别为渲染层底层基础库和逻辑层底层基础库。我们打开WAWebview.js文件看一下:
可以看到代码是压缩过后的。这样的压缩过的代码是难以分析的,所以我们需要美化一下,可以看到package.json中有几条script命令:
js
"scripts": {
"beautify": "js-beautify",
"beautifyWAWebview": "js-beautify ./dist/WAWebview.js -r",
"beautifyAppService": "js-beautify ./dist/WAService.js -r"
},
这里我们执行一下:
shell
npm run beautifyWAWebview
npm run beautifyAppService
把我们要分析的核心基础库文件都美化一下。再打开文件我们就可以看到美化之后的代码了: