今天闲来无事,上网冲浪,突然发现一个令我眼前一亮的项目 WeChatOpenDevTools-Python, 这这这,看 README 的介绍,我岂不是可以在小程序里面开 devtool 了吗!?
想来 2022 年也有个小程序羊了个羊爆火那会儿,我也对小程序逆向分析玩了玩,然后做了个破解版的自娱自乐了一下 (当然也是算朋友圈排名滴), 当时拿 UnpackMiniApp.exe
解密了 wxapkg
格式的小程序,然后用 wxappUnpacker 弄出了小程序的 js 源码来,审计一下找到修改的地方 patch 逻辑到最开始的 wxapkg
包就破解好了
虽然但是,那时我就在想微信小程序既然用的是浏览器的内核,那么必定是有方法可以开启开发者工具的,不过由于当时在网上还没发现这样的技术所以也就只是一个想法了,现在正巧碰到了大佬开源了能够开启微信小程序的项目,于是我便想看看小程序 + devtool 逆向的感觉究竟是如何的呢~
碰巧身边的人在玩咸鱼之王 (虽然我没玩过), 但是它毕竟是一个小程序,那就拿它来浅浅尝试一下 devtool 逆向的感觉是怎么样的咯 ^.^
让微信小程序开启 devtool 有被封号的风险,请务必使用小号登录电脑版微信!!!
# 微信开启 devtool
- 从 github 上下载项目
git clone https://github.com/JaveleyQAQ/WeChatOpenDevTools-Python.git |
- 下载项目依赖
pip install -r requirements.txt |
- 需要先打开电脑版微信并登录
- 运行
main.py
python main.py |
随便开一个小程序,出现下列信息则代表 devtool 开启成功
点一下小程序右上角的三个点
就可以开启 devtool 啦
# 反编译 wxapkg
devtool 可以帮助我们更加方便的抓到小程序的包,但是我们还需要通过反编译 wxapkg 拿到小程序的源代码,因为在 devtool 的 source 里面,小程序的源码都被整合到了一个 js 里面很难看出代码的层次结构
# 提取 wxapkg
Windows 默认小程序的存放路径为
C:\Users\{系统用户名}\Documents\WeChat Files\Applet\{小程序的AppID}\
# 解密 wxapkg
使用 pc_wxapkg_decrypt_python 来解密 wxapkg
python .\main.py --wxid wx0840558555a454ed --file .\__APP__.wxapkg --output dec.wxapkg |
# 解包 wxapkg
使用 wxappUnpacker 来解包 wxapkg
由于咸鱼之王小程序的包是有子包的,所以需要使用 - s 参数
.\bingo.bat .\dec.wxapkg -s=_subpackages_game_.wxapkg |
解包成功~
简单看了一下文件结构,这游戏看起来是用 coco2djs 写的,而且这 js 也没有加密全是源码,hmmm 再逆下去不就变成代码审计了吗… 那就到此为止咯:)
# 其他
就这样结束似乎有点太潦草了,所以这里是我别的一些想法
既然咸鱼之王用的是 coco2djs, 而在官网的描述中,coco2d 是跨平台的,那我要是开发人员,肯定在安卓上用的也是 coco2d
果不其然,下了一个 apk 版的咸鱼之王解包之后,真的在里面发现了 libcocos2djs.so
有趣的是在 assets
目录下有 libjiagu.so
, 这明显是套了一个 360 加固想要为难逆向的人呀
但 360 加固的是 dex, 但是 coco2d 的源码不全是 js 写的嘛?唯一的作用应该就是防止重打包了吧
而且这个源代码甚至连 coco2dx-js
内置的把源码加密成 jsc
的功能都没有,这下连密钥都不用找了…
那顺便记录一下加密成 jsc 类似下图的样子该如何应对吧
很简单, 010editor
打开 libcocos2djs.so
全局搜索 jsb-adapater
, 它前面那一串字符串就是 jsc 的密钥
拿到了密钥,用 cocoscreatorjscdecrypt 就可以解密出源码来了