先拿小程序源码包

第一步:下载模拟器

什么模拟器都可以,我电脑是mac的下载的模拟器是Mumu 模拟器
下载地址:http://mumu.163.com/360/ 下载完成后对应安装好

第二步:下载和安装应用:微信,RE文件管理器

第三步:开启Root权限,然后保存


第四步:打开RE文件管理器,获取超级用户访问权限

基本环境已经配置完成了,接下来打开微信,搜索对应的微信小程序

第五步:打开要爬取的小程序,我爬的这个小程序叫(虎年头像生成制作)

第六步:打开RE文件管理器,定位到目录

1
/data/data/com.tencent.mm/MicroMsg/6943bc538a088dbe4f1544a31a6005b6/appbrand/pkg

(6943bc538a088dbe4f1544a31a6005b6这一块一般都是乱码找到打开就行,每个人都不一样)

以上就是小程序程序包,接下来我们需要将程序包取出来,可以通过模拟器里的微信发送,也可以通过模拟器共享文件夹发送出来

注意事项:超过3m以上的比如图片中的那个15M那就是他的依赖包,不是源码,源码就是那个小于3m的400多k文件

反编译小程序源码

第一步:下载wxappUnpacker

1
2
3
github地址:https://github.com/gaocaipeng/wxappUnpacker.git
下载地址:https://gaoxiaotian.lanzoup.com/b06bntpid
下载密码:6666

第二步:打开wxappUnpacker,npm install 下载对应依赖,执行对应指令

当检测到 wxapkg 为子包时, 添加-s 参数指定主包源码路径即可自动将子包的 wxss,wxml,js 解析到主包的对应位置下. 完整流程大致如下

1
2
3
4
5
6
7
1. 获取主包和若干子包
2. 解包主包
- windows系统使用: `./bingo.bat /master-xxx.wxapkg`
- Linux系统使用: `./bingo.sh /master-xxx.wxapkg`
3. 解包子包
- windows系统使用: `./bingo.bat /sub-1-xxx.wxapkg -s=../master-xxx`
- Linux系统使用: `./bingo.sh /sub-1-xxx.wxapkg -s=../master-xxx`

注意事项:./bingo.sh是你要执行的程序后面的地址是你存放抓取下来的压缩包的地址

第三步:执行命令./bingo.sh ../_1706599111_2.wxapkg


到这已经完成了,我们可以打开微信开发者工具看一看

导入微信开发者工具

第一步:打开微信开发者工具,选择文件夹,下面选择测试号

第二步:一个重要的设置:设置-》项目设置-》不校验合法域名,这个要勾选上


继续看这个小程序他打开报错

常见的编译报错

当点了编译后,在控制台一般会输出几种报错,需要自己处理一下

报错1

1
'[ WXML 文件编译错误] ./pages/search/index/index.wxml Bad attr filterStyle with message 20 | {{''+item.name+''}} 21 | 22 |';

解决方法

1
找到对应文件位置,将filterStyle="{{top:0}}" 修改为 filterStyle="top:0", filterStyle多了两个大括号

报错2

1
'TypeError: _typeof3 is not a function at _typeof (typeof.js? [sm]:2)';

解决方法

1
@babel\runtime\helpers文件夹下面的typeof.js报错,因为本地装过这个包npm install --save @babel/runtime,直接进去拷一份typeof.js覆就好了,新typeof.js如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function _typeof(obj) {
"@babel/helpers - typeof";

if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
module.exports = _typeof = function _typeof(obj) {
return typeof obj;
};

module.exports["default"] = module.exports, module.exports.__esModule = true;
} else {
module.exports = _typeof = function _typeof(obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};

module.exports["default"] = module.exports, module.exports.__esModule = true;
}

return _typeof(obj);
}

module.exports = _typeof;
module.exports["default"] = module.exports, module.exports.__esModule = true;

那接下来我们替换一下:@babel\runtime\helpers文件夹下面的typeof.js

一个完整的反编译小程序