/mac_wxapkg_decrypt

mac 端wxpkg文件解密(非解包)

Primary LanguagePython

mac端wxapkg解密

免责条款

本代码只用于个人技术研究交流使用,不得用于商业用途。

2023.7.9 update

3.8.0 使用了新的架构, 原来的代码已经不适用了。不过好在新版本未加密wxapkg, 所以可以直接解包。具体操作请参考说明

2022.6.4 update

issue 中提到,小程序的 key 跟数据库加密的 key 是同一个,我分析了一下发现这个 key 是通过请求获取的,也就是说我们并没有办法分析到key的生成逻辑。

说明

致敬BlackTrace/pc_wxapkg_decrypt。 同样是不想用移动端提取wxapkg, 所以分析了一下mac端的解密逻辑。该项目是把wxapkg解密。当前支持的微信MAC版本为: [3.4.0, 3.8.0)

3.8.0 采用了新的架构, 这个代码已经不适合了,不过好在wxapkg 未加密。可以直接在

/Users/xxx/Library/Containers/com.tencent.xinWeChat/Data/.wxapplet/packages/wx18ded455ed95f695/15

目录中找到一个**APP.wxapkg**, 这是未加密的包,可以直接使用。 至此, 这个 mac 解密库就不需要了。

使用方法

由于解密过程需要使用frida, 首先第一步就是关闭macos的SIP, 这个可以自行搜索。

我提供了2种解密的方法, 一种是提取解密用的key, 一种是直接让小程序帮我们解密。

如果你使用第一种,那么在提取key 之后,需要修改 decpkg.py中的key。 如果是第二种,那么就需要确认小程序所在的目录了,然后将文件输入输出路径写到 _agent.js中,第二种方法涉及到文件读写,提供的路径必须是小程序可读写的目录。

Mac小程序的路径在 ~/Library/Group Containers/xxxx.com.tencent.xinWeChat/Library/Caches/xinWeChat/4xxxxxxxx/WeApp/LocalCache/release/

在你修改好_agent.js 之后,就可以开始hook了。

打开任意一个微信小程序, 通过ps -ef | grep Mini 找到小程序的 pid, 这里会出现2个小程序,随便选一个就行,然后

frida pid -l _agent.js

如果是 way 1 ,日志会删除32个字节的key, 你只要提取前16个字节即可。

如果是 way 2, 则会有一个解密后的文件产生。

解密完成后,就可以用wxappUnpacker(https://github.com/gudqs7/wxappUnpacker)解包了。

原理

Mac加密方法比较简单, 取wxapkg的前1024个字节,通过 AES_ECB 进行加密, 加密的 key 来自于微信主程序,由于我没有逆向 key 的生成逻辑,目前只能怀疑 key 是 m_dbEnryptKey1653799882079.png

不过就算我们不知道key的生成逻辑,只要有这个key就够了。

最后,如果有同学想逆向key逻辑的,欢迎交流。