发展背景
适用于启动团队,低反复试验成本,需要更少的时间和资本投资
适用于成熟的大型商业公司和企业,对自我品牌有很高的要求
微信小程序架构分析
整个小程序框架系统分为两个部分:逻辑层(APP)和视图层(视图)。 提供了自己的视图层说明语言WXML和WXSS以及逻辑层框架,并在视图层和逻辑层之间提供数据传输和事件系统,从而使开发人员可以专注于数据和逻辑。
逻辑层应用程序
迷你程序开发框架的逻辑层使用引擎为Mini程序提供开发代码的运行环境以及微信Mini程序的独特功能。
逻辑层处理数据并将其发送到视图层,并接受视图层的事件反馈。
开发人员编写的所有代码最终将被打包到文件中,并在启动小程序时运行,直到小程序被销毁为止。此行为相似,因此逻辑层也称为应用。
在此基础上,微信添加了一些功能来促进迷你计划的发展:
注意: 的逻辑层不在浏览器中运行,因此无法使用Web中的某些功能,例如,等。
查看图层视图
框架的视图层用WXML和WXSS编写,并通过组件显示。
将逻辑层的数据反映到视图中,并将视图层的事件发送到逻辑层。
WXML()用于描述页面的结构。
wxs()是针对小程序的脚本语言。与WXML结合使用,您可以构建页面结构。
WXSS()用于描述页面样式。
组件()是视图的基本组件。
目录结构
该小程序包含一个描述整体程序的应用程序和多个描述其各自页面的页面。
迷你程序的主要部分由三个文件组成,必须放置在项目的根目录中,如下:
必需的文件功能
app.js
是的
迷你程序逻辑
app.json
是的
迷你计划公共配置
app.wxss
不
迷你计划公共样式表
迷你程序页面由四个文件组成,即:
所需的文件类型
JS
是的
页面逻辑
WXML
是的
页面结构
JSON
不
页面配置
WXSS
不
页面样式表
注意:为了促进开发人员减少配置项目,描述页面的四个文件必须具有相同的路径和文件名。
从上述体系结构图和文件组件来看,重点是分析迷你程序的逻辑层。逻辑层的主要组件由app.js,app.json,js文件,JSON配置文件等组成,因此这些是测试过程中分析的主要对象。
2►
源代码提取和常见漏洞
测试准备名称目的下载地址
迷你程序源代码采集工具
迷你程序源代码采集工具
迷你程序解密
微信开发人员工具
调试获得的小程序代码
数据包捕获分析和测试
交通代理
测试开始迷你程序搜索
作者的常见搜索方法是使用官方微信系接口的搜索功能和北京零零 Co.,Ltd。的0.ZONE平台,该功能可以自动收集目标企业应用程序(APK)列表,下载地址以及详细的介绍等。信息,半自动地收集迷你程序,公共帐户,生活帐户等的列表,名称和地址。您可以更准确地搜索目标。
源代码提取位置搜索
使用微信版,打开要测试的迷你程序后,单击“设置” - 文件管理 - 打开文件夹。
目录中有一个命名的文件夹,以“ WX”开头的文件夹是文件夹。如果以前打开了许多微信小程序,则目录中将有多个小程序文件夹。区别的第一种方法是根据修改时间来区分。第二种方法是在微信页上删除所有浏览的迷你程序,并重新打开需要测试的迷你程序,然后该目录中只有一个Mini 。
文件名是。这是一个加密文件。
迷你程序解密
加密方法如下:
此处使用的解密工具用Code.exe编写。用法是单击“选择加密迷你程序软件包”,然后选择。解密。解密的文件将在.exe当前目录的文件夹中生成。
注意:请务必选择微信小程序的原始位置。将要测试的文件移动将无法识别,并导致未能解密!
包装文件结构
解密后,使用文件打开它,您可以看到该软件包由三个部分组成,即头部段,索引段和数据段。
头部段
从“ 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” 软件包中相应文件的数据长度。
数据段
数据段是存储的文件内容,可以通过索引段的信息一一将其对应。
小程序的解说
通过索引段和数据段,我们可以还原一般文件结构
但这不是原始项目文件结构。原因是微信服务器将在Mini 源代码中按所有“ JS”文件中的所有“ JS”文件,然后按所有“ app-.js”文件,然后按所有“ JSON”文件中的所有“ JSON”文件将所有“ WXML”文件按在“ Page-.html”文件中,然后将“ WXSS”存储在“处理后的“ HTML”文件中,将存储在相应的页面目录中。
作者不会重复其各自文件的恢复。我们建议使用和两个。他们俩都可以直接对解密的软件包进行解码,并直接恢复原始项目的文件结构。
使用的命令是:
node wuWxapkg.js xxxxxx.wxapkg
使用更便携。将包装拖动要直接将其分解到程序窗口中,您可以在与软件包位置同一目录中获取同一名称的项目文件夹。
分包中存在常见的问题(即文件夹下有多个文件)
分别解密和反编译,然后将其放在同一目录中。
使用后,“ app-.js”/“ app-.json”/“ page-.html”/“。html”文件未成功分解:
node wuConfig.js
node wuJs.js
node wuWxml.js \[-m\]
node wuWxss.js
安全风险和漏洞
获得源代码后,我们可以将其加载到微信开发人员工具中进行调试。
以下列表实际战斗中常见的微信小程序漏洞
信息泄漏
敏感信息是指可能对开发人员的业务,合作伙伴和用户泄漏的数据,包括但不限于帐户,特权帐户信息,背景加密密钥,登录帐户密码,用户ID号,手机号码,手机号码,银行卡号码, ETC。
您可以在微信开发人员工具中使用搜索功能来搜索关键字,例如“”,“键”,“”,等。
让我谈谈目标和目标的利用。获得此信息后,您可以访问微信打开的平台调试工具(),并根据和接口文档的代码内容进一步利用它。
提示: 开发人员工具在版本1.06之后的代码质量分析模块中添加目标检测,因此泄漏只能在2022-06-02之前开发的小程序中找到。
SQL注入
SQL注入是指用户在Web程序代码中提交的参数直接插入SQL语句中,而无需有效过滤,从而在打破SQL语句的原始逻辑的参数中产生了特殊字符。黑客可以使用此漏洞执行任何SQL语句。
通过流量代理和数据包捕获,我们可以在运行时测试Mini程序的功能点。
配置:
将IP设置为127.0.0.1,端口自定义协议代理服务器
添加规则:程序“ .exe”,充当您刚刚设置的代理服务器
配置:
配置代理服务器,端口是您刚设置的自定义端口,地址为127.0.0.1
通过在功能点上执行SQL注入测试,数据库用户名已成功返回。
密码弱
弱密码意味着管理背景的用户名和密码设置为简单,或使用默认帐户。攻击者可以通过登录这些帐户或执行入侵操作的下一步来修改背景数据。
找到了迷你程序代码的审核,并找到了一个域名,并找到访问作为管理背景。
使用用户名:密码:成功登录到后台并获得了大量信息。
在将分解源代码导入微信开发人员工具中后,常见问题“ App.js ::不是”。
请按照错误提示提示查找文件 @///。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;
报告错误“依赖异常”
为了使程序在解次编译过程中不准确地恢复变量,可以通过比较恢复的目录结果并删除调用代码中的冗余路径来修复。
3►
测试摘要
迷你计划开发人员必须在开发过程中以以下原则为基础:
相互不信任的原则是不信任用户提交的数据,包括第三方系统提供的数据。必要的数据验证必须放置在背景验证中。
最低权限,代码,模块等的原则。只有可以完成任务并且不授予不必要的权限的最低权限。
禁止使用纯文本保存用户敏感数据。
迷你程序代码(不包括云功能代码)与传统Web应用程序的前端代码相似。它可以在外部获得并去倒置。重要的业务逻辑应在背景代码或云功能中进行。
背景接口调用和云功能调用必须有效身份验证。