工具准备
网上大部分资料可参考,资料做技术分享,简单做个整理。
首先你需要2个工具《解密》与《逆向》
UnpackMiniApp +wxappUnpacker
www.aliyundrive.com/s/y7LbrRvgH… (解密工具)
www.aliyundrive.com/s/6YRjqatfS… (逆向工具)
如果没有安装nodejs,请先安装。
输入node -v检查是否已安装nodejs
网上有很多教程,是分苹果和安卓的,还要用到模拟器,其实不用那么麻烦,直接用微信PC客户端就可以了。
解密小程序
1.找到微信PC端的小程序包位置
选择打开文件夹按钮,进入文件夹。
2.打开你需要的小程序,然后把尽量小程序所有页面都点一遍,让本地自动生成一个本地包。
找到Applet文件夹,里面wx开头的文件夹都是小程序。也为了方便找到自己的需要的小程序,你可以先选择全部删掉。
在PC版的微信左下角点击小程序进入,把页面都点击一遍。会重新生成wx开头的文件夹。
3.解密小程序包
找到刚刚下载《小程序包解密UnpackMiniApp》文件,选择加密小程序。
选择加密的小程序包 ,比如:xxxxx\Applet\wxf2cbce9781d76e34 ,搜索到 ‘__APP__.wxapkg’ 文件
解密成功如图
会存放在wxpack文件夹
逆向小程序
这里开始使用wxappUnpacker,在下载好的wxappUnpacker文件夹使用cmd命令窗口操作。
直接在【wxappUnpacker】文件夹的地址栏里输入cmd即可。
1.安装依赖
依次输入下面7个npm install,分别一个一个安装
npm install
npm install esprima
npm install css-tree
npm install cssbeautify
npm install vm2
npm install uglify-es
npm install js-beautify
2.正式逆向
把刚刚wxpack文件夹的 wx开头的xxxxxxx.wxapkg解密文件用bingo.bat 命令运行
bingo.bat 主包路径(可以直接拖入)
编译后的文件,保存在和【wxf2cbce9781d76e34.wxapkg】同一个文件夹中,自动以wxf2cbce9781d76e34命名。 编译完成,接下来直接使用微信开发工具打开。
可能出行的错误
1.如果在执行编译命令时报
this package is a subPackage which should be unpacked with -s=<MainDir>.
说明这个是分包,打开小程序时生成了两个.wxapkg文件,编译另一个文件即可,编译分包和主包的命令是不一样的:
node ./wuWxapkg.js 分包路径 -s=主包路径
2.如果在执行编译命令时报
TypeError: subPackage.pages is not iterable
找到wxappUnpacker\wuConfig.js 第50行,对subPackage.pages 判断下
if(subPackage.pages){ for (let page of subPackage.pages) { let items = page.replace(root, ''); newPages.push(items); let subIndex = pages.indexOf(root + items); if (subIndex !== -1) { pages.splice(subIndex, 1); } } }
3.如果生成的文件里不包含app.json文件
说明你找的小程序,是大神开发的,已经做了反编译的安全措施,所以解密失败。
4.用微信开发工具运行时报
_typeof3 is not a function
这个错误主要由于babel问题导致的
点击详情,本地设置,将JS编译成Es5取消选中
5.用微信开发工具运行时报
VM2_INTERNAL_STATE_DO_NOT_USE_OR_PROGRAM_WILL_FAIL is not defined
这个问题主要是错误处理导致的,我们直接无视掉,全局搜索然后删掉,注意再次编译需要清空缓存,不然可能出现代码没有了,但是编译依然存在的情况。
6.网络错误,无法发包
选择详情,本地设置,不校验合法域名,然后就可以正常调试了
7.编译后app.json中subPackages分包问题
在逆向工作中子包都打包进了主包,需自行挪到subPackages
附参考资料: