恶意代码分析实战-实验7
本文最后更新于:2021-08-17 下午
Lab 7-1
1.当计算机重启,这个程序如何确保它继续运行(达到持久化驻留)?
创建了一个系统服务来随系统启动,可以看到StartServiceCtrlDispatcherA函数。其中还有一个结构 ServiceStartTable。
1 |
|
这个服务的名称是Malservice,servicemain函数是sub_401040。
2.为什么这个程序会使用一个互斥量?
程序创建了一个名为“HGL345”的互斥量。
这是为了防止运行多个程序,首先调用OpenMutexA函数尝试打开名为“HGL345”互斥量句柄,如果已经存在就代表程序已经在运行了,就会退出,如果没有就调用 CreateMutexA创建互斥量。
3.可以用来检测这个程序的基于主机特征是什么?
名为”Malservice“的服务或者是”HGL345“互斥量。
4.检测这个恶意代码的基于网络特征是什么?
在StartAddress函数中,会有联网的行为,可以看到其中的agent信息和URL。
5.这个程序的目的是什么?
首先是创建互斥量防止启动多个。然后是创建一个名为Malservice的服务。然后开始设置时间,将时间设置为了2100年的1月1日0点。
然后调用WaitForSingleObject进入等待,等到前面设置的时间2100年1月1日0点。然后创建二十个同样的线程,来访问http://www.malwareanalysisbook.com
可以理解为一个DDOS的恶意程序。
6.这个程序什么时候完成执行?
不会完成执行,到2100年会创建20个线程,但是每个线程都是一个无线循环。
Lab 7-2
1.这个程序如何完成持久化驻留?
这个程序没有持久化驻留,执行一次完成后就会退出。
2.这个程序的目的是什么?
程序首先初始化了COM,然后创建了一个COM对象。
其中rclsid的值如下图所示,类标识符,对应的是Internet Explorer。
riid接口标识符对应的是IWebBrowser2。
返回的COM对象保存在ppv中,会调用偏移为0x2C处的函数,而这个函数是Navigate函数,函数调用后,就会打开浏览器浏览“http://www.malwareanalysisbook.com/ad.html”,之后就是一些清理工作。
3.这个程序什么时候完成执行?
当执行完访问页面之后就会结束。
Lab 7-3
DLL
先来分析一下DLL文件
使用IDA打开DLL文件,首先可以看到,尝试打开一个互斥对象,如果不存在就创建一个互斥对象,互斥对象名为SADFHUHF
然后就是SOCKET通信的流程,关于通信的流程可以参考传输技术-SOCKET通信 ,这里地址是127.26.152.13:80,一个本地地址,真实情况肯定不会是一个本地的地址。
发送的信息是hello,然后会关闭这个send连接。
然后是recv函数接收信息,如果收到的信息是sleep就会调用sleep函数。
如果收到的信息是exec就会调用CreateProcessA来启动一个进程。进程是lpCommandLine这个参数。
看这个参数,看到是从第五个字节开始,而我们接收到的命令是exec XXXX,XXXX就是需要启动的进程。这是从远端发送过来的。
到这里基本上DLL就分析完毕了,再来分析一下EXE。
EXE
分析一下EXE
要成功执行这个EXE还有一些限制,参数必须为WARNING_THIS_WILL_DESTROY_YOUR_MACHINE才可以执行这个程序。
像这样运行
当满足条件后会开始运行程序,先创建了两个文件,C:\Windows\System32\kerne132.dll(注意这里不是“l”而是“1”)和Lab07-03.dll,还把它们映射到内存中。
再往下的代码比较多也比较复杂,我也没有过多分析,按照书上这部分是在比较内存、写入偏移或者写入内存。直接到后面来分析
在进行完上述操作之后,先关闭句柄,然后复制文件,将Lab07-03.dll复制到C:
\Windows\System32\kerne132.dll,如果这个DLL已经存在的话,就不会调用4011E0这个函数,如果不存在复制过后就调用这个函数。
来查看这个函数,它的参数是C:\*,进来之后它会调用FindFirstFileA和FindNextFileA来遍历所有的文件,然后判断文件类型是否为EXE,
如果是exe的话,就会调用4010A0函数它会将文件映射到内存中,然后调用IsBadReadPtr验证调用进程是否具有对指定内存范围的读取访问权限。
然后检查加载的DLL中是否存在kernel32.dll,如果存在的话就会让kerne132.dll替换它。
打开process monitor监控行为,可以看到大量的文件操作。
打开一个calc.exe查看其加载的DLL,可以看到加载了kerne132.dll。
1.这个程序如何完成持久化驻留,来确保在计算机被重启后它能继续运行?
在计算机中的每个EXE中都植入了一个DLL,相当于一个后门。
2.这个恶意代码的两个明显的基于主机的特征是什么?
一个是互斥量SADFHUHF,另一个是在C:\Windows\System32\文件夹下的kerne132.dll。
3.这个程序的目的是什么?
搜索所有的EXE文件,并且让它们加载恶意的DLL文件kerne132.dll,这个DLL文件会进行一个SOCKET通信来执行操作,一个操作是sleep,另一个操作是会执行发送过来的进程,可能是恶意进程。
4.一旦这个恶意代码被安装,你如何移除它?
如果安装,当前的exe文件都会加载这个恶意的DLL,可以写一个程序遍历所有的exe并且搜索其中的kerne132.dll,然后再用kernel.32替换它,或者复制kernel32.dll为kerne132.dll进行替换。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!