逆向分析:OfficeVBS宏类型文档

admin 2026-04-02 03:45:00 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文分析OfficeVBS宏类型文档的逆向分析过程,通过解压OOXML格式文档、使用oletools提取宏代码,发现其通过base64编码隐藏可执行文件。文章详细演示了从VBS脚本中解码恶意exe文件并分析其位移加密算法的完整流程,最终通过Python脚本成功解密获取flag。 综合评分: 82 文章分类: 逆向分析,恶意软件,WEB安全,漏洞分析,安全工具


cover_image

逆向分析:Office VBS宏类型文档

蚁景网安

2026年4月1日 17:05 湖南

以下文章来源于蚁景网络安全 ,作者Ba0

蚁景网络安全 .

致力于为你带来更实用的网络安全技术内容!

该题目贴合实际,在实战中经常遇到此类宏病毒。

将Office文档中嵌入以VBA(Visual Basic for Applications)编写的宏代码脚本,当运行Office文档时,便可以执行各种命令。

VBA脚本文件重定向能够将脚本默认文件vbaProject.bin进行替换,在打开文本时加载其他文件,增加分析者的分析复杂程度。

1、初步分析

在 Office 2007 之后的 Office 文档格式采用的是 OOXML 标准格式。那什么是 OOXML 标准?这里的 OOXML 的全称是 Office Open XML File Formats 或被称为 OpenXML 格式,这是一个基于 zip+xml 定义的文档格式。简单的说就是Office文档是一些xml文档压缩文件,因此我们将一个word文档进行zip解压,可以获得一些xml文件

打开发现是一堆乱码,此时就需要借助大佬们的工具了。

2、oletools

oletools对该文件进行分析,oletools将宏源码完整的还原了出来。

官网:https://github.com/decalage2/oletools/releases

这里采用pip安装模式

pip install -U oletools

运行命令

olevba -c protected_secret.docm > code.vbs

3、分析vbs代码

直接搜索:AutoOpen

里面有太多垃圾代码了

首先将输入的flag异或7

有点意思了,解码exe的base64编码,然后运行exe执行操作,最后再删除exe程序

4、运行Vbs得到exe

将重要的代码拿出来,然后生成exe

Set fso =CreateObject("Scripting.FileSystemObject")
Set objShell =CreateObject("WScript.Shell")

/*
省略了一大堆 base64赋值串
*/

tempPath ="D:\temp11\temp"
Set tempfile = fso.CreateTextFile(tempPath,True)
fso.GetFile(tempPath).Attributes=2
tempfile.WriteLine xpkdb
tempfile.Close

batPath ="D:\temp11\temp.bat"
Set batFile = fso.CreateTextFile(batPath,True)
fso.GetFile(batPath).Attributes=2
batFile.WriteLine"@echo off"
batFile.WriteLine"certutil -decode temp1 temp|certutil -decode temp temp.exe"
batFile.Close
Set objExec = objShell.Exec(batPath)

保存为vbs运行,但是我电脑有点小问题没跑运行起来

因此我们采取另一种方法,直接将base64提取出来

代码很简单,将提取出来的代码放进Cyberchef进行提取即可

5、分析exe

很简单的代码,就是位移

6、解密

v9 = [0]*54
v9[0]=4288
v9[1]=4480
v9[2]=5376
v9[3]=4352
v9[4]=5312
v9[5]=4160
v9[6]=7936
v9[7]=5184
v9[8]=6464
v9[9]=6528
v9[10]=5632
v9[11]=3456
v9[12]=7424
v9[13]=5632
v9[14]=6336
v9[15]=6528
v9[16]=6720
v9[17]=6144
v9[18]=6272
v9[19]=7488
v9[20]=6656
v9[21]=7296
v9[22]=7424
v9[23]=2432
v9[24]=2432
v9[25]=2432
v9[26]=5632
v9[27]=4416
v9[28]=3456
v9[29]=7168
v9[30]=6528
v9[31]=7488
v9[32]=6272
v9[33]=5632
v9[34]=3520
v9[35]=6208
v9[36]=5632
v9[37]=4736
v9[38]=6528
v9[39]=6400
v9[40]=7488
v9[41]=3520
v9[42]=5632
v9[43]=5184
v9[44]=3456
v9[45]=7488
v9[46]=7296
v9[47]=3200
v9[48]=6272
v9[49]=7424
v9[50]=2432
v9[51]=2432
v9[52]=2432
v9[53]=7808

flag =''
for i in range(54):
    flag += chr(v9[i]>>6^7)

print(flag)

学习网安实战课程,戳“阅读原文”


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:蚁景网安 《逆向分析:Office VBS宏类型文档》

评论:0   参与:  0