WannaCry勒索病毒分析

为了分析WannaCry.exe有着什么样的行为,以及它是如何释放WannaCry_PE.exe程序的,在IDA中打开WannaCry.exe
我们可以发现它的头是WinMain,那它应该是带有窗口的程序,我们控制台程序一版是Main入口。hInstance、hPrevInstance、lpcmdLine、nShowCmd这些参数也是用于WinMain。

从IDA的字符串解析上,我们看见了应该网址,这个网站的名字有点乱啊。

在调用InternetOpenA()函数时,它设置了dwAccessType参数为InterNet_OPEN_TYPE_DIRECT,根据MSDN的解析,这是指解析本地主机号,连接网络。如果主机没有联网,就会返回NULL;

接着,将会调用InterNetOpenUrlA(),这个函数里,dwFlags的值是等于0x84000000,但是这个值在MSDN找不到,于是我猜想有可能是两个值加在一起了。

于是我将这两个值加起来,也就是说dwFlags = INTERNET_FLAG_RELOAD + INTERNET_FLAG_NO_CACHE_WRITE,也就是从服务器上下载请求的文件、对象或目录列表、而不是写入缓存中。

我想这个网站,会记录我的主机号,访问信息,而且还会给我安装不知名程序,于是我先往下分析,再看看它究竟想干什么。

在这里,我发现如果InternetOpenUrlA()返回一个NULL,那么就会跳转到0x004081A7,否则跳到loc_4081BC退出程序。也就是说,在这个网站里,它会下载一个病毒或者木马;如果访问不了网站,那么就在本机给你整一个病毒木马。

分析sub_408090,它可以分为了两部分分析,一部分是如果call _p_argc返回的参数个数小于2,那么就跳转到sub_407F20。否则跳转到另一部分loc_408089。

在OD上动态跟随,可看见GetModuleFileNameA()返回了当前文件所在的目录地址填入缓冲区的大小。

_P_argc()返回了eax是一个地址,这个地址的接引出来是等于0x1的,也就是1个参数,这里我猜测是检测是否创建服务和进程,因为在第二部分loc_408089是直接调用OpenSCManagerA(),即打开服务管理器,而且并未创建服务、进程。所以要是参数为1,即未创建服务和进程。

在sub_407F20中,我们可以发现他调用了两个函数:sub_407C40、sub_407CE0;

在sub_407C40上,我们可以看见它先是用sprintf打印 我们GetMoudleFileName()返回来的文件路径 -m security”。接着打开服务管理器,如果打开失败,就跳转到loc_407CCA,退出程序,否则接着执行0x00407C74。

在调用CreateServiceA()时,关注到它的参数lBinaryPathName、dwStartType、dwServiceType、dwDesiredAccess、DisplayName、ServiceName这几个参数。

1)lBinaryPathName,利用OD动态分析,可以发现它是我们上面sprintf的那段东西。
2)dwStartType = 0x2,指的是SERVICE_AUTO_START,类型是服务类型是:在系统启动期间服务控制管理器自动启动的服务,启动文件自启动服务。
3)dwServiceType = 0x10,指的是SERVICE_WIN32_OWN_PROCESS,在其自己的进程中运行服务,也就是独立进程独立服务。
4)dwDesiredAccess = 0xF01FF,指的是Service_All_Access,Windows安全模块该服务访问服务管理器和服务对象。
5)DisplayName、ServiceName指的是显示名称和服务名称。
这里的目的是,将WannaCry.exe创建服务使其自启动,服务名称是messecsv2.0。

接着,启动服务

接着,分析一下sub_407CE0,它的流程是GetModuleHandleW获得服务模块的句柄->CreateProcess、GetProAddress创建并且获得进程地址->CreateFile、GetProAddress创建文件并且获得它的地址->WriteFile、GetProAddress写入文件并且获得它的地址->closeHandle、GetProAddress关闭对象索引并且返回它的地址。

接着上面的顺序,就是一个if判断,判断上面的地址是否存在,

