VBA脚本终章编译器崩溃

一、介绍

本篇文章为VBA脚本隐藏技术的最后一篇,将介绍如何在保证VBA脚本正常执行的情况下,使分析人员无法打开编译器。

那么为什么需要分析人员无法打开编译器呢?

首先,我们需要引入一个知识点。

在上篇《VBA隐藏技术stomping》中,我们分析过,当编译脚本的VBA版本与运行时版本一致时,才能执行P-Code,可以通过修改VBA脚本的源码,来欺骗OLE分析工具,但是该方法无法欺骗编译器,因为编译器版本与脚本文件运行版本一致时,编译器会将P-Code反编译,分析人员可以看到VBA脚本的真实代码,stomping技术便会失效,因此我们需要阻止分析人员打开编译器。反之,当我们分析恶意代码时,遇到编译器无法打开的情况下,如何排查该技术的使用,下面我们介绍如何实现编译器崩溃。

二、VBA编译器崩溃

我们先创建一个OFFICE文档文件,更改文件类型为zip压缩文件,然后解压,在word目录下找到vbaProject.bin。

图片

打开vbaProject.bin文件,找到PROJECT流处的”Module=“,可以直接搜索特征”/&H00000000“,找到“Module=NewMacros“,NewMacros的非固定值,该字符串需要自行判断,为了使编译器崩溃,我们需要修改该字符串。

图片

下图中,NewMacros被清零,也可以将Module=NewMacros删除,但是换行符"0x0D,0x0A"需要保留,同时后面的信息需要前移。

图片

修改后保存,然后重新将文件打压缩包,然后修改文件后缀,改为文档文件,打开文件让宏执行,观察宏是否能够正常执行,如果宏能够正在执行,打开红管理器,点击编译。

图片

当点击编译时,提示未知的错误则说明修改成功,编译器无法打开。

注:高版本OFFICE会提示位置的错误,如果使用的是低版本的OFFICE,OFFICE会随编译器一同崩溃。

图片

三、实例

下面我们介绍一个使用VBA编译器崩溃技术的实例,FORTINET发布了一篇关于Energoatom公司被钓鱼文件入侵的报告,其链接为https://www.fortinet.com/blog/threat-research/malware-disguised-as-document-ukraine-energoatom-delivers-havoc-demon-backdoor。

钓鱼文件HASH[b773fa65bb375e6fe6d387f301f6bf33219189ea1d4a06762e965a9eba7de4e8],该钓鱼文件是一个word文档,报告中称钓鱼文件中VBA脚本使用了重定向技术,将vbaProject.bin重定位到EbDYTPZ[.]vEypm,随后在打开word查看VBA代码时,编译器崩溃,分析人员怀疑是PROJECT流中包含了错误签名导致编译器崩溃,因此使用oletools对EbDYTPZ[.]vEypm进行了源码提取。

图片

图:FORTINET报告

我们找到该样本,对EbDYTPZ[.]vEypm重新进行了分析,发现导致编译器崩溃的原因是攻击者删除了Module的信息。同时确认该样本中没有使用stomping技术,因此使用OLE分析工具解析代码不会影响后续分析。



四、修复

因为微软没有开源P-code解析方法,所以我们在分析恶意代码时,如果遇到同时使用VBA脚本编译器崩溃和stomping技术的样本时,又该如何应对呢?

根据上文提到的方法反推,可以试着修复VBA文件,查看崩溃原因是否是由Module信息的缺失引起的,如果是该原因,修复该处缺失的信息。

那么我们如何知道Module模块的名称呢?

此处我们对文件EbDYTPZ[.]vEypm文件进行修复,并验证之前的分析结果。

常规OFFICE文档文件中,在word目录下的vbaData.xml文件中含有模块信息。

图片

在[b773fa65bb375e6fe6d387f301f6bf33219189ea1d4a06762e965a9eba7de4e8]中,vbaData.xml文件被重定位到iuM.dsn,因此我们打开iuM.dsn。

图片

我们可以看到wne:name="Project.Module1.AutoOpen",其中Project代表Project流,Module1是Module的名字,等于同我们自己生成文件的NewMacros,后门AutoOpen是函数名。

图片

打开EbDYTPZ[.]vEypm文件,通过特征”/&H00000000“特征定位Module,可以发现该处并没有Module模块,确定攻击者将该字段抹除。

图片

