【Web实战】零基础微信小程序逆向(非常详细)从零基础入门到精通,看完这一篇就够了

【Web实战】微信小程序逆向 2E 70 6E 67”为带存放路径的文件名称,“00 00 11 7C”对应文件在小程序包中的具体偏移位置,“00 01 01 F7“对应文件在小程序包中的数据长度。但这并不是最初的原项目文件结构,原因是微信服务器会将小程序源码中所有的“js”文件压入“app-service.js”文件中,将所有的“json”文件压入“app-config.json”中,将所有的“wxml”文件压入“page-frame.html”文件中,“wxss”则在处理之后以“html”文件的形式存留在对应页面目录之下。 阅读详情
AI摘要

本文详细介绍了微信小程序的架构、逻辑层和视图层,探讨了如何从实战角度进行渗透测试,包括源码提取、安全风险如信息泄露、SQL注入和弱口令,以及开发者的安全原则。

本文以微信小程序为例,从实战入手,讲解有关于小程序这种新型攻击面的渗透,对于了解小程序的安全性和防范措施有一定的帮助。

什么是小程序?

作为中国特有的一种程序形态,小程序在我们的日常生活中已经无处不在。腾讯、百度、阿里巴巴、字节跳动、京东等各家互联网大厂都有各自的生态平台,当然,也有快应用这种行业联盟型的生态平台。
在这里插入图片描述

相较于传统的APP开发,小程序的区别有(以微信举例)

在这里插入图片描述

微信小程序架构分析

整个小程序框架系统分为两部分:逻辑层(App Service)和 视图层(View)。小程序提供了自己的视图层描述语言 WXML 和 WXSS,以及基于 JavaScript 的逻辑层框架,并在视图层与逻辑层间提供了数据传输和事件系统,让开发者能够专注于数据与逻辑。

在这里插入图片描述

逻辑层 App Service

小程序开发框架的逻辑层使用 JavaScript 引擎为小程序提供开发 JavaScript 代码的运行环境以及微信小程序的特有功能。

逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。

开发者写的所有代码最终将会打包成一份 JavaScript 文件,并在小程序启动的时候运行,直到小程序销毁。这一行为类似 ServiceWorker,所以逻辑层也称之为 App Service。

在 JavaScript 的基础上,微信增加了一些功能,以方便小程序的开发:

  • 增加 App 和 Page 方法,进行程序注册和页面注册。

  • 增加 getApp 和 getCurrentPages 方法,分别用来获取 App 实例和当前页面栈。

  • 提供丰富的 API,如微信用户数据,扫一扫,支付等微信特有能力。

  • 提供模块化能力,每个页面有独立的作用域。

注意:小程序框架的逻辑层并非运行在浏览器中,因此 JavaScript 在 web 中一些能力都无法使用,如 window,document 等。

视图层 View

框架的视图层由 WXML 与 WXSS 编写,由组件来进行展示。

将逻辑层的数据反映成视图,同时将视图层的事件发送给逻辑层。

WXML(WeiXin Markup language) 用于描述页面的结构。

WXS(WeiXin Script) 是小程序的一套脚本语言,结合 WXML,可以构建出页面的结构。

WXSS(WeiXin Style Sheet) 用于描述页面的样式。

组件(Component)是视图的基本组成单元。

目录结构

小程序包含一个描述整体程序的 app 和多个描述各自页面的 page。

一个小程序主体部分由三个文件组成,必须放在项目的根目录,如下:

文件必需作用
app.js是小程序逻辑
app.json是小程序公共配置
app.wxss否小程序公共样式表

一个小程序页面由四个文件组成,分别是:

文件类型必需作用
js是页面逻辑
wxml是页面结构
json否页面配置
wxss否页面样式表

注意:为了方便开发者减少配置项,描述页面的四个文件必须具有相同的路径与文件名。

在这里插入图片描述

从上述的架构图、文件组成部分来看,重点分析的就是小程序的逻辑层。而逻辑层主要的组成部分是由 app.js、app.json、js 文件、json 配置文件等组成,因此测试过程中主要分析的对象就是这一些。


微信小程序源码提取与常见漏洞

测试准备

系统

windows

常用工具

