恶意代码分析实战-实验17
本文最后更新于:2022-02-25 晚上
Lab 17-1
分析
这个是实验七中的7-1,所以关于具体的功能就不再做分析了,只看一下关于虚拟机检测的部分。
第一个是sidt
指令,看到下面的jz
跳转,会跳向退出的地方。
第二个是str
指令
第三个是sub_401100
函数中的sldt
指令
一个一个导出函数来分析下
InstallRT
问题
1. 这个恶意代码使用了什么反虚拟机技术?
使用了sidt
、str
和sldt
指令。
2. 如果你有一个商业版本的IDA PRO,运行第17章中代码清单17-4所示的IDA Python脚本,看它发现了什么?
会发现这些反调试的指令
3. 每种反虚拟机技术成功执行后会发生什么?
sidt
和str
指令,成功后会执行sub_401000
,其中是自删除代码。sldt
指令成功执行后,会直接退出程序。
4. 针对你的虚拟机,这些反虚拟机技术中哪些技术会生效?
没有可以生效的
5. 为什么每个反虚拟机的技术,会生效或失败?
不知道原因,按照书上的说可能是多核的机器上实验会失效。
6. 怎么使这些反虚拟机技术无效,从而让恶意代码运行?
可以将这些指令都给nop
掉或者直接修改下面的跳转指令就行了。
Lab 17-2
分析
使用命令rundll32.exe Lab17-02.dll InstallRT
,同时打开火绒剑查看效果。运行完之后,看到原来文件夹中的DLL文件已经被删除了,查看火绒剑的监控结果,过滤文件创建、删除,进程启动。看到创建两个两个文件vmselfdel.bat
和xinstall.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\Svchost
中netsvcs
的值
不符合要求或者不带参数,安装默认服务Irmon
。
创建子键Parameters
,在其中的键值ServiceDLL
设置为恶意DLL的路径。
InstallSB
同样也是in
指令检测虚拟机
sub_10005A0A
是获取SfcTerminateWatcherThread
地址,这个函数是用来关闭windows的文件保护的,在实验12的时候遇见过。
之后进入sub_1000DF22
如果带参数,参数为服务名,那么会尝试打开此服务,并且将其停止,如果不带参数,那么就是默认服务NtmsSvc
与SA同样,服务也必须是那些。之后会打开此服务对应的注册,查看Parameters
中的servicemainbak
和servicedll
如果不满足条件,未被感染会查找加载了恶意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
掉就行了。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!