“Hawkeye Keylogger”是一款在暗网上出售的信息盗取软件,自2013年以来一直在不断发展,也增加了许多新的功用和技能。它的主要功用便是从各种应用程序(主要是电子邮件客户端、Web浏览器和FTP客户端)处搜集凭证,并经过协议(如FTP,HTTP和 *** TP)将它们发送给要挟行为者。
Cybaze-Yoroi ZLAB将经过最近的Hawkeye样本对其躲避机制和运用Visual Basic封装器施行的反调试技能作阐明。
技能剖析
样本文件是一个ISO映像,其中有一个实践为PE文件的bat文件,咱们能够提取bat文件并将其扩展名替换为“exe”。
图1:伪bat文件
表1:PE文件的信息
ISO文件的AV检出率较低,近年来运用ISO文件进犯的 *** 也变得越来越盛行,只要从ISO中提取出可履行文件才干进步检出率:
图2:ISO压缩文件(左)和提取文件(右)的AV检测
PE文件包括Visual Basic 5.0的存根,它能维护歹意软件的中心并使剖析复杂化:
图3:Visual Basic封装程序
如上所示,歹意软件是用Visual Basic 5.0编写的,能够经过ad-hoc反编译器来处理。
图4:VB代码反编译成p-code
反编译后的代码被混杂过,想要获取感染机制更多信息的仅有解决方案是调试程序。
为了使剖析复杂化,进犯者之一个技巧是动态地创立一个新的内存段,经过“VirtualAlloc”函数向里注入一些代码。歹意软件对该段代码解码后,会挑选一个随机的新虚拟地址空间来分配内存,在本例中是“0x00260000”加载到了EAX寄存器中。
图5:经过VirtualAlloc API分配内存
GetTickCount反调试技能
在新分配的区域内切换上下文之后,歹意软件选用“GetTickCount()”反调试技能。依据MSDN文档,GetTickCount检索自系统启动以来经过的毫秒数,最多为49.7天。歹意行为者经过运用这个API调用来检索进程履行的时刻,假如超越预设的阈值,则歹意程序停止履行:
图6:GetTickCount例程一个新的地址空间
创立地址空间的之一个歹意操作是调用GetTickCount API,成果是:
图7:EAX寄存器中的GetTickCount成果
GetTickCount函数的成果存储在EAX寄存器中。歹意软件在完结其他解密操作后会持续调用它。
图8:GetTickCount的减法反调试技巧
在第2次调用GetTickCount之后,会当即将上图所示的两个值相减,并将其放在EAX寄存器中。下一条指令是EAX寄存器和预先设置的阈值“0x5DC”之间的比较,“0x5DC”是十进制表明的1500。依据Microsoft文档,GetTickCount函数的分辨率为10ms,因而咱们能够推断出进犯者的断定阈值为15秒。有理解了这个技巧之后,很简单绕过它持续剖析样本。
图9:运转有用负载的ShellExecute例程
歹意软件会分配另一个内存空间来编写带有MZ头的文件,并经过“ShellExecute”API函数翻开文件。此刻,另一段隐藏在资源中的代码也呈现了,这段代码在反调试技巧呈现之前并不存在:
图10:原始exe和自修正exe之间的资源比较
如上图所示,原始文件(左边)仅显现图标和清单作为资源,而自操作文件则在“RCData”中显现了一个名为“__”的资源,它是加密的终究payload。
图11:歹意资源检索例程
为了维护自己让剖析变得愈加困难,歹意软件经过“CreateProcessInternalW”API调用从头生成自己:
[1][2][3]黑客接单网