综合彩票开奖结果 > 新闻动态 >

【安服技巧】微信小程序数据包加密渗透测试

发布日期:2026-02-05 00:43点击次数:

PART 01前言

   随着移动互联网的快速发展,微信小程序成为企业和个人实现功能服务的重要载体。然而,在小程序广泛应用的背后,数据包加密技术的日趋复杂,也为渗透测试和安全服务带来了新的挑战。在进行安服工作时,准确掌握小程序数据包加密的处理方式,是发现潜在安全隐患的重要一环。        本文将围绕微信小程序的数据包加密问题,从实际渗透测试的角度,分享三种常用的逆向分析方法:通过 PC 端开启 devTools模式获取关键信息、在流量层压缩文件获取代码,以及移动端wxapkg反编译。希望能为读者提供切实可行的技术思路,为日常安服工作助力。

PART 02开启devTools直接调试找加密

  PC微信小程序直接使用工具开启微信小程序devTools模式。使用工具如下  

  https://github.com/JaveleyQAQ/WeChatOpenDevTools-Python

  https://github.com/eeeeeeeeee-code/e0e1-wx

   使用上述工具即可开启wx小程序devTools,如果无法开启降低WX版本或TencentlWeChat\XPluginlPluginsRadiumWMPF\文件夹,将数字文件夹里面的内容清空放入老版本的微信小程序。https://github.com/tom-snow/wechat-windows-versions/releases

图片

   然后和正常浏览器逆向调试一样了

图片

   抓包建议是使用Charles转发到yakit或burp,配置方法

   https://www.52pojie.cn/thread-1849166-1-1.html

图片

   建议测试的PC微信安装在虚拟机或者监控wx目录防止wx更新小程序导致开devTools工具无法使用。如下使用火绒监控wx对小程序的操作。

图片

图片

   案例:

   抓包数据加密

图片

   调试发现加密是国密

图片

图片

PART 03流量压缩文件获取代码

   打开wx小程序有下载wx小程序压缩代码流量wxqcloud.qq.com.cn

图片

图片

   访问下载是一个zstd文件就是小程序前端代码。

图片

   使用https://github.com/facebook/zstd/releases/tag/v1.5.6解压缩

图片

   解压文件后缀改为.wxapkg

图片

   使用unveilr反编译https://app.appletsec.xyz/#downloadList

图片

   便能获取wx小程序前端代码了

图片

PART 04移动端wxapkg反编译    以上方法无法定位加密或PC微信小程序打开白屏,可使用移动端获取wxapkg文件反编译获取wx小程序前端代码。推荐使用ios端,位置如下/var/mobile/Containers/Data/Application/{系统UUID}/Library/WechatPrivate/{user哈希值}/WeApp/LocalCache/release/{小程序的AppID}

图片

   案例:    PC微信小程序打开白屏

图片

   使用移动端抓包

图片

   发现加密的数据有点多。先使用EmEditor搜索一下反编译的代码,定位加密文件位置。

图片

   https://js-deobfuscator.vercel.app/反混淆一下,由于没什么关键字一顿搜索找到了data加密算法为DES。

图片

   查看调用库猜出了tokenc是国密hash算法

图片

   sm3 hash算法

图片

   然后就是X-WECHAT-HOSTSIGN,找了半天没找到加密算法。查了这个小程序类似plug开发。翻阅wx小程序官方文档。https://developers.weixin.qq.com/miniprogram/dev/framework/plugin/development.html

图片

                       插件在使用 wx.request 等 API 发送网络请求时,将会额外携带一个签名 HostSign ,用于验证请求来源于小程序插件。这个签名位于请求头中,形如:

X-WECHAT-HOSTSIGN: {'noncestr':'NONCESTR', 'timestamp':'TIMESTAMP', 'signature':'SIGNATURE'}

   其中, NONCESTR 是一个随机字符串, TIMESTAMP 是生成这个随机字符串和 SIGNATURE 的 UNIX 时间戳。它们是用于计算签名 SIGNATRUE 的参数,签名算法为:

SIGNATURE=sha1([APPID,NONCESTR,TIMESTAMP,TOKEN].sort().join(''))

其中,APPID 是 所在小程序 的 AppId (可以从请求头的 referrer 中获得);TOKEN 是插件 Token,可以在小程序插件基本设置中找到。

网络请求的 referer 格式固定为 https://servicewechat.com/{appid}/{version}/page-frame.html,其中 {appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本。

插件开发者可以在服务器上按以下步骤校验签名:

1.sort 对 APPID NONCESTR TIMESTAMP TOKEN 四个值表示成字符串形式,按照字典序排序(同 JavaScript 数组的 sort 方法);

2.join 将排好序的四个字符串直接连接在一起;

3.对连接结果使用 sha1 算法,其结果即 SIGNATURE 。

   自基础库版本 2.0.7 开始,在小程序运行期间,若网络状况正常, NONCESTR 和 TIMESTAMP 会每 10 分钟变更一次。如有必要,可以通过判断 TIMESTAMP 来确定当前签名是否依旧有效。

   10分钟才变更对渗透测试或被动扫描来说影响不大,当然也能使用mitmproxy中间代理替换更新时间戳和signature。    综上完成了此案例小程序的多个加密和验签操作,最后这个小程序也是出了多个高危漏洞。PART 05总结

  通过本文的探讨,我们从三种典型的方法入手,深入解析了微信小程序数据包加密的逆向分析思路。从 PC 端调试工具的使用、流量压缩文件的解压反编译,到移动端抓取 wxapkg 文件,完整地展现了渗透测试中处理数据包加密问题的实际流程。在实践中,我们不仅借助多种工具和技术手段定位关键加密逻辑,还通过分析代码逻辑逐步还原了多种加密与验签算法。这些方法不仅能够帮助安服人员快速发现小程序的安全隐患,也为渗透测试中复杂加密场景的处理提供了有力支持。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。

Powered by 综合彩票开奖结果 RSS地图 HTML地图

Copyright Powered by365建站 © 2013-2024