微信小程序反编译和代码加解密思路分享

最近博主在工作中做一个APP抓包采集时,发现一个APP的参数和返回都有加密,请求头还做了签名验证,一开始看到这种深度加密的,我是拒绝的,因为这种看到就头疼,很难弄,如图:

隔了2周,客户又找我,让我试试它的小程序,一看小程序也是上面这种方式,刚好那几天闲着没事,一开始我的目标是【先解决返回值解密问题】;
从图上内容看,这种一般对称加密(可加可解),而能在微信小程序里用的对称加密方式可不多,这里就先猜它用的是【CryptoJS】方式。

这时候又有一个问题,如何找到秘钥,一开始我也没想到去反编译微信小程序,后来是在它的官网前端源代码中找到被转换了的秘钥。通过转码手段把秘钥还原后,果然能够解密;(这里就有一个思路,就是这种加密型网站,手机APP,小程序看不到,只要是网页要解密的,秘钥一般在前端能拿到,看一下H5和PC)

在上面成功解密了,我又接着该秘钥加密,然后通过POST去模拟请求,发现HTTP状态返回401,仔细检查后,发现又有一道难关,它服务做了参数验签。

根据通用规则,这种一般就当MD5方式处理。

这个时候,我就根据请求头猜MD5组合方式,搞了一上午,根据常用A-Z排列,还是猜不中它的组合方式,搞得我都快放弃了。(后来加签方式,参数与我猜的区别不大,失之豪厘差之千里啊)

中午吃饭的时候,灵光一闪,微信小程序是JS脚本写的,是不是可以反编译,这样我就可以看到它的加签组合方式。通过这个思路,在网上找大神写的反编译插件,找了好几个都用不了,后面 通过 https://github.com/Ackites/KillWxapkg 成功反编译。

反编译思路:
1、降低当前PC微信版本到3.7之前,因为3.7后的看不到反编译需要的 .wxapkg 文件。(我装的3.6,这种方式还不知道能用多久,后续就怕微信禁止3.7之前的登陆)
2、登陆后,访问你要反编译的程序,然后在文件夹中,找到 对应的 .wxapkg 文件,很好识别,根据APPID识别即可,APPID在抓包中可以看到。

3、然后通过 KillWxapkg 处理。

KillWxapkg 处理流程(安装GO环境):

克隆项目

git clone https://github.com/Ackites/KillWxapkg.git

进入项目目录

cd ./KillWxapkg

下载依赖

go mod tidy

编译

go build


上面搞完后 执行命令:

.\KillWxapkg.exe -id=APPID -in="1.wxapkg" -restore -pretty

反编译后,最后成功拿到它的加签方式:

如我所料,果然是MD5加密,不过参数只有4个