样本来源
https://www.52pojie.cn/thread-1377686-1-2.html
样本概况
样本信息 | Value |
---|---|
样本名称 | 免费外纪.exe |
样本大小 | 4.62MB(4,853,850 Byte) |
MD5 | bcfc56704ea9b62650bec0349532b7d7 |
SHA1 | 176fbfb56e401f1043532377c1b67bd207c32bb9 |
时间戳 | 28/10/2020 |
壳信息 | 无 |
数字签名 | 无 |
分析环境
环境信息 | Value |
---|---|
操作系统 | windows 10 |
病毒扫描 | https://www.virscan.org |
行为分析 | 火绒剑 |
调试工具 | OllyDbg、IDA Pro |
初步分析
VirSCAN扫描:
火绒剑分析:
双击运行结果:
调试器运行结果:
结论:若通过调试器运行样本,初步得到样本会做以下几件事情
- 将自身重命名为svchost.exe并拷贝到C:\Windows目录下
- 将自身重命名为52993656.bak并拷贝到C:\Windows\SysWOW64目录下(数字为随机生成)
- 设置注册表键值
- 自我删除
验证:
1)比对源文件和svchost.exe的MD5值:
2)比对源文件的MD5和52993656.bak的MD5值:
3)查看注册表键值
由于进行过多次调试,因此存在多行不同的值
调试分析
第一个线程
1)首先使用IDA从WinMain开始静态分析
2)查看sub_4010F5
3)使用OllyDbg调试sub_4010AF得到关键数据
发现循环结束后,地址0x408578的数据出现了熟悉的PE头部特征“MZ”
4)将解密后的数据dump下来,并删除无用数据
5)查壳,发现存在nsp壳
6)使用IDA进行反编译,发现入口函数为DllEntryPointer,说明该文件类型为DLL动态链接库,不方便使用手动脱壳的方法进行脱壳
7)继续向下调试,直到样本调用这个DLL
可以看到调用的地址是0x10009c70,由于在此之前调用了qmemcpy拷贝DLL各个区段到新内存,以及进行了一系列LoadLibrary和GetPorcAddress操作,猜测这是样本在对DLL进行脱壳,因此这个时候尝试再次dump,代码基址和数据基址可以在内存中定位
顺利得到了脱壳后的DLL文件,IDA打开发现存在进程操作,文件操作和注册表操作等相关API调用
7)OD继续向下调试分析
分析一部分后的DllEntryPointer函数注释如下,有些函数还不知道具体是什么含义
随后创建了两个新的线程,暂时先不分析,接着往下看
8)查看sub_10002450
9)最后调用sub_10009570,里面创建了第四个线程sub_10009200,然后进入sleep
第二个线程
1)首先分析sub_100076d0(由于IDA中数据为空,因此使用OD调试)
在内存中生成了一些字符串并调用了sub_10002f50
2)sub_10002f50中生成了字符串SYSTEM\CurrentControlSet\Services\Bcdefg
再将这个字符串作为参数传入sub_1000bc70并调用
sub_1000bc70存在大量的CALL ESI这样的指令,无法反编译为C代码
3)sub_1000bc70存在大量的CALL ESI这样的指令,无法反编译为C代码,继续使用OD调试
导入了一些注册表相关的API
打开了注册表键SYSTEM\CurrentControlSet\Services\Bcdefg
读取了键名MarkTiny
的值
调用sub_1000bed1关闭了注册表
然后释放了ADVAPI32.dll并return
4)之后sub_100076d0又调用了两次sub_10002f50获取了月份和日期
在栈里生成rundll32.exe并调用了GetModuleFileNameA得到了当前路径
之后比较了一下当前进程名是否为rundll32.exe
如果不相同的话,会调用三个函数
首先调用sub_10003830遍历进程模块查找是否存在下面五个进程
cthlp.exe
pythonw.exe
xService.exe
pgradeHelper.exe
AcrylicService.exe
然后调用sub_10004990比较了下面第一条图片路径和后三条图片路径,暂时不清楚具体作用
C:\Windows\web\wallpaper\Windows\img0.jpg
C:\Users\test\Pictures\maldun_background.jpg
C:\Users\vbccsb\Pictures\Desktop.jpg
C:\Users\vbccsb\Pictures\Desktop.jpg
接着又调用了sub_10005fc0检测进程模块
C:\delete
C:\create
erAToolClient.exe
SandboxieRpcSs.exe
SandboxieDcomLaunch.exe
后面进入了一段很长的Sleep,猜测是为了执行其他线程,Sleep结束后又会重新回到线程头部开始执行
这个线程暂时先分析到这里
第三个线程
1)开启了一个新线程sub_1000b500
2)分析sub_1000b500
3)查看sub_10009ba0
4)分析sub_100099d0
第四个线程
1)启动套接字
随后进入一个大循环,共三层
2)分析sub_10001560
在sub_1000b580中再次调用了sub_1000b500
调试分析看看与之前有什么不同
3)分析sub_1000b7b0
3)分析sub_1000b6a0
首先加载了一些函数
然后调用这些函数,获取桌面信息,值位Default
函数结束后回到父函数,向下执行调用sub_10001680
第五个线程
1)分析sub_10001680
其它思路
之前有一个地方判断了一下当前程序的文件名是否为rundll32.dll,看一下若比对成功的情况
若比对成功会经过这里
由于sub_1000788A在IDA中为空数据,因此使用OD调试分析
首先通过获得当前年月日
后面也没做什么,函数结束后回到判断文件名的位置开始循环这个操作
总结
通过分析,该样本大致有以下几大明显行为
- 从互联网下载程序并执行,而分析样本时URL是空的,似乎是被有意抹去,可在调试时手动添加进行测试
- 该进程会启动socket进行数据交互和加解密操作,ip地址似乎也是被有意修改为了127.0.0.1,猜测目的是和新下载的恶意程序进行数据交互和命令执行,实现远控
- 该样本会将自身重命名为svchost.exe并拷贝到系统目录下,再将自身和一个dll文件重命名后移动到系统目录下
唯一的遗憾是第五个线程中存在一个大量算法的函数,由于socket连接不成功,因此无法分析函数的目的是什么