xiao1star2025-07-29文章来源:SecHub网络安全社区
Release v1.5.0 · wux1an/wxapkg · GitHub–静态分析
GitHub - JaveleyQAQ/WeChatOpenDevTools-Python: WeChatOpenDevTool 微信小程序强制开启开发者工具–动态分析
点击设置->文件管理
打开文件夹->来到上级目录的Applet
文件中
该文件中就存放着我们的小程序
现在已经知道了小程序存储的位置了,让我们开始逆向吧
我们打开一个游戏的小程序
可以看到在文件夹中生成了3个文件,主要的是wx+数字
的文件夹
在我们的反编译工具的目录下打开cmd
输入
wxapkg_1.5.0_windows_amd64.exe scan
对我们本地的小程序文件进行扫描
接着按住回车键进行反编译处理
可以看到在反编译工具的目录下生成了一个反编译的文件夹
接着我们可以用vs
或者phpstorm
文件打开,这样我们就就可以实现静态的审计
若要实现动调可以使用WechatOpenDevTools
但是要注意这个对微信的版本是有要求的,其次还容易封号所以建议使用小号测试
如何降低微信版本
GitHub - tom-snow/wechat-windows-versions: 保存微信历史版本
确定小程序版本,可以打开任务管理器,在如下图这个位置
右键选择打开文件所在位置,可以看到我们的是13639
看起来是不符合的,那么我们可以先将微信版本降低之后再操作,如何微信小程序的版本不是符合工具的版本的话。,可以先退出微信,然后把高版本的文件夹删除再次测试
接着开启小程序之后,在工具的文件夹中打开cmd,然后输入
WechatOpenDevTools-Python.exe -x
接着点击小程序的右上角的三个点出现一个DevTools
工具
打开即可进行动调
现在我们以某个小程序为例来进行分析
首先是对其进行反编译获取其源码
接着我们对其进行抓包处理
如何不知道如何抓取小程序的包,可以参考如下视频
https://www.bilibili.com/video/BV14h4y1A7Ti?vd_source=f20e7e8fc9017bb82c08ed10fbef44a3
可以看到其路由为/gateway/sso/bbs/Admin/SysNews/ClientSysNews
,我们直接在源码中搜索ClientSysNews
即可,定位到在app-service.js
中
我们还可以看到有一个json
的参数,我们直接搜索这json:
即可
我们发现共有6处、在这里就都演示出来了,其中有一处是请求数据的(我们要找的地方)、一处是文件上传的、剩余的json
参数的值都为空
此处就是我们要找的地方但是我们无法直接分析出他是如何加解密的
我们就可以使用动调了实现,使用前面介绍的工具即可,先是network->Initiator,可以看到这里又有页面所使用的代码,由于我们无法通过名称直接看出具体在哪里,所以只能挨着看
最终成功找到了指定的代码
接着就打上断点,看看其加密过程,可以看到在这里我们的数据是加密的我们就依次往上看
可以看到在这个位置我们数据还是未加密的状态
再到下一步就可以看到数据加密了
,可以确定 e.data = o.default.BaseConfig().PWDDATA_json + s.JS0N.stringify(e.data, f).toString()
这一段就是加密的
接着我们跟进去,来到如下图所示可以看到参数t是我们的加密数据,通过调用stringify
方法来完成加密的
有了加密其解密其实就在其下面
后来本想写一个脚本实现这个加密过程但是奈何能力有限无法实现,但是我们可以通过控制台来对数据进行加解密操作
o.default.BaseConfig().PWDDATA_json + s.JS0N.stringify('要加密的数据', f).toString()
成功加密
解密数据
JSON.parse(s.JS0N.parse("要解密的数据".split(o.default.BaseConfig().PWDDATA_json)[1], f).toString(s.enc.Utf8))
成功解码出来
接着我们对加密数据进行修改,然后进行加密
o.default.BaseConfig().PWDDATA_json + s.JS0N.stringify('{"TimeStamp":"","iPageSize":10,"pageIndex":0,"bIsPage":true,"DBSrc":"100","Opt":"Detail","No":"230810164513927532","OrgNo":"00110001","DCode":"ascasc"}', f).toString()
将加密的数据放到burp中成功得到回显
接着将回显的数据进行解密操作,解密数据如下