因此修复该文件需要Module的信息重新编辑进去,其余信息后移。

图片

修复完脚本文件后,重新将文档文件打包,修改后缀,然后打开word,点击的编译器编辑按钮,发现VBA脚本编译器可以正常打开。

图片

接下来,我们分析一下为什么修改Module信息会导致崩溃。

将调试器附加到word进程,点击编辑后,word会执行vbe6.dll中的代码,该dll创建Visual Basic环境,当加载Module1实例时,因Module信息确实,对象创建失败,this指针为空。

图片

在后面的调用中会产生地址错误。

我们将脚本修复,重新附加word进程,对象创建成功,this指针指向正确的位置。

图片

五、总结

VBA编译器崩溃技术与stomping和重定向技术没有冲突,三者可以相互组合使用,互补每个技术中存在的缺陷,希望读者可以在攻防对抗中,灵活使用这些技术。

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

系统思考—战略

“有策略而无战术,是取胜之最慢之道。有战术而无策略,是败亡之前的嘈杂。”—孙子 最近接触的中小企业,充分能感受到在经济下行的情况下,组织与战略是不可分割的两个方面。有时候公司组织出现了问题,可能是因为战略不…

maven3.9的settings.xml 内容学习

settings.xml 文件介绍 settings.xml 是 Maven 的配置文件,它允许你自定义 Maven 的行为,比如设置仓库、代理、认证信息等。在 Maven 3.9 中,settings.xml 的结构和内容可能与之前的版本相似,但可能会有一些小的改进或变化。下面…

单分支:if语句

示例&#xff1a; /*** brief how about if? show you here.* author wenxuanpei* email 15873152445163.com(query for any question here)*/ #define _CRT_SECURE_NO_WARNINGS//support c-library in Microsoft-Visual-Studio #include <stdio.h>#define if_state…

MoJoCo 入门教程(七)XML 参考

系列文章目录 前言 表格第二列中的符号含义如下&#xff1a; ! 必填元素&#xff0c;只能出现一次 ? 可选元素&#xff0c;只能出现一次 * 可选元素&#xff0c;可多次出现 R 可选元素&#xff0c;可递归出现多次 一、简介 本章是 MuJoCo 中使用的 MJCF 建模语言的参考手册。…

Scala---集合(list,set)详解

一、List list集合有顺序&#xff0c;有索引&#xff0c;元素可重复 1、Nil 空列表 val lstNilprintln(Nil)//List()//向左侧添加一个元素,::起到右连接的作用。val lst18::(4::(0::Nil))println(lst1)//List(8, 4, 0)2、创建集合 //调用apply方法进行创建val list List(1,…

【投稿优惠|稳定检索】2024年低碳发展与地球科学国际会议 (LCDES 2024)

2024年低碳发展与地球科学国际会议 (LCDES 2024) 2024 International Conference on Low Carbon Development and Earth Science 【会议简介】 2024年低碳发展与地球科学国际会议即将在长沙盛大召开。本次会议将汇聚全球低碳发展与地球科学领域的专家学者&#xff0c;共同探讨…

如何快速成为顶尖项目经理?新手必看!

当今社会&#xff0c;万事皆项目&#xff0c;企业也面临着各种变化&#xff0c;企业项目管理的能力和水平对组织和个人的核心竞争力有着重要影响。 作为项目经理&#xff0c;需要养成持续学习的习惯和能力&#xff0c;具备顶级项目经理的专业水平和素养&#xff0c;才能使自己…

登录解析(前端)

登录代码 1、登录之后做了什么&#xff1f; 执行登陆方法&#xff0c;成功之后&#xff0c;路由跳转到指定路径或者根目录 2、this.$store.dispatch是什么意思&#xff1f; this.$store.dispatch(‘Login’, this.loginForm) 来调取store里的user.js的login方法3、this.$r…

Hive:transform和udf

工作中发现有时候会用到python脚本进行数据计算&#xff0c;但是现在貌似已经不这样再处理&#xff0c;一般使用封装好的udf函数。 transform的基本用法为&#xff1a; transform中的值作为输入&#xff0c; 然后传递给python脚本&#xff0c;最后经过python的处理后&#xf…

将MySQL数据库导入到EA模型的教程

