打开文档后,远程注入模板:
文档内容如下:
翻译后内容如下:
由图标也可以看出:
模板启用了宏,通过olevba.py
导出后分析。
获取主机ComputerName及系统磁盘SerialNumber,并通过_拼接:
拼接URL及路径,后续的VBS脚本中会用到:
于启动目录新建一security.vbs:
余下所有都是向该VBS写入内容,不再赘述:
监测沙箱(如果沙箱跑25s,那么它此处延时就能达到反沙箱的目的):
余下部分结构如下(其中红色方框部分经过处理):
下面逐一进行分析。
使用XMLHTTP访问http://skrembler[.]hopto[.]org/ComputerName_SerialNumber/tor.php。
将其响应作为函数返回值。
随机QopZ个字符返回,用于后面的文件命名。
上图是Encode()函数主要功能。第一个参数FCkE是文本文件,内容CZeq()函数返回;第二个参数BGmO是要写入的EXE文件; msKq是GetHKcc()函数返回的数组。该函数功能是将TXT文件内容经过异或操作之后写入EXE文件。
将传递给该函数的字符串中每个字符的ASCII码写入一数组返回。
该Sub功能是将参数内容写入TXT文件(即CZeq()函数返回值),并判断大小:若小于1025,则删除该文件。之后调用Encode函数,将TXT文件内容写入EXE文件。如EXE文件存在,则于启动目录创建一VBS,内容如下(红色方框部分经过处理):
循环前半部分功能见前文。后半部分是判断EXE文件数量,大于2则使用WMI重启,以达到执行启动目录内EXE文件的目的。
实际是一SFX文件,其中包含如下文件:
文件内容如下:
去混淆后:
28847同样是一SFX文件,“ppfljk,fkbcerbgblfhs”是其解压密码。
输入密码,解压后如下:
.NET程序,使用dnSpy分析。结构如下:
其中有大量如下特征混淆代码:
去混淆后分析。各函数功能及调用关系如下:
BatJwAk()函数是将传递参数(以:分隔的十六进制ASCII码)转换为对应的字符串形式。
Main()函数于一循环中调用CYIxJzc()遍历10.0-17.0各个版本的Word、Excel注册表项。之后CYIxJzc()调用BcNIQrU()修改相应键值:
jYRcuEu()函数通过计算达到延时目的:
之后Main()调用cztXiVD(),遍历非系统盘下文件:
llpJYEs()首先读取路径存放宏代码的TXT文件:
之后判断文件是否符合指定条件(非系统文件,扩展名包括.doc/.xls):
llpJYEs()之后调用zrdMiQo(),复制文件内容到一新文件(新文件名称比原文件多一空格)后删除原文件,并将新文件复制到原目录下:
zrdMiQo()之后调用cBtQGAf()函数向新文件内写入宏。该函数根据传递的第四个Bool参数值执行相关的写入宏代码,True:
False:
cBtQGAf()函数在执行写入操作之前会调用hXblmtN()函数Kill "EXCEL"、"WINWORD"进程:
两份宏代码不同之处只有如下3点:
其余不同点只是字符串拼接方式的不同,故只分析其中之一。
功能大体与opt.dot模板内宏代码相同,但是增添了修改注册表功能:
不同的URL:
创建一VBS,其功能是设置定时任务:
余下代码是于%AppData%\Microsoft\Office
目录下创建IndexOffice.vbs文件,并写入内容,该VBS功能与security.vbs功能近似,不再赘述。