1)通过FindResourceA(),参数ResourceType = “R”,意思是资源类型为读、ResourceName = 0x727,也就是资源模块名称为0x727的文件,ebx = NULL,因为上面的if程序是将它们的地址与ebx作比较,在0x00407CF7上的指令是xor ebx, ebx;也就是将ebx变成0了。
2)接着,将FindResourceA()返回的句柄作为参数,调用LoadResource()函数,这个函数用于获取资源地址,以句柄的方式返回。
3)将LoadResource()的返回的句柄作为参数,调用LockResource()函数,这个函数用于获取资源的指针,也就是地址。
4)SizeofResource()将返回资源文件的大小。

当我们上面的对资源文件的检测都成功了,就会跳到0x00407DB9,这里可以分为三部分,
一部分是,1)它首先通过memset()函数,根据rep stosd的循环规律,次数是0x40->十进制64,EDI将会移动64*4字节,这里也总共等于数组Buffer的大小,我们也可以通过IDA的F5理解这段代码,xor eax, eax;即是将这块Buffer置为0。
2)再次通过memset,将NewFileName这个数组也置为0,它的大小跟Buffer一样大。
3)打印目录C:\WINDOWS\tasksche.exe在Buffer中和C:\WINDOWS\ qeriuwjhrf在NewFileName中。
4)利用MoveFileExA(),dwFlags = 0x1,即为MOVEFILE_REPLACE_EXISTING,如果存在名为 lpNewFileName 的文件,则函数会将其内容替换为 lpExistingFileName 文件的内容。但NewFileName和Buffer都还没有创建文件,所以,如果它创建了文件就将文件里的内容替换为Buffer的内容。
5)调用添加函数CreateFileA,参数dwDesiredAccess = GENERIC_WRITE(0x40000000),这指的请求访问文件为可读取,参数dwCreationDisposition = CREATE_ALWAYS(0x2),这指的是如果指定的文件存在且可写,则函数将覆盖文件,函数成功,最后错误代码设置为 ERROR_ALREADY_EXISTS (183)。如果指定的文件不存在并且是有效的路径,则会创建一个新文件,函数成功,最后错误代码设置为零。参数dwFlagsAndAttributes = FILE_SHARE_DELETE(0x4),指的是设置该文件为该文件是操作系统的一部分或完全使用的文件。


接着,如果创建taskche.exe成功的话,就会跳转到0x00407E54,在这里将会读写文件
然后还会调用一个dword_43144C,在OD中识别出了是closeHandle()。


通过memset(),将StartupInfo.lpReserved0填充,但是这段代码,我看不懂,也不知道有什么用,在OD里跟踪是这样的,IDA F5是两个memset()再加上strcat()。(如果有师傅看见了,可以提点我两句)


最后,这一部分就是为tasksche.exe创建进程,其中,设置的参数除了dwCreateFlags和lpCommandLine外,其它都为ebx,也就是等于0,dwCreationFlags = CREATE_NO_WINDOW (0x80000000),lpCommandLine要执行的命令行指向Butter的地址。
StartupInfo.cb = 0x44,指定结构体大小;StartupInfo.wShowWindow = SW_HIDE (0x1),StartupInfo.dwFlags = STARTF_FORCEOFFFEEDBACK + STARTF_USESHOWWINDOW (0x81)

总结一下,WannaCry.exe通过检查本地连接,要么服务器上将恶意程序添加到本地,要么就在资源文件中取出另名为tasksche.exe,并且目录C:\WINDOWS\tasksche.exe,为其载入进程,WannaCry.exe启动了开机自启动服务,也就是说,即使你卸载了tasksche.exe,WannaCry.exe还是会检查联网和taskche.exe然后继续启动。

下一篇是对tasksche.exe的解析,查看它是如何利用漏洞,如何解压资源包。

