反编译微信小程序
前言
最近有一个任务,就是让我试下反编译微信小程序,搞起。事先说明,写这篇博客,只是为了记录过程,不建议大家都去反编译,毕竟都是别人的劳动成果。然后反编译的这个事例,也打了码。如果贵公司的人发现了,希望及早更新处理下,以免接口的泄露。
准备工具
1、node.js环境,https://nodejs.org/en/
2、反编译脚本,https://github.com/qwerty472123/wxappUnpacker
3、夜神模拟器,https://www.yeshen.com/ 主要是用来登录微信,运行小程序,然后再拿到小程序的安装包 wxapkg
1、获取小程序的安装包
1、我试了小米手机是拿不了小程序的安装包的,即使是root了也不行,目录是空的。所以,用夜神模拟器吧。打开夜神模拟器,里面有个应用中心,直接搜索微信下载安装吧。安装好微信后,登录微信,打开你想要反编译的小程序。ok,打开后,回到桌面,打开桌面的“ES文件浏览器”:
打开ES文件浏览器
打开root开关
打开根目录
然后找到这个路径:/data/data/com.tencent.mm/MicroMsg/1bd6b8205e3a41715b8e2cca72bc50f0/appbrand/pkg/
里面有你运行过的小程序安装包,把它复制到主目录,然后再通过微信发到你的电脑吧,然后就拿到了小程序的安装包。
2、下载反编译脚本到本地,并安装相关配置
脚本目录打开命令窗口,cd到上面这个目录,然后输入以下:
npm install esprima
npm install css-tree
npm install cssbeautify
npm install vm2
npm install uglify-es
npm install js-beautify
npm install escodegen
完了后,就到最后一步,输入:node wuWxapkg.js +空格+安装包目录,如下图
然后就会自动反编译,在安装包目录生成一个文件夹:
3、打开项目编译
打开微信开发工具,自己在后台创建一个小程序,拿到appid,并填进去。
点击确定后,就能进去页面了,这个时候,会提示以下错误:
这个是因为小程序的请求域名,都需要在后台配置的。所以,你需要把这个域名,在你创建的那个小程序开发设置那里,填上。填上后,重新启动开发者工具,这时,应该就正常了。如下图:
然后,我们可以看到里面的代码,都非常的清晰。
连接口都能看出来,这样别人就能直接调用这个接口了。
总结
局限(包括但可能不限于以下内容)
1、实现中很多功能基于特定的版本(wcc-v0.6vv_20180111_fbi, 且不考虑面向低版本适配)和字符串搜索,所以不能很好的适应各种特殊情况。
2、wxml 文件拥有不同于 xml 和 html 文件的字符转义规则,且尚未公开(并非"没有"),因此未能很好的还原相关内容。
3、js 文件被压缩后会丢失原始变量名等信息内容无法还原;wxss 文件压缩后的注释也会丢失。
4、wxs 文件会将所有的变量如 Math 改为 nv_Math ,这里仅通过字符串替换去除。
5、一些被引用 wxss 文件本身的源文件丢失,因此无法恢复原始目录。
6、有些项目开启了难以复原的es6转es5选项,检验本项目结果是否正确时需要关闭项目中的es6转es5选项。
7、wxml 中一些无法找到相对应 的正向语句的内容无法还原。
8、json 中components项丢失,仅会标注被其他包引用的自定义组件。
最后说两句
大家可以利用这个工具,试试自己的小程序,是否能被反编译出来,然后采取一些混淆措施等等。
尽量别动坏心机,造成商业犯罪就不好了。