0x00 前言

宏病毒,主要用到oletoolsvbs调试相关的知识

0x01 解

.docm文件,宏病毒,打开看看

宏病毒用的是VBA语言,且project加了密,只能dump出来看

用oletools对其进行提取

1
olevba protected_secret.docm --decode

解码出来挺多东西的,不过重点是这个

很长一段,就不复制出来这里了

新建一个word,ALT+F11把代码丢进去分析

首先是对输入的每一字节都异或一个7,异或后将这个值存入Result

搜索Result变量,得到其被放入了一个temp.exe进行操作

开调,调试至这里可以找到batPath(这边结果应该是在同目录),同时可以看到同目录下有个temp1

之后再运行到这,可以看到同目录下有个temp.bat

将其都复制一份然后用010看看,会发现bat文件没什么用,就是用来将Result放入一个exe运行

不过提供了一个思路,要对temp1文件进行两次base64解密

解密出来之后丢入IDA

发现主要逻辑就是向左移6位,因此密文向右移6位就行

其中密文就是v7,可以通过在赋值后面下断点动调,然后获取数组内容来dump密文

1
2
3
4
5
6
7
8
9
10
11
12
import struct
with open('./export_results.txt','rb') as f:
a = f.read()
# a = b'\xc0\x10\x00\x00\x80\x11\x00\x00\x00\x15\x00\x00\x00\x11\x00\x00\xc0\x14\x00\x00@\x10\x00\x00\x00\x1f\x00\x00@\x14\x00\x00@\x19\x00\x00\x80\x19\x00\x00\x00\x16\x00\x00\x80\r\x00\x00\x00\x1d\x00\x00\x00\x16\x00\x00\xc0\x18\x00\x00\x80\x19\x00\x00@\x1a\x00\x00\x00\x18\x00\x00\x80\x18\x00\x00@\x1d\x00\x00\x00\x1a\x00\x00\x80\x1c\x00\x00\x00\x1d\x00\x00\x80\t\x00\x00\x80\t\x00\x00\x80\t\x00\x00\x00\x16\x00\x00@\x11\x00\x00\x80\r\x00\x00\x00\x1c\x00\x00\x80\x19\x00\x00@\x1d\x00\x00\x80\x18\x00\x00\x00\x16\x00\x00\xc0\r\x00\x00@\x18\x00\x00\x00\x16\x00\x00\x80\x12\x00\x00\x80\x19\x00\x00\x00\x19\x00\x00@\x1d\x00\x00\xc0\r\x00\x00\x00\x16\x00\x00@\x14\x00\x00\x80\r\x00\x00@\x1d\x00\x00\x80\x1c\x00\x00\x80\x0c\x00\x00\x80\x18\x00\x00\x00\x1d\x00\x00\x80\t\x00\x00\x80\t\x00\x00\x80\t\x00\x00\x80\x1e\x00\x00'
enc = struct.unpack('<'+'i'*54,a)

dec = []
for i in range(len(enc)):
dec.append((enc[i]>>6)^7)
for i in dec:
print(chr(i),end="")
# DASCTF{Vba_1s_dangerous!!!_B1ware_0f_Macr0_V1ru5es!!!}