今天闲来无事,上网冲浪,突然发现一个令我眼前一亮的项目 WeChatOpenDevTools-Python, 这这这,看 README 的介绍,我岂不是可以在小程序里面开 devtool 了吗!?

想来 2022 年也有个小程序羊了个羊爆火那会儿,我也对小程序逆向分析玩了玩,然后做了个破解版的自娱自乐了一下 (当然也是算朋友圈排名滴), 当时拿 UnpackMiniApp.exe 解密了 wxapkg 格式的小程序,然后用 wxappUnpacker 弄出了小程序的 js 源码来,审计一下找到修改的地方 patch 逻辑到最开始的 wxapkg 包就破解好了

虽然但是,那时我就在想微信小程序既然用的是浏览器的内核,那么必定是有方法可以开启开发者工具的,不过由于当时在网上还没发现这样的技术所以也就只是一个想法了,现在正巧碰到了大佬开源了能够开启微信小程序的项目,于是我便想看看小程序 + devtool 逆向的感觉究竟是如何的呢~

碰巧身边的人在玩咸鱼之王 (虽然我没玩过), 但是它毕竟是一个小程序,那就拿它来浅浅尝试一下 devtool 逆向的感觉是怎么样的咯 ^.^

让微信小程序开启 devtool 有被封号的风险,请务必使用小号登录电脑版微信!!!

# 微信开启 devtool

  1. 从 github 上下载项目
git clone https://github.com/JaveleyQAQ/WeChatOpenDevTools-Python.git
  1. 下载项目依赖
pip install -r requirements.txt
  1. 需要先打开电脑版微信并登录
  2. 运行 main.py
python main.py

随便开一个小程序,出现下列信息则代表 devtool 开启成功

image-20240201160604783

点一下小程序右上角的三个点

image-20240201161923899

就可以开启 devtool 啦

image-20240201161816680

# 反编译 wxapkg

devtool 可以帮助我们更加方便的抓到小程序的包,但是我们还需要通过反编译 wxapkg 拿到小程序的源代码,因为在 devtool 的 source 里面,小程序的源码都被整合到了一个 js 里面很难看出代码的层次结构

# 提取 wxapkg

Windows 默认小程序的存放路径为

C:\Users\{系统用户名}\Documents\WeChat Files\Applet\{小程序的AppID}\

image-20240201164655557

# 解密 wxapkg

使用 pc_wxapkg_decrypt_python 来解密 wxapkg

python .\main.py --wxid wx0840558555a454ed --file .\__APP__.wxapkg --output dec.wxapkg

image-20240201165508082

# 解包 wxapkg

使用 wxappUnpacker 来解包 wxapkg

由于咸鱼之王小程序的包是有子包的,所以需要使用 - s 参数

.\bingo.bat .\dec.wxapkg -s=_subpackages_game_.wxapkg

解包成功~

image-20240201170202775

简单看了一下文件结构,这游戏看起来是用 coco2djs 写的,而且这 js 也没有加密全是源码,hmmm 再逆下去不就变成代码审计了吗… 那就到此为止咯:)

image-20240201190634245

# 其他

就这样结束似乎有点太潦草了,所以这里是我别的一些想法

既然咸鱼之王用的是 coco2djs, 而在官网的描述中,coco2d 是跨平台的,那我要是开发人员,肯定在安卓上用的也是 coco2d

image-20240201191145377

果不其然,下了一个 apk 版的咸鱼之王解包之后,真的在里面发现了 libcocos2djs.so

image-20240201191250448

有趣的是在 assets 目录下有 libjiagu.so , 这明显是套了一个 360 加固想要为难逆向的人呀

但 360 加固的是 dex, 但是 coco2d 的源码不全是 js 写的嘛?唯一的作用应该就是防止重打包了吧

image-20240201191325364

而且这个源代码甚至连 coco2dx-js 内置的把源码加密成 jsc 的功能都没有,这下连密钥都不用找了…

image-20240201194515519

那顺便记录一下加密成 jsc 类似下图的样子该如何应对吧

Jsc结构

很简单, 010editor 打开 libcocos2djs.so 全局搜索 jsb-adapater , 它前面那一串字符串就是 jsc 的密钥

Hex下 key

拿到了密钥,用 cocoscreatorjscdecrypt 就可以解密出源码来了

更新于 阅读次数