恶意代码分析实战17-1

本次实验我们将会分析Lab17-01.exe文件。先来看看要求解答的问题
Q1.这个恶意代码使用了什么反虚拟机技术?
Q2.使用IDAPro,运行IDAPython脚本(提供的findAntiVM.py),看它发现了什么?
Q3.每种反虚拟机技术成功执行后会发生什么?
Q4.针对你的虚拟机,这些反虚拟机技术中哪些技术会生效?
Q5.为什么每个反虚拟机的技术,会生效或失败?
Q6.怎么使这些反虚拟机技术无效,从而让恶意代码运行?

IDA载入文件,运行findAntiVM.py来自动查找存在漏洞的x86指令
File->script file,选择该脚本
在这里插入图片描述

输出窗口的结果如下所示
在这里插入图片描述

由上图可知检测到了三条漏洞指令的类型
Q2.使用IDAPro,运行IDAPython脚本(提供的findAntiVM.py),看它发现了什么?
A2.这个脚本发现了三个可能的反虚拟机指令sidt、str和sldt,用红色对它们进行了高亮显示。

双击00401121,在IDA view-a可以看到红色高亮显示的sldt指令
在这里插入图片描述

另外的也是同样可以看到
在这里插入图片描述

sidt指令
在这里插入图片描述

str指令

我们依次分析
先来看sldt
sldt指令也称为no pill,是一种反虚拟机技术
在这里插入图片描述

可以看到var_8被eax赋值,而eax来自dword_406048
dword_406048是一个初始化常量
在这里插入图片描述

sldt指令的结果被存入var_8,通过一些列mov最后赋给了eax
我们看看sldt所在的函数sun_401100的交叉引用
在这里插入图片描述

跟入
在这里插入图片描述

可以看到sub_401100的返回值在eax,会与0xddcc0000比较,其实就是用于检查初始常量的第序比特位是否被设置为0
如果不是0,则执行跳转,跳到loc_40132b
在这里插入图片描述

之后就退出了
这样就不会走另外一个创建线程的分支
在od中,在4012d6下断点,然后执行
在这里插入图片描述

在右边可以看到此时EAX为ddcc0000,说明虚拟机检测失败

接下来看下第二条
在这里插入图片描述

可以看到会将sidt结果中最重要的四个字节存入var_420
在004011e3处,sidt的四个字节被移位。
移位之后,就是sidt的第五个字节与0xff(vmware的特征)比较。
如果比较成功,那么恶意代码检测到了虚拟环境,则会实现跳转
而跳转的目的地40132d是调用了sub_401000

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

可以看到该函数是用于删除自身并终止进程
我们可以在od中测试下
在4011e6下断的地方查看ecx
在这里插入图片描述

此时ecx并不是0xff,说明在我的环境中这种检测是失败的,这是因为我是在多核的虚拟机上进行实验
那么理所当然的,单步之后,跳转也是无法实现的
如下图所示
在这里插入图片描述

再来分析第三处
在这里插入图片描述

str指令将任务状态段TSS载入到一个四字节的本地变量var_418中
在调用GetModuleFileName后,该变量才会被使用
如果匹配VMware特征码,则00401235的结果为0,00401244的结果为0x40
如果str指令成功执行,则下图所示,恶意代码不会创建MalServive服务
在这里插入图片描述

我们在od中40122f下断点,执行
在这里插入图片描述

此时edx值为0x28,而不是0x400(vmware的特征码)
说明在我的环境中这个检查还是失败的
Q1.这个恶意代码使用了什么反虚拟机技术?
A1.恶意代码用存在漏洞的x86指令来确定自己是否运行在虚拟机中。
Q3.每种反虚拟机技术成功执行后会发生什么?
A3.如果sidt指令或者str指令探测到虚拟机,恶意代码将会删除自己。如果sldt指令探测到恶意代码,恶意代码将不创建主线程就退出,但是它将会创建恶意服务MalService。
Q4.针对你的虚拟机,这些反虚拟机技术中哪些技术会生效?
A4.针对我们的机器而言,所有的反虚拟机技术都未成功。技术是否会生效会随着使用软硬件的不同而不同。(在实验室的环境里是不会生效的)
Q5.为什么每个反虚拟机的技术,会生效或失败?
A5.在分析过程中已经给大家解释了,不再重复。
Q6.怎么使这些反虚拟机技术无效,从而让恶意代码运行?
A6.可以用NOP替换sidt和str指令,或者在调试恶意代码时,实时改变跳转标志。

参考:
1.《恶意代码分析实战》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值