一、前言
微信小程序源码提取反编译,听起来很屌,其实还是简单的,基本是傻瓜式操作。要想拿到微信小程序源码,找到源文件在手机存放的位置就行,源文件拿到,用反编译脚本跑一下,微信小程序代码包里的所有文件、所有资源就出来了(除了project.config.json小程序配置文件)。拿到源码后,跑起来是能跑,但登录、授权等涉及到appid的功能是不能用的,因为被反编译小程序的服务端appid和你本地添加的不一样,这就是为啥拉下来的源码没有project.config.json文件的原因,项目中appid是配置在这个文件里,这里一定程度上保护原小程序。
二、所需工具
1.夜神模拟器
地址:夜神模拟器
用来找寻微信小程序源文件,真机当然也可以,但麻烦,又是root权限,又是越狱的,夜神模拟器方便,直接在设置里就可以设置超级用户权限,超级权限拿到,就可以为所欲为了,通过下面这个RE文件管理器看到微信小程序源文件。
2.RE文件管理器(拖到模拟器内自动安装)
地址:RE
用来找寻微信小程序源文件,官方没改动的话,应该会在这么个路径下,/data/data/com.tencent.mm/MicroMsg/…/appbrand/pkg/,路径中有一段…,这里表示不确定具体一个,反正就在这个MicroMsg下的其中一个文件夹,紧接着会看到appbrand文件夹,如果这样那就找到位置了。
3.nodejs运行环境
地址:nodejs
反编译脚本所需运行环境
4.反编译脚本
地址:wxappUnpacker
用来反编译微信小程序源文件,把源代码给编译出来,这是GitHub上一位大神的杰作,找到了这个比较好用的,其他版本自寻。
三、开始搞事情
1. 安装好夜神模拟器后,并将在电脑下载好的RE文件管理器拖到模拟器内安装。
2. 打开手机设置->找到超级用户->右上角三个小点点击一下,设置->点击‘超级用户访问权限’,选择‘仅限于应用’,这样超级用户权限就拿到了。
3. 打开微信,没有的在应用市场下载就行,打开想反编译的微信小程序,小程序打开后,可以切换到RE文件管理器去找源文件了。
- 这里有一个机制,当点开一个微信小程序,如果本地这个文件夹下找到即将运行的小程序,会从微信服务器下载到本地,在以后的某个时刻又运行这个小程序,运行时,微信服务器会通知有没有小程序新版本,如有新版本,会在后台静默下载,小程序继续运行,新版本要到下一次运行才会启用,这就是微信小程序的更新机制。
4. 打开RE文件管理器,从更目录开始,/data/data/com.tencent.mm/MicroMsg/…/appbrand/pkg/,找到源文件后,长按->点击右上角三个小点,打开菜单,选择‘压缩所选文件’->完成后,点击查看->长按,还是右上角,将压缩包从模拟器发送出来到电脑上,方式多种,随意。
MyWxAppUnpacker
Wechat App(微信小程序, .wxapkg)解包及相关文件(.wxss, .json, .wxs, .wxml)还原工具
1. 说明
- [x] 修复 “ReferenceError: $gwx is not defined” 和 extract wxss 等问题
- [x] 支持分包
- [x] 支持一键解包
- [x] 支持一键安装各种依赖
一键匹配、统计文本中的内容,请下载 calcwords 。
2. wxapkg 包的获取
Android 手机最近使用过的微信小程序所对应的 wxapkg 包文件都存储在特定文件夹下,可通过以下命令查看:
adb pull /data/data/com.tencent.mm/MicroMsg/{User}/appbrand/pkg ./
其中{User}
为当前用户的用户名,类似于 2bc**************b65
。
3. 用法
用法分 mac 和 windows,请根据系统来操作
1. for Mac OS (Mac操作系统)
./install.sh -npm
./install.sh
./de_miniapp.sh -d 小程序包路径(.wxapkg格式)
./de_miniapp.sh 小程序包所在文件夹
./de_miniapp.sh
** 举例
Mac OS
./de_miniapp.sh -d ./testpkg/_-751579163_42.wxapkg
2. for 通用操作系统(Windows 和 Mac)
node wuWxapkg.js 小程序包路径(.wxapkg格式)
** 举例
node wuWxapkg.js testpkg\_-751579163_42.wxapkg
当检测到 wxapkg 为子包时, 添加-s 参数指定主包源码路径即可自动将子包的 wxss,wxml,js 解析到主包的对应位置下. 完整流程大致如下:
- 获取主包和若干子包
- 解包主包
./bingo.sh testpkg/master-xxx.wxapkg
- 解包子包
./bingo.sh testpkg/sub-1-xxx.wxapkg -s=../master-xxx
TIP
-s 参数可为相对路径或绝对路径, 推荐使用绝对路径, 因为相对路径的起点不是当前目录 而是子包解包后的目录
├── testpkg
│ ├── sub-1-xxx.wxapkg #被解析子包
│ └── sub-1-xxx #相对路径的起点
│ ├── app-service.js
│ ├── master-xxx.wxapkg
│ └── master-xxx # ../master-xxx 就是这个目录
│ ├── app.json
4. 提取统计WXSS或者其他样式
详情参照
calcwords
- 下载calcwords源码
git clone https://github.com/larack8/calcwords
- 设置统计的.wxapkg路径和输入结果路径,调用 calcWxssStyle
public static void testCalcWords() throws IOException {
String fromFilePath = "/Users/Shared/my_git/java/CalcWords/testletters/";
String resultFilePath = "/Users/Shared/my_git/java/CalcWords/result.txt";
calcWxssStyle(fromFilePath, resultFilePath);// 统计微信小程序源码WWXSS样式
// calcWxssProperty(fromFilePath, resultFilePath);// 统计微信小程序源码WXSS属性
}
- 打开输出结果文件