恶意代码分析实战-实验17

本文最后更新于:2022-02-25 晚上

Lab 17-1

分析

这个是实验七中的7-1,所以关于具体的功能就不再做分析了,只看一下关于虚拟机检测的部分。

第一个是sidt指令,看到下面的jz跳转,会跳向退出的地方。

第二个是str指令

第三个是sub_401100函数中的sldt指令

一个一个导出函数来分析下

InstallRT

问题

1. 这个恶意代码使用了什么反虚拟机技术?

使用了sidtstrsldt指令。

2. 如果你有一个商业版本的IDA PRO,运行第17章中代码清单17-4所示的IDA Python脚本,看它发现了什么?

会发现这些反调试的指令

3. 每种反虚拟机技术成功执行后会发生什么?

sidtstr指令,成功后会执行sub_401000,其中是自删除代码。sldt指令成功执行后,会直接退出程序。

4. 针对你的虚拟机,这些反虚拟机技术中哪些技术会生效?

没有可以生效的

5. 为什么每个反虚拟机的技术,会生效或失败?

不知道原因,按照书上的说可能是多核的机器上实验会失效。

6. 怎么使这些反虚拟机技术无效,从而让恶意代码运行?

可以将这些指令都给nop掉或者直接修改下面的跳转指令就行了。

Lab 17-2

分析

使用命令rundll32.exe Lab17-02.dll InstallRT,同时打开火绒剑查看效果。运行完之后,看到原来文件夹中的DLL文件已经被删除了,查看火绒剑的监控结果,过滤文件创建、删除,进程启动。看到创建两个两个文件vmselfdel.batxinstall.log,最后再删除DLL文件和bat文件。

看下log文件,提示发现了虚拟机,停止安装。

查看DLL的导出函数,共有9个导出函数。

InstallRT

首先是有一个in指令检测虚拟机环境,如果检测到就会创建一个自删除的bat脚本,并且删除自身。

sub_1000D3D0是将DLL复制到system32目录下,如果不带任何参数的话,默认是查找是否存在iexplore.exe进程,如果存在执行远程注入DLL。

注入到IE的DLL

InstallSA

还是同样的虚拟机检测方法,使用in指令

进入sub_1000D920函数,这个主要是注册一个服务,使用恶意的DLL。

查看是否携带参数,如果携带参数的话,那么也必须是HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Svchostnetsvcs的值

不符合要求或者不带参数,安装默认服务Irmon

创建子键Parameters,在其中的键值ServiceDLL设置为恶意DLL的路径。

InstallSB

同样也是in指令检测虚拟机

sub_10005A0A是获取SfcTerminateWatcherThread地址,这个函数是用来关闭windows的文件保护的,在实验12的时候遇见过。

之后进入sub_1000DF22

如果带参数,参数为服务名,那么会尝试打开此服务,并且将其停止,如果不带参数,那么就是默认服务NtmsSvc

与SA同样,服务也必须是那些。之后会打开此服务对应的注册,查看Parameters中的servicemainbakservicedll

如果不满足条件,未被感染会查找加载了恶意DLL的服务,获取其PID

找到或找不到都会将恶意DLL后面加上_ox复制到system32目录下,同时将服务中的serviceDLL中的值修改为恶意DLL路径

还会执行DLL注入

PSLIST

在这里没有对虚拟机的检测

sub_100036C3是通过检查操作的平台和主版本号,如果不满足特定的要求不会进入后续的函数。

前面图中的result就是指定的进程,如果没有指定进程的话,进入sub_10006518,这个函数就是遍历进程,将信息保存在创建的xinstall.dll中,就不再分析了,流程与sub_1000664C差不多,只看这个就可以了。进入sub_1000664C

比较进程名字,如果相等,就会获取进程的一些信息,然后sub_100038BB会将信息发送出去。发送的信息主要是PID,进程名,进程的完整路径和线程数量。这些信息也会保存在本地的xinstall.dll中。

其中socket的参数也是调用这个导出函数所带的参数之一。

ServiceMain

这个导出函数也是一个关于服务注册的函数

StartEXS

这个应该是屏幕监控和鼠标监控的函数,大致看了下,没有特别具体的分析。

偷懒了…

说实话,有点偷懒不过确实是不想分析了,想偷懒,DLLmain也没有分析,后面俩导出函数就是大致看了下,暂时先这样吧。

问题

1. 这个DLL导出了什么?

如上面分析,导出了那些函数。

2. 尝试使用rundll32.exe安装之后,发生了什么?

如分析。

3. 它创建了哪些文件,这些文件都包含了什么内容?

主要是有一个log文件,记录;还有一个bat文件,里面是自删除的内容,还有一个xinstall.dll是遍历的信息。

4. 它使用了何种反虚拟机的方法?

使用in指令

5. 在恶意代码运行时,怎么强制安装它。

可以通过修改原来的代码,强制安装。

6. 怎样可以永久禁用这些反虚拟机技术?

修改跳转条件就行了。

7. 每个安装的导出函数是如何工作的?

如分析。

Lab 17-3

分析

这个就是Lab12-2,所以就不分析它的行为,只看一下反虚拟机的机制就行了。

一共有四个虚拟机检测的地方, 第一个是sub_401A80,是IN指令检测。

第二个是sub_4011C0,查询HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses下所有的子项,其中的键值是否为vmware

第三个是sub_401670中的MAC地址检测,检测是否是虚拟机的MAC地址

第四个sub_401130是进程检测,检测是否有vmware开头的进程存在。将进程名转为小写后,进行计算,我也是看了书才知道,这是字符串哈希函数。

问题

1. 当你在虚拟机中运行这个恶意代码时会发生什么?

什么都不会发生,有虚拟机检测

2. 怎么让这个恶意代码运行,并且关闭它的键盘记录呢?

恶意代码运行,把所有的虚拟机检测都过掉就可以了。关闭键盘记录,可以阻止它注入shellcode

3. 这个恶意代码使用了何种反虚拟机技术?

如上面分析

4. 你可以对系统做什么样的变化,从而使你能够永久避免恶意代码所使用的反虚拟机技术?

修改MAC地址,卸载掉vm工具。

5. 为了让反虚拟机技术永久失效,你该如何用OD对该二进制文件进行修补?

将所有的关键跳转都给NOP掉就行了。