1、分析在文件Lab07-01.exe中发现的恶意代码。
检查硬编码HGL345
的互斥量是否存在,如果存在则退出,否则CreateMutexA
创建互斥量,保证同时只有一个线程执行。
创建名为Malservice
的新服务到服务控制管理器,通过服务实现持久化。互斥体硬编码和创建的HGL_345
是基于主机的特征。
可以看到使用浏览器代理Internet Explorer 8.0
访问urlhttp://www.malwareanalysisbook.com
这是基于网络的特征。
查看结构体,有一个SYSTEMTIME
的结构体。
1异或自身edx为0,2,3,4,5赋值给结构体中的元素,步骤6将834h赋值给year,十进制的2100。
创建一个计时器,直到2100年1月1日,开启20个线程循环下载http://www.malwareanalysisbook.com
2、分析Lab07-02的恶意代码
1、这个程序如何完成持久化驻留?
2、这个程序的目的是什么?
3、这个程序什么时候完成执行?
查看导入表
从ole32库中导入了OleInitialize
函数,这个程序可能使用了COM功能。
继续查看strings,存在可疑URLhttp://www.malwareanalysisbook.com/ad.html
Tips:这里需要设置让strings页面可以读取unicode编码的字符串。
跟进main
函数
CLSID是0002DF01-0000-0000-C000-000000000046
(表示Internet Explorer)
IID是D30C1661-CDAF-11D0-8A3E-00C04FC9E26E
(表示IWebBrowser2)
CoCreateInstance
执行结果保存在ppv
,一旦结构体从调用返回,一旦结构体从CoCreateInstance
处返回,COM客户端调用位于这个结构体某处偏移的一个函数,见下图。
1处拿到返回的结构体指针,2处将eax解引用并赋给edx,3处通过偏移调用IWebBrowser2Vtbl
中的第12个函数Navigate
,可以在struct页面尝试添加一个结构体(快捷键Insert
)。每个函数4字节,第一个函数在0位置。
该函数被调用后,Internet Explorer
将导航至http://www.malwareanalysisbook.com/ad.html
。该函数执行一些清理函数,但是没有持久化驻留,仅简单显示一个广告页面。
分析Lab07-03的EXE和DLL文件
对于这个实验,我们在执行前获取到恶意的可执行程序,Lab07-03.exe,已经DLL,Lab07-03.dll。声明这一点很重要,这是因为恶意代码一旦运行可能发生改变。俩个文件在受害者机器上的同一个目录下被发现。如果你运行这个程序,你应该确保俩个文件在分析机器上的同一个目录中。一个以127开始的IP字符串(回环地址)连接到了本地机器。(在这个恶意代码的实际版本中,这个地址会链接到一台远程机器,但是我们已经将它设置成连接本地主机来保护你。)
(warning:这个实验可能对你的计算机引起某些损坏,并且可能一旦安装就很难清除。不要在一个没有事先做快照的虚拟机中运行这个文件。)
这个实验可能比前面的那些有更大的挑战。你将需要使用静态和动态方法的组合,并聚焦在全局视图中,避免陷入细节。
1.这个程序如何完成持久化驻留,来确保在计算机被重启后它能继续运行?
2.这个恶意代码的两个明显的基于主机特征是什么?
3.这个程序的目的是什么?
4.一旦这个恶意代码被安装,你如何移除它?
首先分析Lab07-03.exe文件,查看导入表,有很多文件操作。
查看strings视图
1是仿冒的dll,说明该文件存在仿冒系统关键dll的可能,2说明可能调用了Lab07-03.dll,用IDA Pro打开查看代码。
首先用eax保存命令行参数的格式,如果参数的个数不是2,会直接退出,并且比较了argv[1]是不是WARNING_THIS_WILL_DESTROY_YOUR_MACHINE
这样保证了恶意代码不会在虚拟机中被自动执行,属于反动态检测的一种手段。
打开两个文件C:\Windows\System32\Kernel32.dll
和Lab07-03.dll
映射到内存中。
接下来就是将C:\Windows\System32\Kernel32.dll
的导出表部分复制到Lab07-03.dll
的导出表,这部分的操作需要对PE结构比较熟悉。
然后将Lab07-03.dll
复制到C:\\windows\\system32\\kerne132.dll
将文件命名为和关键系统库相似的名称,进一步进行恶意行为。并跳转到loc_401806
位置。先将参数C:\\*
压栈,调用函数sub_4011E0
。
该函数如下,主要是遍历C盘文件,第29行找到.exe
结尾的文件,调用函数sub_4010A0
。
判断文件是不是以.exe
结尾的逻辑主要在0x004013F6
处。在0x004011E0
和0x004013F6
处设置断点,F9
执行,查看栈上数据变化。可以看到这部分的执行逻辑和静态分析的结论一致。
当结尾是.exe
时候,不跳转,继续单步跟踪,运行到sub_4010A0
函数。下面是伪代码。
35行查找字符串kernel32.dll
,37行调用qmemcpy
进行复制,我们想要知道dword_403010
位置是什么数据。继续跟进,光标放在dword_403010,使用快捷键A
将此数据转换为string。
至此,程序功能清晰,就是将对kernel32.dll
的调用,转换为kerne132.dll
的调用,这样很多程序都会受到影响,很难清除。
动态调试发现比较字符串。之后使用repne scasb + rep movsd + rep movsb
内联实现 strcat
参考链接:
repne scasb + rep movsd + rep movsb 内联实现 strcat_hambaga的博客-CSDN博客
分析Lab07-03.dll,查看导入表,有创建互斥体以及网络相关函数。
查看strings,发现疑似恶意IP127.26.152.13
还有几个其他可疑的字符串。
跟进SADFHUHF
字符串,可以看到这是一个互斥量名称硬编码,保证同一时刻只有一个恶意代码进程在执行。
跟进127.26.152.13
结构体sockaddr.data
保存了host信息和端口信息。IP是127.26.152.13,端口是0x50(十进制80)
buf中保存的是hello,发送这个字符串给C2,受害者已经上线,然后接收C2发送的命令,继续保存在buf中,检查buf的前五个字节是不是sleep
如果是,跳出循环sleep60s,检查前四个字节是不是exec,如果是,使用CreateProcessA
创建新的进程。关于此函数文档如下,lpCommandLine
参数可以执行命令。说明此DLL文件带有后门功能。
https://docs.microsoft.com/zh-cn/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa
Answer:
1、这个程序将自己复制到C:\windows\System32,并伪装成重要dll库,实际名称为kerna132.dll
来执行持久化。
2、基于主机的特征是互斥量硬编码SADFHUHF
,文件名kerna132.dll
。
3、目的是执行持久化操作,并留下后门,可以执行sleep和exec命令。
4、程序很难被移除,可以从快照恢复。