柔晶美网络工作室

柔晶美网络工作室,倾心于web技术的博客站点

关注我 微信公众号

您现在的位置是: 首页 > 博客日记

反编译获取微信小程序源码图文教程

2019-04-10 admin 小程序  1826

一、前言

做小程序开发,看到一些非常出色的小程序的效果,很想一窥源码,查看究竟,看看大厂的前端大神们是如何规避了小程序的各种奇葩的坑。于是就想到获取到小程序地源文件,然后再对其进行反编译还原为源代码,来作为学习参考。我百度了各种关于小程序地反编译教程,但是感觉都不太适合像我这样地初学小白,踩了挺多坑。在这里把我重新简化好的,快速地获取一个微信小程序源码的方式记录下来。

二、安装运行环境

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   命令的时候会报 $gwx is not defined 错误,导致 page-frame.html 文件无法反编译,无法解开wxss格式文件。经过作者对小程序混淆源码的分析,重新更改了部分wxappUnpacker-master的逻辑源码,再次成功反编译小程序。

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

wxappUnpacker-master.zip

https://github.com/xuedingmiaojun/wxappUnpacker

文章评论


需要 登录 才能发表评论
热门评论
0条评论

暂时没有评论!