恶意代码分析实战17-2

本文详细分析了一个恶意DLL文件,揭示了其导出函数的功能,如InstallRT、InstallSA和InstallSB,涉及注册表操作、服务创建、进程注入等。恶意代码使用x86指令检测虚拟机,并在运行时通过DLL注入启动。通过修改特定字符串和指令,可以禁用反虚拟机技术并强制安装。此外,还探讨了如何通过服务安装和进程注入实现持久化激活。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本次实验我们将会分析 lab17-02文件。先来看看要求解答的问题
Q1.这个DLL导出了什么?
Q2.尝试使用rundll.32.exe安装后,都发生了什么?
Q3.它创建了哪些文件,这些文件都包含什么内容?
Q4.它使用何种反虚拟机方法?
Q5.在恶意代码运行时,怎么强制安装它。
Q6.怎样可以永久禁用这些反虚拟机技术?
Q7.每个安装的导出函数是如何工作的?

将dll文件载入peview
在这里插入图片描述

可以看到大量的导入函数,包括:
RegSetValueEx:操作注册表
ChangeService:操作服务
BitBlt:屏幕抓取
CreateToolhelp32Snapshot:列举进程
CreateRemoteThread:进程注入
WS2_32.dll:网络功能
还有导出函数
在这里插入图片描述

这些导出函数基本都是用于恶意代码的安装与卸载
Q1.这个DLL导出了什么?
A1.导出函数是InstallRT、 InstallSA、 InstallSB、 PSLIST、 ServiceMain、 StartEXS、UninstallRT、UninstallSA,以及UninstallSB
上图中ServiceMain说明恶意代码可能作为一个服务运行
接下来我们运行,并用process monitor监控
设置好过滤器
然后使用rundll32.exe运行
在这里插入图片描述

此时在我们原先放置lab17-02.dll的目录下,该dll被删除了,多了一个xinstall.log
打开文件,内容如下
在这里插入图片描述

说明二进制程序中存在反虚拟机技术

Q2.尝试使用rundll.32.exe安装后,都发生了什么?
A2.DLL被从系统中删除,同时多了一个log文件。

检查process monitor的监控结果
在这里插入图片描述

有创建、读写log的行为,同时可以看到创建一个bat文件,推测这是用于删除使用的

接下来我们使用IDA继续分析
打开strings窗口搜索bat关键字符串
在这里插入图片描述

双击,然后查看交叉引用
在这里插入图片描述

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

可以看到这个函数就是用于写入bat文件的自删除脚本代码
Q3.它创建了哪些文件,这些文件都包含什么内容?
A3.创建一个包含自我删除代码的.bat文件,同时还创建一个包含字符串Found Virtual Machine,Install Cancel的xinstall.log文件。
对该函数查看交叉引用
在这里插入图片描述

先跟入第一处InstallRT
在这里插入图片描述

在调用的上方,看见了我们在xinstall,log中看到字符串,而其前后都调用了sub_10003592
跟入后可知
在这里插入图片描述

第一处调用是为了打开xinstall.log
在这里插入图片描述

第二处则是为了写入那个字符串
回到上层函数,我们可以看到有两条路径可以走到
在这里插入图片描述

绿色的是在调用sub_10006119,红色的多调用了一个sub_10006196
sub_10006119如下所示
在这里插入图片描述

这是用于清零eax
来看看sub_10006196
在这里插入图片描述

100061c7处,magic数0x564d5868(VMXh)被载入到EAX
100061d1将执行动作0xA载入ECX,0xA表示获取VMware的版本信息
100061D6将虚拟端口0x5658载入到EDX
100061db处代码使用in指令查询I/O通信端口(0x5668)(vmware在虚拟机与宿主操作系统之间使用虚拟I/O端口通信)
100061dc处通过cmp检查magic数的回应
100061e2处比较结果被送入var_1c
在100061fa将var_1c送入AL
可以看到这里在检测虚拟机时,不关心vmware的版本,而只是通过magic值来查看I/O通信端口的回应
在运行时,我们可以用NOP替换in指令,绕过后门I/O通信端口技术,使得程序完成安装
Q4.它使用何种反虚拟机方法?
A4.恶意代码使用x86指令in,用magic值VX和动作0xA查询VMware的后门I/O通信端口。
Q5.在恶意代码运行时,怎么强制安装它。
A5.为了安装恶意代码,在它运行过程中修补0x100061DB处的in指令。

我们继续分析InstallRT
在这里插入图片描述

通过atoi将字符串转为数字,要转换的内容中在off_10019034
在这里插入图片描述

[This is DVM]5被载入EAX
然后与0xD相加,相当于将字符串指针移到了5的位置
然后通过atoi将字符串5转为数字5
之后通过test指令查看转换后的数字是否为0
如果不为0,则会往左边走,接着就会执行虚拟机的检测操作
所以我们如果将字符串[This is DVM]5修改为[This is DVM]0,这样恶意代码就不会进行虚拟机检测了

Q6.怎样可以永久禁用这些反虚拟机技术?
A6. 为了永久性禁用VM检查,用十六进制编辑器将二进制文件中的静态字符串从[This is DVM]5修改为[This is DVM]0。 另外,使用OllyDbg用NOP替换检查指令,并且将修改写入硬盘。

我们在下图的静态配置选项中
在这里插入图片描述

看到了端口80,域名newsnews.practicemalwareanalysis.com
而[This is log]1似乎可以通过LOG选项来确定是否应该创建和使用xinstall.log

我们继续分析InstallRT
在这里插入图片描述

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

首先将恶意代码复制到windows系统目录
在这里插入图片描述

调用strlen计算字符串长度,如果长度为0(即没有参数),则使用iexplore.exe作为默认进程名,它将被作为恶意代码dll注入的目标进程
在1000d53a处调用了sub_10004249
在这里插入图片描述

从其调用的函数来看,不难知道该函数是用于查找进程列表中的目标进程
sub_10004249返回值保存在eax,又赋给了esi
如果找到了目标进程,则在调用sub_1000d10d是通过dwProcessId参数使用目标进程的PID,跟入该函数
在这里插入图片描述

上图列出的函数都是进程注入时常见的函数调用
那么我们就清楚了,InstallRT是通过dll注入来启动恶意代码的

接下来分析InstallSA
在这里插入图片描述

大部分和InstallRT是差不多的,区别在于最后调用了sub_1000d920,跟入该函数
在这里插入图片描述

在1000dbc4调用了CreateServieA创建服务
在这里插入图片描述

创建服务之后,InstallSA设置ServiceDLL路径为这个恶意代码在windows系统目录中的路径

最后看看InstallSB
在这里插入图片描述

这里调用了sub_10005a0a和sub_1000df22,先看sub_10005a0a
在这里插入图片描述

从其调用的函数和字符串来看,作用是用于禁用windows的文件保护
再看看sub_1000df22
在这里插入图片描述

其带有一个包含服务名的可选参数,默认为NtmsSvc
在这里插入图片描述

恶意代码用这个参数覆盖本地系统中的一个服务。
在这里插入图片描述

默认情况下,如果NetmsSvc服务正在运行,恶意代码会停止这个服务,用自身覆盖windows系统目录中的ntmssvc.dll。
在这里插入图片描述

最后,恶意代码尝试再次启动这个服务,如果恶意代码不能启动这个服务,恶意代码就执行dll注入

Q7.每个安装的导出函数是如何工作的?
A7. InstallRT 通过带有被注入进程可选参数的DLL注入来执行安装。InstallSA 通过服务安装来执行安装。InstallSB 通过服务安装来执行安装,如果覆盖的服务仍在运行,则使用DLL注入来安装。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值