逆向分析Office VBS宏型別文件

蚁景网安实验室發表於2024-10-29

該題目貼合實際,在實戰中經常遇到此類宏病毒。

將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程式

【----幫助網安學習,以下所有學習資料免費領!加vx:dctintin,備註 “部落格園” 獲取!】

 ① 網安學習成長路徑思維導圖
 ② 60+網安經典常用工具包
 ③ 100+SRC漏洞分析報告
 ④ 150+網安攻防實戰技術電子書
 ⑤ 最權威CISSP 認證考試指南+題庫
 ⑥ 超1800頁CTF實戰技巧手冊
 ⑦ 最新網安大廠面試題合集(含答案)
 ⑧ APP客戶端安全檢測指南(安卓+IOS)

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)

更多網安技能的線上實操練習,請點選這裡>>

相關文章