爬取小程序线上代码
因为某种原因,丢失了部分小程序代码,不过程序在线上是正常运行的,于是找到了一款工具,可以爬取线上的代码,在自己慢慢的反编译回来
需要的工具
- 夜神模拟器(因为有 root 权限,或者有已经 root 的手机亦可)
- 一个伟大的开源库 https://github.com/xuedingmiaojun/wxappUnpacker 原作者已经不维护了,这是其他大神留下的库
- 还有一个 https://github.com/Cherrison/CrackMinApp 这个是图形化的操作界面。下面会介绍和上面的有何区别
- RE 文件浏览器(安卓用) https://dl.pconline.com.cn/download/79630.html
所有的包我都有准备好了。不想自己找的可以给我赚点积分咯
https://download.csdn.net/download/Jioho_chen/12272830
准备环境
- 安装夜神 (没啥好说的)
- 打开安卓模拟器,安装
微信
,还有RE文件浏览器
- 打开模拟器的 root 权限(方便 RE 文件浏览器到里面找文件)其实是默认开启的,自己确认下就好
- 登陆微信,打开对应的小程序(如果小程序有分包的话,要把分包给触发到才行,到处点点把)
获取 wxapkg
打开我们已经安装的 RE文件浏览器
。如果要root权限记得通过
在 wxappUnpacker 的说明已经很清楚了。不过有一点可能会蒙,那就是文件的目录文件!
原文: 需要的wxapkg文件 在 /data/data/com.tencent.mm/MicroMsg//appbrand/pkg/ 在这个目录下
坑 :注意 MicroMsg//appbrand/
。在MicroMsg
后面是双斜杠!那么里面的内容是不确定的。这句话怎么理解呢,看下面的图:
- 我们要的文件在
6d98xxxxxb6
文件夹里面。而同级目录还有一个appbrand
。这就很容易进了appbrand
。发现找不到对应的文件 - 其次,每个小程序对应的文件夹也不一样,所以你们根据文件夹修改时间自行判断把!
- 还有就是为啥要 root 权限的问题:不给 root 权限,可能进来不了,或者进来了没得把文件拷贝走,所以 root 一开始记得给
2020/6/11 更新 为什么re文件管理器需要root权限。因为我们需要把所有的文件权限改为 7777 才可以,在 pkg 文件目录中,长按,修改权限,把所有的权限都勾上,有点linux基础的都知道777含义,如果不把权限选到777.文件拷走之后还是不能使用!
能理解这个目录结构后,继续下一步,找到我们的 wxapkg
文件
一个小程序可能有多个 wxapkg
。因为还有可能有分包嘛。
- 回到 pkg 的文件夹,长按,压缩,
- 然后找到压缩包的位置,长按,发送到微信。
- 电脑端登陆微信,在文件传输助手把 pkg 压缩包发到电脑端
选择趁手的工具
下面的工具都需要 node 支持。如果一个开发电脑连 node 环境都没有那就说不过去了~安装 node 就跳过了。
文章一开始提到了 2 个库,其实都是基于同一个库做的封装
。原先的库已经不存在了,不过在 replace 还是可以下载到源码,感兴趣可以看下 https://github.com/qwerty472123/wxappUnpacker/releases
CrackMinApp
链接:https://github.com/Cherrison/CrackMinApp
优点:
- 图形化界面
- 完全脱离了命令行操作
缺点:
- 无法解析分包
- 必须放在 D 盘根目录才能使用(也不算缺点,就一点小瑕疵,初次使用还是稍微摸索了一下才知道)
下载后作者也说的很清楚了,把 pkg 里面的包放进去指定目录,然后打开图形界面,点击就能解析
因为包很多,解析和顺序没关系的,比如有 10 个包,哪个包先解析都 OK。可是他只能解析主包,分包解析不了。解析出来只有对应的目录结构和 .html 文件,没有我们要的 JS 和 wxss。wxml
but!
折腾了那么久,怎么可能就在这里就放弃了!接下来就是重点介绍的库 wxappUnpacker !
wxappUnpacker
链接:https://github.com/xuedingmiaojun/wxappUnpacker
优点:
- 支持分包解析
缺点:
- emmm。没有缺点!
在 github 下载后:
- 安装 node 依赖
npm install
-
把我们小程序的
pkg
(这就是在夜神里面拿出来的包) 文件夹解压缩,然后放到这个库的根目录 pkg 中(其实放哪里都行,我只是方便自己找~) -
开始反编译
在下载的库的目录下
./bingo.sh ./pkg/你的小程序代码包.wxapk -s=./
./pkg/你的小程序代码包.wxapk
这个是你的代码包的路径-s
是为了解析子包的,当然主包也可以解析,所以都加上把,-s 后面是说解析后的子包输出的路径,我让他输出到对应的目录下了
如果代码包很多,岂不是要弄到手软?记错了当前弄到第几个咋办!
在 Linux/Shell
环境下,命令行天下第一!下面介绍批量解析!。前提是有 shell 环境,gitbash 也能凑合用
for wxpkg in ./pkg/*.wxapkg;do ./bingo.sh $wxpkg -s=./;done
- for in 循环
- 在 ./pkg 目录下的全部以
.wxapkg
结尾的文件 - 执行编译命令,
$wxpkg
就是 for in 的变量名。 - 老规矩解压到当前的包目录下
- 执行后可能会有些报错,emmm 没去深究了
执行结果:
虽然是抛出了异常,不过我们代码还是生成了,看下目录:
进到某一个分包,也是 OK 滴
为啥对应目录的 json 文件没有了!
json 文件都在主包才解析了出来,因为 json 文件有可能配置了一些组件,可以在 pkg 目录下搜索下*.json 就会发现谁是主包了~
爬下来的代码能不能运行?
这个我还真没试过~。因为我也只是为了找回自己缺的一些代码。不过能确定的就是 wxml.wxss.json 文件都是原封不动的,其次就是 js 文件,JS 肯定是被打包压缩过了。也不能说看不懂,只是变量名被压缩了,根据目录结构复原后,对应资源引入成功,跑起来还是可以的
希望大家都不要丢代码把,毕竟压缩的 JS 看的真的难受啊~