前言
以往反编译小程序源码都是要从移动端获取,现在pc端(mac和win)都支持了小程序,从pc端获取显然是更方便的,由于本人使用的的macbook,本篇文章将会讨论如何从mac端获取小程序源码。
准备
工具获取
- 解密的脚本:github.com/TinyNiko/ma…
- 反编译的脚本:gitee.com/ksd/wxappUn…
系统设置
关闭macos的sip,关闭方法参考:zhuanlan.zhihu.com/p/360711896
注意参考方式是m1版本mac的关闭方式
解密
获取小程序
运行一下要反编译的包,在macos最新路径(/Users/xxx/Library/Containers/com.tencent.xinWeChat/Data/.wxapplet/packages/ )下,根据小程序appid找到要反编译的包,一般老说比较的的是主包(x x x记得替换成自己的用户名)
获取密钥
pc端的小程序都是加密的,mac平台和win平台的加密方式不一样,这里是mac平台密钥的获取方式,获取密钥这里有两种方式,这里具体讲其中一种,也是我使用的一种,注意两种获取密钥的方式都需要关闭sip,与其说是两种方方法倒不如说是两种不同的工具
方法一(LLDB)
关于lldb安装自行查找资料
- 先把mac os的SIP做一个disable or enable SIP,否则lldb不能attach到wechat进程上。
- 打开wechat,但是不登录。
- lldb -p wechat的pid。
- br set -n sqlite3_key,断点设置好后,c继续运行。
- 微信登录后,会break到断点上,输入memory read --size 1 --format x --count 32 $x1(这个值你们的可能不一样,注意替换)
- 前16位即是你本机的wechat小程序加密的密钥,而完整的32位则是本机微信聊天记录sqlite db的密钥。(总共用32位16进制的密码,使用的时候记得去掉0x,只取前面的16位)
方法二(frida)
这种方式这里就不展开说明了,可以参考 github.com/TinyNiko/ma…
解密相关包
这里要用到解密脚本decpkg.py,修改脚本里的密钥,然后运行脚本把获取到包一个个解密,建议把未解密的包还有脚本什么的放在同一个文件夹,方便处理
python3 decpkg.py input out
//input就是你要解密包,out输出包
//下面是例子
python3 decpkg.py 6b2ab5ab4fa7620c3eebfc06272ddabf.wxapkg wx.wxapkg
//wx.wxapkg这个是解密后的包,可以随意命名
//按照这个方式解密所有的包
反编译
利用反编译脚本进行获取源码,详细的使用方法在工具下载的链接里也有,这里进行简单说明
//进入反编译的脚本里面,建议将解好密的包也放进来
//可以先解主包,一般是较大的包,运行命令前记得安装好依赖,根据工具下载里的说明安装就好
./bingo.sh wx.wxapkg
//上面的命令是当个包解出来的,下面的一般是用来解子包
./bingo.sh wx1.wxapkg -s=../wx
总结
总体来说获取小程序的源码不难,相关的密钥获取等也是建立在前人的基础上,有机会还会继续学习关于key获取原理等知识,探索一下密钥的生成规则,本文仅限学习交流使用