一个通过U盘传播的病毒详细分析,近期抓的但是是09年的病毒
本帖最后由 清香白莲 于 2017-8-30 10:30 编辑1.介绍
sample_sha1:0c9dec73697f74a8657e538eef8016a515e6cbc0图标:
传播途径:U盘,硬盘
该样本是某个群友在自己学校打印店里抓到的虫子。VT上显示最早上传时间是2009年。样本本身是Delphi程序,但是会释放一个VB程序。程序应该是中国人编写的,程序中含有“中华人民共和国万岁”和“感动中国特别奉献”等字样。
该样本会将自己伪装成文件夹,将除C盘以外的所有磁盘的文件夹隐藏,并将自身拷贝过去,并重命名为原文件夹名的名称,同时程序运行过程中会尝试打开与自身同名的文件夹,用户很难发现自己中毒。破坏力最大的是,当样本检测到当前日期为每月的1号、10号、21号或29号时,会将磁盘(C盘除外)里的所有文件删除。
2.行为分析
2.1注册表行为:
1. 新添加键
2. 删除值
"CheckedValue"=dword:00000001
3. 新添加值
"msfsa"="C:\\windows\\avb.exe"
"Type"=dword:00000110 "Start"=dword:00000002 "ErrorControl"=dword:00000000 "ImagePath"=“C:/Windows/System32/javasc.exe”"DisplayName"="mywinter" "ObjectName"="LocalSystem" "Description"="dfdf"
4. 改变值
"CheckedValue"=dword:00000001 "CheckedValue"=dword:00000000
"Hidden"=dword:00000001 ->00000002 "HideFileExt"=dword:00000000 ->00000001
2.2创建服务
服务名称:dongtian
显示名称:mywinter
描述:dfdf
可执行文件的路径: C:\windows\system32\javasc.exe
启动类型:自动
2.3释放文件
GHO.exe , javasc.exe, mscb.exe, sdafdf.exe, nasm.exe, mydat1, mydat2
3.详细分析
3.1总体分析:
这是一个Delphi程序,使用Delphi Decompiler分析。有五个响应过程:
在IDA中分析,主程序流程很简单,CreateForm创建Form,然后Run进入消息响应循环:
接下来对各个响应过程进行详细分析。
3.2 FormCreat
在CreateForm时进入FormCreat过程,下图是FormCreat的流程图:
具体步骤:
① 程序在开始调用ParamStr(0),获取自身进程名,比较进程名是不是javasc.exe,如果是则②,否则走③;
② 将自身拷贝到C:\Windows下,并命名为sdafdf.exe,同时运行sdafdf.exe,之后便调用halt0()退出;
③ 首先会判断与程序自己同名的文件夹是否存在,
如果存在则会调用ShellExecuteA打开文件夹,
无论与自己同名的文件夹是否存在,接下来都会判断C:\windows\avb.exe是否存在,如果存在,则④,否则⑧;
④ 修改注册表(sub_44F3A0),然后进入⑤;
⑤ 并且创建拷贝自身C:\windows\system32\javasc.exe,并在sub_44E5CC中将javasc.exe注册为服务,进入⑥;
⑥ 修改注册表不显示隐藏文件,并且修改文件夹选项也没用,删除文件夹选项中的隐藏已知文件类型的扩展名选项,删除这个键;
(左图为正常情况下文件夹选项,右图为感染蠕虫后文件夹选项)
⑦ 接下来再次修改注册表,将avb.exe加入注册表Runonce中,之后退出;
⑧ 首先创建拷贝自身C:\windows\avb.exe,这里和上面拷贝方法相同,进入⑨;
⑨ 创建拷贝自身C:\windows\system32\javasc.exe,并在sub_44E5CC中将javasc.exe注册为服务,接下来再次修改注册表,将avb.exe加入注册表Runonce中,进入⑩;
⑩ 比较进程名是不是C:\windows\avb.exe,如果是则⑪,否则⑫;
⑪ 创建拷贝自身C:\windows\mscb.exe,并执行,之后调用halt0()退出;
⑫ 比较是不是C:\windows\mscb.exe,如果不是,则程序调用halt0()退出,如果是则CreateForm过程正常退出,程序继续运行,进行下面timer的响应过程。
3.3 timer4:
首先关闭计时器,然后读取资源,释放C:\windows\nasm.exe,并且运行nasm。nasm.exe的分析下文再介绍
3.4 timer2:
首先获取当前系统时间
然后在0x0044F2DE处,获取磁盘信息,具体获取过程:设置寄存器bl的值由0x43增加到0x5B,进行24循环,遍历C盘到Z盘,利用DiskSize判断磁盘是否存在,利用DriverType获取磁盘类型:
获取磁盘信息结束后,会对之前获取的系统时间重新编码为年月日的形式,之后开始比较,如果当期时间为2009年3月之前,则Timer2过程就结束,并且判断当期日期是不是1号,10号,21号或29号病毒,如果是这几个日期会进行删除操作:
删除所有文件
3.5 Timer1:
这是该样本最重要的感染部分,首先会遍历目录,获取目录下的所有文件夹名,下图保存的是获取的文件夹信息,从123到新建文件夹均是文件夹名:
之后设置文件夹属性,将文件夹隐藏:
然后创建以文件夹名为名称的可执行程序,伪装成文件夹:
其中CopyFile的第三个参数为True,表示若拷贝过去的文件路径下已存在相同文件,那么不替换文件。
3.6 timer3:
修改注册表
3.7 nasm.exe
在timer4过程中释放了nasm.exe。nasm.exe与mscb.exe之间实现了双进程守护,两个进程彼此创建。首先在PEID中查看nasm.exe发现是VB程序,祭出VB反编译神器VB Decompiler。
nasm.exe程序较简单,VB Decompiler反编译的结果也很清晰,基本就是源码,VB De反编译出nasm.exe程序中的函数有以下几个:
其中Proc_403E60的作用是返回字符串“C:\Windows”,Proc_403FC0是Proc_403E60调用的一个中间过程,对字符串进行处理。
Proc_402A20利用CreateToolhelp32Snapshot、Process32First、Process32Next这三个API遍历进程,获取进程列表:
Form_Load_403260的作用是调用Proc_403510,Proc_403510会将masb.exe文件的前0x5000字节存储为“C:\Windows\mydat1”,将后面的字节存储为“C:\Windows\mydat2”:
三个文件属性比较:
processhelp_Timer_4038D0会循环进程列表中有没有mscb.exe进程和heihu.exe进程。笔者研究了很久,也没找到heihu.exe程序是哪一个程序,但是如果程序检测到heihu.exe进程的存在,nasm.exe就会执行关机的shell命令:"shutdown -f -s -t 10 -cheihu error!"
如果mscb.exe进程不存在,processhelp_Timer_4038D0会运行mscb.exe程序,但是如果processhelp_Timer_4038D0检测到C:\Windows路径下没有mscb.exe文件,则会执行existh_Timer_4038D0;existh_Timer_4038D0利用了和Proc_403510相同的手法,不过这一次是将mydat1和mydat2文件合并存储为mscb.exe程序。
至此,nasm与mscb.exe成为了守护彼此的“情侣”进程!
4.总结
本次分析的病毒,利用了各种途径让自己存活下来,虽然分析过程比较长,但是程序流程还是很清晰。该病毒将自己伪装成文件夹,通过U盘传播,利用守护进程保证自己难以被杀死,将自己注册为服务,实现了内存常驻。
解压密码:http://www.52pojie.cn masole 发表于 2018-8-16 10:15
那么分析出病毒有什么应对办法吗?现在公司内网就被这种病毒干扰,虽然360,火绒都能杀出来,但是全盘扫描 ...
win10自带defender,各类杀毒软件,火绒安全都可以查杀,公司电脑杀完毒之后一定要把U盘也杀杀,而且要保证病毒样本库实时联网更新 感谢楼主分享 学习学习 感谢分享!:loveliness: 楼主牛人,学习一下,我也想写个无恶意的病毒试试。 正想学习一下这方面的知识 感谢 病毒仅供学习分析。{:300_938:} 不弄了,没有虚拟机了