名称用途下载地址
wxappUnpacker小程序源代码获取工具
wxapkgconvertor小程序源代码获取工具https://github.com/ezshine/wxapkg-convertor/releases
UnpackMiniApp小程序解密
微信开发者工具调试获取的小程序代码https://developers.weixin.qq.com/miniprogram/dev/devtools/download.html
BurpSuite抓包分析测试https://portswigger.net/burp
proxifier流量代理https://www.proxifier.com/

测试开始

小程序搜索

笔者常用的搜索方式为使用微信官方小程序界面的搜索功能与北京零零信安科技有限公司的 0.zone平台,后者可以全自动采集目标企业APP(APK)列表、下载地址和其详情介绍等信息,半自动进行小程序、公众号、生活号等的列表、名称和地址采集。较官方搜索功能,可以更精确的检索目标。

在这里插入图片描述

在这里插入图片描述

源码提取

位置查找

使用windows版微信,打开待测试的小程序后,点击设置-文件管理-打开文件夹。

在这里插入图片描述

在WeChat Files目录下有一个名为Applet的文件夹,以“wx”开头的文件夹即为小程序文件夹。如果之前打开了很多微信小程序,那么目录中就会存在多个小程序文件夹。第一种区分方法是按照修改时间来进行区分。第二种方法是在微信页面中删除所有浏览过的小程序,重新打开需要进行测试的小程序,那么目录中只会存在一个小程序文件夹。
在这里插入图片描述

其中的文件名为__APP__.wxapkg ,为加密后的文件。

小程序解密

加密方法如下:

  • 首先pbkdf2生成AES的key。利用微信小程序id字符串为pass,salt为saltiest 选代次数为1000。调用pbkdf2生成一个32位的key。

  • 取原始的wxapkg的包的前1023个字节通过AES通过1生成的key和iv(the iv: 16 bytes),进行加密。

  • 接着利用微信小程id字符串的倒数第2个字符为xor key,依次异或1023字节后的所有数据。如果微信小程序id小于2位,则xorkey 为 0x66。

  • 把AES加密后的数据 (1024字节)和xor后的数据一起写入文件,并在文件头部添加V1MMWX标识。

在这里插入图片描述

这里使用的解密工具为代码果所编写UnpackMiniApp.exe,用法为点击“选择加密小程序包”,选中待解密的__APP__.wxapkg,将会在UnpackMiniApp.exe当前目录的wxpack文件夹中生成解密后的文件。
在这里插入图片描述

注意:一定要选择微信小程序原始位置,移动待测试的__APP__.wxapkg文件将会导致无法识别APPID,导致解密失败!

在这里插入图片描述

wxapkg包文件结构

在解密之后,使用010Editor打开该文件,可以看出,wxapkg包由三个部分组成,分别是头部段、索引段、数据段。

头部段

以“BE”开头,"ED"结尾,其中包含4个“00”空白填充,进行校验的索引段长度块、数据段长度块各四位,固定长度为14字节。

在这里插入图片描述

索引段

首先为4字节,为包内文件的数量,如“00 00 00 5F”代表一共有95个文件,然后是包内文件各自的信息,例:“00 00 00 16”代表文件名称的长度为22个字节,“2F 72 65 6F… 2E 70 6E 67”为带存放路径的文件名称,“00 00 11 7C”对应文件在小程序包中的具体偏移位置,“00 01 01 F7“对应文件在小程序包中的数据长度。

在这里插入图片描述

数据段

数据段为存储的文件内容,可通过索引段的信息进行一一对应。

在这里插入图片描述
)

小程序反编译

通过索引段与数据段,我们已经可以还原出一个大体的文件结构

在这里插入图片描述

但这并不是最初的原项目文件结构,原因是微信服务器会将小程序源码中所有的“js”文件压入“app-service.js”文件中,将所有的“json”文件压入“app-config.json”中,将所有的“wxml”文件压入“page-frame.html”文件中,“wxss”则在处理之后以“html”文件的形式存留在对应页面目录之下。

笔者对各自文件的还原不再赘述,在此推荐使用wxappUnpacker与wxapkgconvertor,二者均可以直接对解密后的wxapkg包进行反编译,直接还原出原项目的文件结构。

wxappUnpacker的使用命令为:

