反编译获取微信小程序源码图文教程
2019-04-10 admin 小程序 1844
一、前言
做小程序开发,看到一些非常出色的小程序的效果,很想一窥源码,查看究竟,看看大厂的前端大神们是如何规避了小程序的各种奇葩的坑。于是就想到获取到小程序地源文件,然后再对其进行反编译还原为源代码,来作为学习参考。我百度了各种关于小程序地反编译教程,但是感觉都不太适合像我这样地初学小白,踩了挺多坑。在这里把我重新简化好的,快速地获取一个微信小程序源码的方式记录下来。
二、安装运行环境
node.js运行环境,我的是windows10 64位系统,直接下载附件安装:node-v8.12.0-x64.zip
安装就直接点下一步就可以了,环境变量无需配置。
三、在逍遥安卓模拟器上获取小程序
使用安卓模拟器获取到.wxapkg文件,不用越狱,不用root,非常方便。方法是:安装好模拟器上,在模拟器上安装ES文件管理器(一般自带),再安装微信,微信登录后,搜索需要获取的小程序名称,运行小程序后退出;再打开ES文件管理器,找到wxapkg文件,目录类似如下图:
如果有多个,将列表设置为详情,找到对应时间的就可以了。再长按,复制,发送到百度网盘或者共享文件夹即可。
四、还原wxapkg文件
首先在GIT上下载Wechat App(微信小程序,.wxapkg)解包及相关文件(.wxss,.json,.wxs,.wxml)还原工具,https://github.com/qwerty472123/wxappUnpacker,本站可直接点击下载:wxappUnpacker-master-1.zip,将其解压到D盘根目录下,并第三步获取的wxapkg文件粘贴到wxappUnpacker-master目录下。
打开CMD窗口,切换到D盘刚才解压的目录,在node命令窗口中依次安装如下依赖:
npm install esprima npm install css-tree npm install cssbeautify npm install js-beautify npm install vm2 npm install uglify-es
安装好依赖之后,就是最后一步了,反编译 .wxapkg 文件。假设要还原的文件为_-762176953_4.wxapkg,则运行:
node wuWxapkg.js D:\wxappUnpacker-master\_-762176953_4.wxapkg
如果运行出错,则提示缺少什么就安装什么依赖npm install xxxxx
正常运行的结果应该是:
在D盘wxappUnpacker-master目录下应该生成了一个相应的小程序目录,这就是解密后的小程序源码:
四、在微信开发者工具新增项目
后记:
$gwx is not defined 报错的问题由于微信小程序内部升级的原因,最近github上的wxappUnpacker-master小程序反编译工具已部分失效,运行node wuWxapkg.js
2019年更新脚本:wxappUnpacker-master-1.zip
使用此方法,绝大部分的小程序都能正常反编译出来,但是也会有一些特殊的情况,具体可以查看qwerty472123大神的readme文件:
实现中很多功能基于特定的版本(wcc-v0.6vv_20180111_fbi, 且不考虑面向低版本适配)和字符串搜索,所以不能很好的适应各种特殊情况。
wxml 文件拥有不同于 xml 和 html 文件的字符转义规则,且尚未公开(并非”没有”),因此未能很好的还原相关内容。
js 文件被压缩后会丢失原始变量名等信息内容无法还原;wxss 文件压缩后的注释也会丢失。
wxs 文件会将所有的变量如 Math 改为 nv_Math ,这里仅通过字符串替换去除。
一些被引用 wxss 文件本身的源文件丢失,因此无法恢复原始目录。
有些项目开启了难以复原的es6转es5选项,检验本项目结果是否正确时需要关闭项目中的es6转es5选项。
wxml 中一些无法找到相对应 的正向语句的内容无法还原。
json 中components项丢失,仅会标注被其他包引用的自定义组件。
2020年7月更新wxappUnpacker,支持子包。当检测到 wxapkg 为子包时, 添加-s 参数指定主包源码路径即可自动将子包的 wxss,wxml,js 解析到主包的对应位置下. 完整流程大致如下:
安装:
npm install npm install esprima npm install css-tree npm install cssbeautify npm install vm2 npm install uglify-es npm install js-beautify
https://github.com/xuedingmiaojun/wxappUnpacker