一 AutoIT概述
AutoIt(读音aw-tow-it)是一个用于Microsoft Windows的免费自动化语言。在它的早期发布版本中,这个软件主要旨在为微软Windows程序创建自动化脚本(有时也称为宏)但现在已经成长为包含了编程语言设计和全面功能的增强的软件。
在版本3中,AutoIt的语法结构调整为接近于BASIC系列的语言。它是使用经典数据模型、利用可以存储多种数据类型包括数组的变量类型的第三代编程语言。它兼容于Windows 95,98,ME,NT4,2000,XP,2003,Vista以及Windows 7。
AutoIt自动化脚本可以编译成压缩、单一的可执行文件,这样的文件可以运行在没有安装AutoIt解释器的计算机上。
AutoIt3官方网站:https://www.autoitscript.com/site/
大神分析文章:https://github.com/V1V1/OffensiveAutoIt
二 分析技巧
2.1 反编译
Exe2Aut
可以使用Exe2Aut工具(http://domoticx.com/autoit3-decompiler-exe2aut/)将AutoIT可执行文件反编译回普通的AutoIT脚本。
Exe2Aut官方网站:https://exe2aut.com/
Exe2Aut Github 地址:https://github.com/JacobPimental/exe2aut
云盘下载:https://drive.google.com/file/d/1H9s9y-3LgdEjBayUOeBv88dZzXUIoHwC/view
myAut2Exe
https://github.com/fossabot/myAut2Exe
效果不太好
AutoIt-Ripper
https://github.com/nazywam/AutoIt-Ripper
python脚本,能提取文件,效果不错,但是它不能将原始文件夹分类。比如原始文件调用a/4.dll,它只是把4.dll提取出来,不会提取a目录
Universal AutoIT Extractor and De-obfuscator
https://github.com/Wilenty/Universal-AutoIT-Extractor-and-De-obfuscator
可视化程序,效果非常好,虚拟机使用
2.2 反编译脚本分析
通常,反编译脚本会被大量混淆。根据复杂程度,您可以尝试通过替换变量名称,手动并置值等手动方式处理。
运行AutoIt必须要有编译器:
AutoIt3运行程序(编译器):https://www.autoitscript.com/autoit3/files/archive/autoit/
以下是针对AutoIt的脚本调试器(调试器使用必须提安装以上编译器):
http://www.thefoolonthehill.net/drupal/AutoIt%20Debugger (可视化解密)
AutoIt脚本编辑器SciTE4AutoIt3:https://www.autoitscript.com/site/autoit-script-editor/
2.3 常用函数与宏
常用函数查询:
英文版(较全):https://www.autoitscript.com/autoit3/docs/functions/
中文版:https://www.jb51.net/shouce/autoit/AutoIt_CN/html/functions.htm
2.4 AutoIT编译
2.4.1 编译选项
AutoIt为用户提供了两个不同的编译选项:编译脚本或独立可执行文件。
2.4.1.1 编译脚本
使用编译后的脚本,恶意有效载荷将至少显示为两个文件:一个是编译后的脚本,另一个是合法的AutoIt解释器。AutoIt解释器本身是良性的。
这是一个这样的恶意样本的示例:
为了方便恶意代码执行,必须为解释器提供脚本。在上文提供的示例中,WinddowsUpdater.zip是脚本,并不是压缩文件。该文件夹中的快捷方式在执行时将运行以下命令:
C:\Windows\system32\cmd.exe /c start ..\WinddowsUpdateCheck\WinddowsUpdater.exe “..\WinddowsUpdateCheck\WinddowsUpdater.zip” & exit
将已编译的AutoIt脚本(WinddowsUpdater.zip)作为参数传递给AutoIt解释器(WinddowsUpdater.exe),来执行恶意代码。
2.4.1.2 独立可执行文件
独立的可执行文件显示为单个.exe文件,该文件实际上是AutoIt解释器,其中将编译后的脚本作为资源嵌入其中。
可以通过使用PeStudio 等进行分析并查找AutoIt覆盖,清单和/或字符串来确定正在处理的可执行文件是否是AutoIt独立可执行文件:
2.5 AutoIt恶意代码分析
2.5.1 严重混淆
样本哈希:
26510f4fb2778e0abaf07613321259db
使用Exe2Aut反编译后的代码被严重混淆,充斥着成百上千变量名,为分析带来非常大的困难。
类似于以下这样,根本无法分清这个函数的作用。
整个反编译文件的开头定义了很多变量,而且都通过a0b00003c30函数对数组cw进行处理。
那就使用调试器AutoIt_Debugger将这些值都打印出来
然后再源代码里进行替换(写py脚本),然后清晰了很多。
然后又发现上文中都是把变量复制了,不如2048字符串,复制给a2b5080445e,这样在代码中又是不能利用起来解密的字符串,那就再替换一步,把这些变量也都替换成字符串,这样在代码中都替换了。
思路就是通过不断把变量进行替换,使用debugger和py脚本把代码尽量通俗易懂化。然后再把函数的调用关系梳理一下。就能根据这处理过的代码看到功能:
样本根据当前时间戳生成字符串,在%Temp%目录创建后,将样本中嵌入的十六进制字符串文件复制到该目录,将该十六进制字符串解码以后续使用,在解码十六机制字符串后删除该文件;
复制自身为~\AppDataDir_\MSDUpdate\MsdUpdate.exe,并在注册表中添加自启项;
通过注册表等获取主机信息,并对获取到的主机信息进行MD5运算;
将主机信息加密后发送到C2:
例如测试机样例t=reg&uid=A5A619F157E62BEB591068B124D8F1E7&hname=ADMIN&gid=3&os=WIN_10|X64|0804&ctid=1&cvid=1&ti=10,然后使用使用对称加密将以上字符串加密,通过POST方式发送到http://simsoshop.com/update.php?c=主机信息MD5,然后接收C2回复;
其中信息传输请求头如下:
Content-Type : application/x-www-form-urlencoded
User-Agent : Mozilla/5.0(Windows NT9;WOW64;rv:38.0)Firefox:40.1
C2的回复命令是以‘##’和‘|’进行隔开。C2命令如下:
DL指令代表下载下一阶段有效载荷并执行;
TI指令代表间隔连接(暂无实质作用);
EC指令代表CMD执行命令,并将执行后结果发送给C2,间接实现反向SHELL;
UI指令代表删除程序以及注册表项,清楚痕迹;
AV指令代表检测杀毒软件;