通过发布过版本小程序找回源代码

1,485 阅读3分钟

今天维护小程序项目,可是以前维护的人最后一版本没有放到git上,这就导致了代码丢失了,冷静一下想了想,既然最后一个版本已经发布过是不是在访问小程序的时候小程序文件会下载到本地,然后把发布过的版本copy下来,然后就可以找回了,果然还是太异想天开了,手机上根本找不到包文件,除非安卓机能获取到root权限,苹果手机越狱,获得root权限才能访问这些文件目录

1.所有网上搜了一下发现 可以用安卓模拟器,电脑安装上之后就可以使用了

我用的是夜神模拟器

下载地址 pan.baidu.com/s/1mlnxQ8fl…

提取码:l9du

安装好之后启动 之后在模拟器上的搜索框搜索

安装  微信(用来扫描小程序二维码), QQ(用来传输找到的小程序包)



2.安装 RE 管理器,主要是用来 找到小程序访问之后的安装包的

链接:pan.baidu.com/s/1eblq3Hkj…

提取码:isfc

直接拖拽到模拟器窗口就会打开直接使用 ,就能看到所有的目录结构


3.接下来模拟器里打开微信,然后跟手机上一样搜索你想要的小程序,然后点击,点击之后小程序就会把源文件从服务端下载到本地

然后切回RE管理器按照下面目录去找包文件

/data/data/com.tencent.mm/MicroMsg/这是一个可变化的值/appbrand/pkg/


这样我们就找到了包文件,之后压缩发送


选择qq发送,微信发送会失败, 这样发送过去之后就得到了小程序的源码了


4.这个时候我们就要用到反向编辑去解包

  • 首先是找到一个开源的解包项目:github.com/qwerty47212…
  • 然后克隆下代码之后安装node
    nodejs.org/en/
  • 接下来是在你下载好解包项目的代码处安装依赖

    npm install esprima 
    npm install css-tree 
    npm install cssbeautify 
    npm install vm2 
    npm install uglify-es 
    npm install js-beautify 
    npm install escodegen 

  • 安装依赖后就是运行解压脚本
  • 其中 D:\1.wxapkg 我把要解压的包放在了 D盘下,命名为 1.wxapkg

  • node .\wuWxapkg.js D:\1.wxapkg 

运行上面的命令是将文件解包得到下面的文件, 这就跟小程序的基本文件一致了,但是解压后也会有问题


有以下局限,但项目基本可以跑起来,总算找了回来,也不枉这一晚上的努力

  • 实现中很多功能基于特定的版本(wcc-v0.6vv_20180111_fbi, 且不考虑面向低版本适配)和字符串搜索,所以不能很好的适应各种特殊情况。
  • wxml 文件拥有不同于 xml 和 html 文件的字符转义规则,且尚未公开(并非"没有"),因此未能很好的还原相关内容。
  • js 文件被压缩后会丢失原始变量名等信息内容无法还原;wxss 文件压缩后的注释也会丢失。
  • wxs 文件会将所有的变量如 Math 改为 nv_Math ,这里仅通过字符串替换去除。
  • 一些被引用 wxss 文件本身的源文件丢失,因此无法恢复原始目录。
  • 有些项目开启了难以复原的es6转es5选项,检验本项目结果是否正确时需要关闭项目中的es6转es5选项。
  • wxml 中一些无法找到相对应 的正向语句的内容无法还原。
  • json 中components项丢失,仅会标注被其他包引用的自定义组件。