node wuWxapkg.js xxxxxx.wxapkg  

wxapkgconvertor的使用更为便携,将待反编译的wxapkg包直接拖入程序窗口中,即可在小程序包位置的同目录下获得同名的小程序项目文件夹。

常见问题
存在分包(即文件夹下有多个.wxapkg文件)

分别解密,反编译后,拼合到同一目录下。

使用wxappUnpacker后,”app-service.js” / “app-config.json” / “page-frame.html” / “.html”文件未成功反编译:
  • 将 app-config.json 中的内容拆分成各个页面所对应的 page.json 和 app.json;
node wuConfig.js <path/to/app-config.json>  

  • 将 app-service.js 拆分成一系列原先独立的 JS 文件,并使用 Uglify-ES 美化工具尽可能将代码还原为“编译”前的内容;
node wuJs.js <path/to/app-service.js>  

  • 从 page-frame.html 中提取并还原各页面的 .wxml 和 app.wxss 及公共 .wxss 样式文件;
node wuWxml.js \[-m\] <path/to/page-frame.html>  

  • 该命令参数为 .wxapkg 解包后目录,它将分析并从各个 page.html 中提取还原各页面的 page.wxss 样式文件。
node wuWxss.js <path/to/unpack\_dir>  

安全风险和漏洞

在获取到源码后,我们可以将其加载到微信开发者工具中进行调试。

下面列出实战时常见的微信小程序漏洞

信息泄露

敏感信息是指一旦泄露可能会对开发者的业务、合作伙伴和用户带来利益损害的数据,包括但不限于账号 AppSecret、特权账号信息、后台加密密钥、登录账户密码、用户身份证号、手机号、银行卡号等。

可利用微信开发者工具中的搜索功能来搜索例如“appid”、“key”、“phone”等关键字。

在这里插入图片描述

在这里插入图片描述

这里说一下针对AppID与AppSecret的利用,在获取到该信息后,可访问微信开放平台调试工具(https://developers.weixin.qq.com/apiExplorer),可根据小程序的代码内容配合接口文档进行进一步的利用。

提示:微信小程序开发者工具在1.06.2206020版本以后在代码质量分析模块中增加针对AppSecret 的检测,故AppSecret泄露只可能在2022-06-02以前开发的小程序中发现。

在这里插入图片描述

SQL 注入

SQL 注入是指 Web 程序代码中对于用户提交的参数未做有效过滤就直接拼接到 SQL 语句中执行,导致参数中的特殊字符打破了 SQL 语句原有逻辑,黑客可以利用该漏洞执行任意 SQL 语句。

通过proxifier的流量代理与BurpSuite的抓包,我们可以针对小程序运行时的功能点进行测试。

proxifier配置:

设置ip为127.0.0.1,端口自定义的HTTPS协议代理服务器

在这里插入图片描述

添加规则:程序“wechatappex.exe”,动作为刚才设置的代理服务器

在这里插入图片描述

BurpSuite配置:

配置代理服务器,端口为刚才设置的自定义端口,地址为127.0.0.1

在这里插入图片描述

通过对小程序功能点进行SQL注入测试,成功返回数据库用户名。

在这里插入图片描述

弱口令

弱口令指管理后台的用户名密码设置得较为简单或者使用默认账号。攻击者可以通过登录这些账号修改后台数据或进行下一步的入侵操作。

针对小程序的代码进行审计,发现一处回连域名,访问发现为管理后台。

在这里插入图片描述

在这里插入图片描述

使用用户名:admin 密码:123456 成功登陆后台,获取大量信息。

在这里插入图片描述

常见问题
将反编译后的源码导入微信开发者工具后,报错 “app.js错误:TypeError: _typeof3 is not a function”

按错误提示找到文件 @babel/runtime/helpers/typeof.js

将所有内容删除,并替换成

function _typeof2(o) {    
  "@babel/helpers - typeof";    
  return (_typeof2 = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {    
      return typeof o;    
  } : function(o) {    
      return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;    
  })(o);    
}    
function _typeof(o) {    
  return "function" == typeof Symbol && "symbol" === _typeof2(Symbol.iterator) ? module.exports = _typeof = function(o) {    
      return _typeof2(o);    
  } : module.exports = _typeof = function(o) {    
      return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : _typeof2(o);    
  }, _typeof(o);    
}    
module.exports = _typeof;  

报错“依赖异常”

为程序在反编译过程中对变量还原不准确,通过对比已还原的目录结果删除调用代码中多余路径即可修复。

测试总结

小程序开发者在开发环节中必须基于以下原则:

互不信任原则,不要信任用户提交的数据,包括第三方系统提供的数据,必要的数据校验必须放在后台校验。

最小权限原则,代码、模块等只拥有可以完成任务的最小权限,不赋予不必要的权限。

禁止明文保存用户敏感数据。

小程序代码(不包括云函数代码)跟传统 Web 应用的前端代码类似,可被外部获取及进行反混淆,重要业务逻辑应放在后台代码或云函数中进行。

后台接口调用以及云函数调用,必须进行有效的身份鉴权。


原文链接:https://forum.butian.net/share/2570


黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

记一次微信小程序逆向 环境搭建,HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等)、应急响应笔记、学习路线。这边数据包中有个签名值,还有个时间戳timestamp,防止重放,所以要尝试知道怎么计算这个sign值。看js里有挺多接口的,一开始稍微看了一下都没有什么敏感泄露,也没有什么未授权,字段中存在uid,尝试是否存在越权,结果uid与token关联的,所以无果。但总感觉是有点问题的,来都来到这一步,总不能放弃吧,至少把接口都看一遍。加密嘛,之前抓了看到是加密就放弃了,现在重新弄一弄。 阅读详情