WannaCry勒索病毒分析过程**中**相关推荐

  1. WannaCry勒索病毒分析过程**中**(注)

    WannaCry勒索病毒分析 中(注) 我犯了一个很大的错误,就是在做分析的时候没有确定函数的作用,在分析过程中有捉不到重点的毛病. 在WannaCry.exe的分析中,它在判断打开它的URL后,如果 ...

  2. WannaCry勒索病毒分析过程**上**

    WannaCry勒索如何分析实战 上 我的第一篇博客文章 作为一名大四的网络工程应届毕业生,发自内心的感谢网上的每一位博主,感谢网上的每一位大佬愿意分享自己的经验.我才可以在网上学到如此多的知识.我在 ...

  3. WannaCry勒索病毒分析 **下**

    WannaCry勒索病毒分析 下 在WannaCry.exe的分析实战 上 里面我已经拿到了WannaCry.exe在资源文件中的PE文件,并且给它提了个名WannaCry_PE.exe文件.但在Wa ...

  4. [系统安全] 二十六.WannaCry勒索病毒分析 (2)MS17-010漏洞利用及蠕虫解析

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  5. [系统安全] 二十七.WannaCry勒索病毒分析 (3)蠕虫传播机制解析及IDA和OD逆向

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  6. [系统安全] 二十八.WannaCry勒索病毒分析 (4)全网“最“详细的蠕虫传播机制解读

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  7. WannaCry 勒索病毒复现及分析,蠕虫传播机制全网源码详细解读 | 原力计划

    作者 | 杨秀璋,责编 | 夕颜 来源 | CSDN博客 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 这篇文章将详细讲解WannaCry蠕虫的传播机制,带领大家 ...

  8. WannaCry勒索病毒复现及分析,蠕虫传播机制全网源码详细解读 | 原力计划

    作者 | 杨秀璋 编辑 | 夕颜 题图 | 东方 IC 出品 | CSDN(ID:CSDNnews) 这篇文章将详细讲解WannaCry蠕虫的传播机制,带领大家详细阅读源代码,分享WannaCry勒索 ...

  9. [网络安全自学篇] 七十.WannaCry勒索病毒复现及分析(三)蠕虫传播机制分析及IDA和OD逆向

    这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您们喜欢,一起进步.前文分享了宏病毒相关知识,包括宏病毒基础原理.防御措施.自发邮件及APT28样本分 ...

最新文章

  1. 【yolov3目标检测】(3) opencv+yolov3 检测交通路况,附python完整代码
  2. django之视图系统 views.py--主要内容(FBV和CBV、dispath、request对象和request.FILES、JsonResponse)...
  3. H.264宣布永远不会对使用者收费
  4. python dataframe是什么_python – 逐个构建DataFrame的最快方法是什么?
  5. 数据还是模型?人类知识在深度学习里还有用武之地吗?
  6. c# combobox集合数据不显示_excel打开数据时显示乱码/问号amp;看起来一样却v不出来怎么办...
  7. 2013 Multi-University Training Contest 4
  8. 【报告分享】2020年中国企业直播服务市场研究报告.pdf(附下载链接)
  9. switch 是如何支持 String 的?为什么不支持 long?
  10. PostgreSQL快速入门
  11. HG255D刷机OPENWRT笔记
  12. html看图识颜色,canvas 识别图片颜色 解析图片颜色
  13. 【全栈编程系列】SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题、配置启动异常No SecurityManager...)
  14. 金刚经原文、注释、译文完整版
  15. 股票交易成本有哪些费用?
  16. [经验教程]iPhone苹果手机电池健康度怎么查询及如何更换苹果iPhone手机电池恢复健康度到100%?
  17. 三国志战略版:Daniel_张角分析
  18. 关于自行修改人人商城模板文件目录指引
  19. Java中String与Byte之间的各种转换
  20. 配置好的HTTPS服务,无法访问

热门文章

  1. 做抖音为什么需要海外抖音服务器?如何自建海外抖音服务器站点?
  2. python调用java之Jpype实现java接口
  3. 数据结构 —— 双向链表(超详细图解 接口函数实现)
  4. 前端开发之从零开始的uniapp(1):创建uni-app项目
  5. fastapi--安装
  6. IF: 8+ m6A调控因子与m6A相关的lnc/mRNA作为结直肠癌预后因子的综合性分析
  7. Mysql部门培训-入门篇
  8. 女 大三,抱金砖~呵~
  9. 2023电工杯数学建模思路 - 复盘:校园消费行为分析
  10. RFID MFRC522