概述
17年就出现的一个老样本,最近发现此类样本有一定活跃度,做个简单的分析记录下。
样本分析
原始样本由MFC编写,程序会在框架中通过call eax的方式,调用0040118f函数
程序首先加载名为103的资源项
该数据读取出来之后会将其分为两部分不并分别解密,前面0x40解密出来得到expo.exe,后面0x40解密出来为空
加载102项的资源
调用刚才的解密函数,将102项的资源解密为压缩包,压缩包内容如下
接着程序生成一个不定长度的随机字符串:
根据随机数,尝试获取系统文件夹并和刚才随机生成的字符串进行拼接形成特有的文件夹并切换目录
循环调用000405F9C函数,将压缩包的文件循环写入到指定目录下
开始向文件夹内写入压缩包中的文件
写入dat
写入ini文件
向s.dat写入大量的请求域名
ah.dat
写入Mini.exe
v.dll
I6.dll
expo.exe
I.dll
所有文件释放之后,生成随机字符串给expo.exe重命名
生成随机数作为参数,启动重命名之后的expo.exe
进程启动之后,执行bat指令删除文件以清除痕迹
至此,原始程序功能执行完毕。
后续样本分析
虽然原程序释放了很多文件,但是经过调试可知最后只调用了expo.exe,其他的文件应该都由expo.exe 进行调用,expo.exe由aspack加壳,直接调试脱壳即可:
脱壳之后的程序依旧由MFC编写
该程序主要是通过4197f0函数执行恶意功能:
虚拟环境检测
程序首先会通过421280函数进行一个虚拟环境检测。
对当前进程环境进行判断:
通过读取SYSTEM\CurrentControlSet\Services\disk\Enum 注册表键值获取当前磁盘信息
然后查询获取到的信息中是否包含了virtual、vmware、vbox等子串,若包含则说明运行在虚拟环境中,程序停止运行:
虚拟机检测之后,程序将会通过__indword(0x5658u) 执行尝试反调试
再次通过cpu进行虚拟环境检测:
通过com组件获取当前计算机信息,宽字符比较再次检测虚拟环境,包括vmware相关字符串、Virtualbox相关字符串、HVM相关字符串
其他功能
在通过虚拟机环境检测之后,程序会创建互斥体
尝试获取各类浏览器存储的隐私信息
尝试连接baidu
查找网吧特有进程判断是否在网吧环境中:
检测计算机是否安装了VPort2
创建多个线程执行后面的代码,包括获取信息,与指定的地址建立连接等,有其他工作,这里就不详细分析了,该有的一些技术点都已经总结到了,样本分析就到这里吧