杂学

百家

获取微信小程序源码

由微信小程序的理念可以知道,手机上一定会有小程序的源文件。

然而凡事在这时总有个然而,

未ROOT的Android手机访问不了小程序源文件储存目录,Apple手机呢,越狱难度 >> Android ROOT。

这时我们有我知道这几种方法:

  • 抓包获取源码;
  • ROOT手机;
  • PC端使用安卓模拟器;

emmm,作为只有一台手机的人来说,ROOT有很大风险,而我又不会抓这个的数据包,所以嘛。。。

环境

Windows10 version1903

夜神模拟器

Node.js

测试日期2019.09.17晚,微信版本为7.0.6

过程

获取源文件

  • 夜神模拟器(ROOT)登入微信,打开目标小程序;
  • 加载完成后即可关闭微信,下载安装RE文件管理器
  • 赋予RE文件管理器超级管理员权限,打开目录/data/data/com.tencent.mm/MicroMsg/{16进制字符串}/appbrand/pkg/
  • 注意该目录下有许多.wxapkg后缀文件,可以根据使用时间来判断目标文件,一般小程序的文件不会太大(资源多的也就1-2M);
  • 复制目标文件到PC端准备好的目录下。

反编译

.wxapkg是一个二进制文件,关于.wxapkg的详细内容可以参考lrdcq大神的博文: 微信小程序源码阅读笔记

反编译.wxapkg包:https://github.com/qwerty472123/wxappUnpacker,这是Github上qwerty472123大神写的node.js版本。

但是微信7更新后,下载下来的反编译脚本之一(wxappUnpacker/wuWxss.js)无法反编译page-frame.html文件为wxss格式文件。

以下为搜索到的解决方案:

  1. 分析page-frame.html文件:https://aimuz.me/wei-xin-xiao-cheng-xu-fan-bian-yi-wxss-diu-shi-wen-ti.html
  2. 修改wuWxss.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function runVM(name, code) {
// let wxAppCode = {}, handle = {cssFile: name};
// let vm = new VM({
// sandbox: Object.assign(new GwxCfg(), {
// __wxAppCode__: wxAppCode,
// setCssToHead: cssRebuild.bind(handle)
// })
// });
// vm.run(code);
// for (let name in wxAppCode) if (name.endsWith(".wxss")) {
// handle.cssFile = path.resolve(frameName, "..", name);
// wxAppCode[name]();
// }

let wxAppCode = {}, handle = {cssFile: name};
let gg = new GwxCfg();

let tsandbox = {
$gwx: GwxCfg.prototype["$gwx"],
__mainPageFrameReady__: GwxCfg.prototype["$gwx"], //解决 $gwx is not defined
__vd_version_info__: GwxCfg.prototype["$gwx"], //解决 __vd_version_info__ is not defined
__wxAppCode__: wxAppCode,
setCssToHead: cssRebuild.bind(handle)
}

let vm = new VM({sandbox: tsandbox});
vm.run(code);
for (let name in wxAppCode) {
if (name.endsWith(".wxss")) {
handle.cssFile = path.resolve(frameName, "..", name);
wxAppCode[name]();
}
}
}

然后cd到反编译脚本目录,安装以下依赖库(可以使用-g全局安装):

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

反编译脚本目录下输入wuWxapkg.js <target_path>(想要反编译的文件名)e.g.目标文件_123100521.wxapkg 位于C盘根目录下,那么就输入命令 wuWxapkg.js C:\_123100521.wxapkg

脚本会在目标文件同目录下创建同名文件夹,里面就是反编译后的源代码了。