开发

软件开发相关知识

使用安卓模拟器获取任意小程序源码完整教程

一、下载网易mumu模拟器,安装微信与re文件浏览器;
二、登录微信在小程序页搜索小程序名称,找到并打开小程序,模拟器打开小程序有可能闪退,但不要紧,因为小程序包已经开始后台下载了;
三、回到模拟器桌面打开RE文件管理器,提示请求超级用户访问权限,点击永久记住选择,允许其获取root权限。(注意:一定要允许root权限!)
四、按此路径进入目录:
/data/data/com.tencent.mm/MicroMsg
  • MicroMsg会保存你的用户相关信息,每登录一个微信号就会产生一个哈希值作为用户标识进行对应,
    看时间找到最新的一个用户点进去;

  • 找到appbrand目录,里面包含2个文件夹,一个是pkg(执行文件),一个是jscache(缓存文件)

  • 进入pkg目录下,找到最近的一个.wxapkg的文件,这个就是刚刚缓存的小程序文件,但它是个二进制文件不能直接拿来用,需要对它进行反编译处理。

  • 长按文件将它进行压缩为tar格式,然后发送到别人的微信上,让他一会在转发给你即可。

五、.wxapkg 解包

兜兜转转绕了一圈终于拿到小程序的 .wxapkg 包,接下来就是如何将它反编译成为一个完整的项目了。

首先 .wxapkg 文件到底是什么呢?你可能会认为它就是类似 Android 的 .apk 或者 iOS 的 .ipa 安装包,本质上是一个 .zip 压缩包?

其实不是的,它是一个二进制文件,实际的文件结构如下图(图片取自文章 微信小程序源码阅读笔记)


如何反编译:


  • 打开终端,用git下载代码 git clone https://github.com/qwerty472123/wxappUnpacker.git

  • 切换到wxappUnpacker目录使用cnpm i安装依赖,安装之前需要安装Node环境(自行安装);

  • 解压得到的tar文件,得到wxapkg的路径,在wxappUnpacker目录下执行node node wuWxapkg.js + wxapkg文件路径

  • 看到以下输出说明反编译成功,这时候你就会得到一个项目文件了。

  • 使用编辑器打开文件夹开心的看大神们怎么实现各种功能的吧,总会对你有所启发,微博的这个小程序源码可读性特别高,除了样式文件,感觉已经全了,有图有真相。

局限和问题(包括但可能不限于以下内容)

  • 实现中很多功能基于特定的版本和字符串搜索,所以不能很好的适应各种特殊情况。

  • wxml 文件拥有不同于 xml 和 html。

  • 文件的字符转义规则,且尚未公开(并非"没有"),因此未能很好的还原相关内容。

  • js 文件被压缩后会丢失原始变量名等信息内容无法还原;wxss 文件压缩后的注释也会丢失。

  • wxs 文件会将所有的变量如 Math 改为 nv_Math ,这里仅通过字符串替换去除。

  • 一些被引用 wxss 文件本身的源文件丢失,因此无法恢复原始目录。

  • 有些项目开启了难以复原的es6转es5选项,检验本项目结果是否正确时需要关闭项目中的es6转es5选项。

  • wxml 中一些无法找到相对应 的正向语句的内容无法还原。

  • json 中components项丢失,仅会标注被其他包引用的自定义组件。