IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    逆向分析Office VBS宏类型文档

    dingjiacan@antvsion.com发表于 2024-12-24 05:37:41
    love 0

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

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

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

    1、初步分析

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

    image

    image

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

    2、oletools

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

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

    这里采用pip安装模式

    pip install -U oletools

    运行命令

    olevba -c protected_secret.docm > code.vbs

    image

    3、分析vbs代码

    直接搜索:AutoOpen

    里面有太多垃圾代码了

    image

    首先将输入的flag异或7

    image

    image

    有点意思了,解码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提取出来

    image

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

    image

    download.exe

    5、分析exe

    image

    很简单的代码,就是位移

    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)


沪ICP备19023445号-2号
友情链接