相关推荐

3分钟搞定小程序逆向教程!2025最新Windows强制开启微信小程序控制台抓包教程(仅限交流学习)

以上就是Windows强制开启微信小程序控制台并抓包的完整教程啦!低版本微信要用对。小程序运行库需要手动清理。学会这个方法,以后再也不用傻傻找不到小程序数据接口了,效率直接翻倍!最后再次提醒,本教程仅供学习研究,不得用于任何商业或违法用途哦!💖。怎么打开别人微信小程序控制台教程 微信小程序逆向教程 代码简单说 打开微信小程序控制台 小程序抓包教程 小程序逆向教程 代码简单说 微信网页抓包教程 微信小程序怎么抓包

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 4981

小程序逆向分析 (一)

搞个新玩意的时候,先找个软柿子捏,不要一下就想放个大卫星。能反编译,然后再动态调试,那么曙光就在眼前。这个样本运气好,肉眼就可以看出是md5,复杂的js算法,可以考虑 PyExecJS、js2py or Node.js 来跑。所有的故事都会有结局,只有生活跟你没完。TIP: 本文的目的只有一个就是学习更多的逆向技巧和思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,和本文以及作者没关系,本文涉及到的代码项目可以去奋飞的朋友们知识星球自取,欢迎加入知识星球一起学习探讨技术。

qq_53058639的博客 4309

LangChain Agent Skills 实战指南:12个案例玩转智能体技能封装与编排

大语言模型应用开发中,智能体(Agent)的能力扩展正从零散的函数调用走向标准化封装。Agent Skills 将某项具体能力组织为带说明、代码与依赖的技能目录,让模型能自动发现和调度,其核心价值在于解决工具数量膨胀后的维护混乱与调用失控问题。与 Tool 的单一执行、MCP 的协议连接不同,Skill 更强调能力的语义描述与组合复用,配合 LangGraph 的状态编排和 LangSmith 的可观测性,可构建生产级智能体系统。在实际场景中,Agent Skills 可覆盖 RAG 知识库问答、多轮记忆保

weixin_34335458的博客 408

实用的微信小程序逆向教程!

洞悉安全,风洞网,认准官方网站! 简单复现一下小程序的逆向过程。 准备工具 一、pc端复现 微信PC版本—>https://pc.weixin.qq.com/ 小程序解密工具—>https://share.weiyun.com/uMqNGOXv nodejs环境—>https://nodejs.org/zh-cn/download/ 小程序逆向工具—>https://github.com/xuedingmiaojun/wxappUnpacker 二、移动端复现 安卓环境(安

风洞网 2万+

adb详细教程(四)-使用adb启动应用、关闭应用、清空应用数据、获取设备已安装应用列表