将MySQL数据库导入到EA 1.下载安装mysql-connector-odbc2.在管理工具中新增ODBC数据源3.在EA中新建项目4.链接MYSQL数据源4.1 安装64位的ODBC驱动可能出现”在连接ODBC 时发生错误&#xff0c;请相关检查设置“的提示&#xff0c;卸载后重新安装32位ODBC驱动后可以正常执行 5.导…

vue纯前端实现表格分页及条件查询功能

由于接口返回数据过慢&#xff0c;故而采用前端对数据进行处理分页的方法实现表格分页及条件查询。 一、表格 表格采用elementUI的el-table&#xff0c;只需要对数据data进行处理赋值即可。 <el-table:data"tableData"style"width: 100%"><el-t…

智慧园区引领产业智能化升级:科技创新驱动打造智慧化、高效化产业新未来

随着全球科技革命的深入推进&#xff0c;以大数据、云计算、物联网、人工智能等为代表的新一代信息技术正深刻改变着传统产业的发展模式。在这一背景下&#xff0c;智慧园区作为产业智能化升级的重要载体和平台&#xff0c;正以其前瞻性的规划、创新的科技和卓越的实践&#xf…

tencentcloud-sdk-python-iotexplorer、tencent-iot-device、cos-python-sdk-v5有什么用

1. tencent-iot-device tencent-iot-device 是腾讯云提供的物联网设备 SDK&#xff0c;用于在物联网场景中开发和连接设备。这个 SDK 提供了丰富的功能和接口&#xff0c;可以帮助开发者快速构建稳定、高效的物联网应用。 主要功能和特点&#xff1a; 设备连接管理&#xff1…

OpenCV杂记(2):图像拼接(hconcat, vconcat)

OpenCV杂记&#xff08;1&#xff09;&#xff1a;绘制OSD&#xff08;cv::getTextSize, cv::putText&#xff09;https://blog.csdn.net/tecsai/article/details/137872058 1. 简述 做图像处理或计算机视觉技术的同学都知道&#xff0c;我们在工作中会经常遇到需要将两幅图像拼…

Windows之一些常用命令

在 Windows 操作系统上&#xff0c;你可以使用命令行来创建新的文件。以下是几种常用的方法&#xff1a; 使用 echo 命令创建文件&#xff1a; echo. > filename.ext将 filename.ext 替换为你想要创建的文件名和扩展名。例如&#xff0c;要创建一个名为 example.txt 的文本…

IntelliJ-platform plugIn 插件开发专题内容介绍,学习指导(一)

这系列文章出炉对于笔者来说确实不容易&#xff0c;历时快两年了&#xff0c;先后迭代了3版本&#xff0c;暂时与官方最新版本API同步&#xff08;2024.03&#xff09;&#xff0c;文章内容覆盖2022~2024版内容 专题由来 最早接触插件开发是源于公司一个国际化项目&#xff0c…

以pytorch pipeline并行为例,分析各kernel的耗时占比及性能瓶颈

以pytorch pipeline并行为例,分析各kernel的耗时占比及性能瓶颈 1.生成pipeline并行的测试代码2.pipeline profing3.生成nsys2json.py代码4.将nsys sqlite格式转chrome json格式5.生成耗时成分统计代码6.统计耗时成分7.耗时成分如下:8.查看GPU PCIE链路状态9.链路状态如下10.Ns…

js高级 笔记01

01 静态成员和实例成员 构造函数中的属性和方法我们称之为成员 成员是可以添加的 通过构造函数new出来的对象叫做实例化对象 实例成员就是构造函数内部通过this添加的对象 实例成员只能通过实例化对象去访问 不能通过构造函数去访问 静态成员 是在构造函数本身上添加的…

【Xilnx FPGA】 ubuntu20.04 vivado 和vitis找不到zynq设备

参考如何下&#xff0c;ubuntu下需要手动安装驱动&#xff0c;在安装目录下执行sudo ./install_drivers Install Cable Drivers (Linux Only) - Digilent Referencehttps://www.xilinx.com/support/documentation/user_guides/ug344.pdfAMD Customer Community $(DIR)Vivado/…

若依框架在企业级应用开发中的核心作用

随着互联网技术的飞速发展&#xff0c;企业级应用开发面临着日益复杂的需求与挑战。在这样的背景下&#xff0c;高效、稳定且易于维护的开发框架显得尤为重要。其中&#xff0c;若依&#xff08;RuoYi&#xff09;作为一款备受开发者青睐的Java快速开发平台&#xff0c;以其强大…