adb对于安卓移动端来说,是个非常重要的调试工具。通过ADB可以操作、管理设备上的应用。

公众号|软件测试老吴 3万+

复合材料RVE建模与力学性能分析实战指南

代表体积元(RVE)建模是复合材料多尺度分析的核心技术,通过建立微观结构与宏观性能的定量关联,可准确预测材料力学行为。本文基于ABAQUS平台,详细解析三材料(纤维/基体/界面相)RVE建模全流程,包括参数化几何建模、周期性网格划分策略、材料属性定义技巧等关键技术环节。针对碳纤维增强环氧树脂等典型复合材料,提供网格控制参数建议和材料参数参考表,并重点说明周期性边界条件的实现方法与验证标准。通过Python脚本自动化处理和优化分析流程,可显著提升计算效率,为复合材料设计提供可靠仿真依据。

weixin_34062469的博客 549

网络安全学习路线(非常详细)从零基础入门到精通,看完这一篇就够了

小白人群想学网安但是不知道从哪入手?一篇文章告诉你如何在4个月内吃透网安课程,掌握网安技术。

QXXXD的博客 1059

【Unity3D渲染】Unity3d实现Photoshop的各种图层混合模式

Adobe Photoshop图层混合原理、Unity ShaderLab图层混合实现

a310989583的专栏 2438

小白如何自学网络安全,零基础入门到精通,看这一篇就够了!

网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

kjuhfkicf154的博客 834

RTKLIB模糊度固定实战:三种模式对比与部分模糊度固定代码解析

本文深入解析RTKLIB中模糊度固定的三种核心模式(continuous、instantaneous、fix and hold),对比其性能与适用场景,并详细拆解了部分模糊度固定技术的源码实现。通过实战案例与代码级解析,为GNSS高精度定位开发者提供了在不同数据特性下提升固定成功率的优化思路与配置建议。

efc1234567的博客 473

SPEI计算避坑指南:gma中Distribution和FitMethod参数怎么选?

本文深入探讨了在SPEI计算中如何科学选择gma库中的Distribution和FitMethod参数,帮助研究者避开常见陷阱。详细分析了LogLogistic、Gamma和Pearson3三种分布的适用场景,以及LMoment与MLE拟合方法的优缺点,为气象干旱研究提供实用指南。

weixin_30308101的博客 254

网络安全学习路线(非常详细)从零基础入门到精通,看完这一篇就够了!

这篇文章为零基础小白提供了4个月系统学习网络安全的完整路径。内容分为四个阶段:基础阶段(网络安全法、Linux、计算机网络、编程语言等)、渗透阶段(SQL注入、XSS、漏洞扫描等攻防技术)、安全管理(渗透报告、应急响应等)和提升阶段(密码学、逆向工程等)。文章还附带全套学习资源包,包括成长路线图、视频教程、技术文档等,帮助新手快速入门网络安全领域。通过结构化学习和实战训练,读者可以在短时间内掌握核心网络安全技能。

程序员阿飘 的博客 1034

小论文/大论文必备 | RT-DETR目标检测、数据集增强 | 引入多种数据集增强方法,支持图像和标签同步扩充增强,助力小论文和大论文实验涨点策略,平均提升模型mAP约1-2个百分点

RT-DETR目标检测数据增强策略研究 ,本文针对RT-DETR目标检测模型提出9种数据增强方法,包括几何变换(水平/垂直翻转、中心裁剪)、光照调整(亮度、对比度)和噪声添加(高斯/椒盐噪声)等。所有增强操作均保持图像与标签同步变换,确保训练数据的准确性。实验表明,该策略可提升模型mAP 1-2个百分点,对小目标检测效果尤为显著。文中提供了完整的Python实现代码,支持批量处理图像和标签文件,并详细说明了各增强方法的功能特点。该方法通过提升数据多样性,有效增强了模型在复杂场景下的鲁棒性和泛化能力。

Ai缝合怪、助力小伙伴高效发论文 463
上一篇: 2023应届毕业生找不到工作很焦虑怎么办?
下一篇: 【建议收藏】常见内网穿透工具(非常详细)从零基础入门到精通,看完这一篇就够了
程序员_大白
博客等级 码龄5年 1万+粉丝 4001原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值