1

[调试逆向] [病毒木马] [原创] 萌新对 Wanna Cry 的分析(初次尝试请多指教...)

THeme丶 2018-6-10 14:53 801

0x00 前言

前辈们你们好我是萌新(•ᴗ•)

第一次尝试病毒分析,想挑一个资料多的来写(免得我找不着北...),于是决定分析之前非常出名的WannaCry

(过程中几次卡壳都从前辈们的报告里得到了思路,感谢每一位前辈!)

文章中问题肯定不少,就麻烦各位多多指正帮助了!

这个样本是我从B站一个测试病毒的视频里给的网址下的(叫1500个病毒啥的),拖进IDA之后直接到了WinMain,因为之前已经看过各大厂商写的分析报告,大概观察了一下于是得出结论:我的样本病毒是主程序生成的负责进行加密文件勒索用户的模块(主程序负责释放勒索模块和传播),不过我现在还在学习阶段,就先只研究一下病毒的恶意行为也是极好的 ⊙﹏⊙‖ ...


0x01 基本信息

文件名称:wcry.exe

MD5:84C82835a5d21bbcf75a61706d8ab549

文件类型:EXE

出品公司:MicrosoftCorporation

壳或编译器信息: MicrosoftVisualC++6.0


0x02 行为分析

一:勒索模块主体分析

首先样本向注册表写入了两个键值:

RegCreateKeyW



然后使用内置的解压软件,以WNcry@2ol7为解压密码,释放了b、c、r、s、t.wnry文件,u.wnry、taskdl/se.exe是PE32文件,一个多国语言支持包...

果然 “制作恶意程序的人往往也是出色的开发者” 一点儿没错...


解压缩资源文件的代码,Str是压缩密码。


上面几个函数里面实在是复杂,看的眼睛都瞎了...大体上都是循环解压的函数。


释放的文件的字节码:

b.wnry字节码:查资料之后得知是BMP文件。


c.wnry字节码:查资料之后得知上面的比特币钱包地址,下面的像是木马的下载地址


r.wnry字节码:这个就很明显了,是勒索窗口里显示的文字。


s.wnry字节码:查资料后得知PK是zip文件头,解压之后是TaskData(这么乱果然是代码...ヾ( ̄▽ ̄)~)


t.wnry字节码:看不出来是什么,这么乱应该也是代码吧


接下来到这里:三个字符串是比特币钱包。但是之后这里我没看懂,从c.wnry里读取了30C字节数据,然后好像也没往里写什么呀?

就又写回去了,函数的第二参数为1是读文件,0是写文件



把程序所在目录的文件属性设为了隐藏。但是我没找到对应代码......


接下来:无窗口创建进程,命令行参数: attrib +h .

无窗口创建进程,命令行参数:icacls . /grant Everyone:F /T /C /Q


然后获得要用的API


这里是导入一个密钥,程序里的加密操作使用Crypt系列函数做的。

(密钥相关的知识我现在力所不能及...等以后有时间了再好好研究一下吧)


然后到了主体中最重要的部分:动态加载t.wnry作为dll并调用其中的TaskStart函数 (注:这是整理的时候加上的)

可以看到打开t.wnry,ReadFile。


现在我可以确定文件里的东西很重要...应该就是代码


下面又到了一处:解密了t.wnry之后把数据映射到了内存中,可以看到PE头。

因此得出结论:t.wnry是一个dll文件,并且病毒自己实现了LoadLibrary,里面应该才是核心代码。


节区信息



终于做完了准备工作,要到关键函数了:


FindTaskStart函数:

这里因为看过报告...所以知道是密钥相关的文件


释放密钥文件之后函数去t.wnry里搜索导出函数,可以看到里面只有一个函数:TaskStart。

t.wnry的导出表:


到这里勒索模块主体的静态分析就结束了,于是我试着把释放出来的Dll dump下来继续分析,但是这里因为内存的类型是Private,OllyDump和LordPE都无法访问内存ヾ(゚∀゚ゞ)


纠结了一阵子之后悟出方法如下:内存窗口打开这块内存,全选二进制复制,WinHex新建文件,粘贴进去选择ASC Hex

(作为萌新,我猜除了我一定还有其他人以前没想到这么简单也可以dump的吧…(⊙_⊙;)…)

于是愉快的继续分析,IDA打开可以看到代码比之前清楚得多,应该是因为准备工作都做好了吧


二:主体动态加载的dll的分析

首先创建了一个互斥体


获得PC的SID(安全标识符,用于标识用户,组和计算机帐户)


这段代码是:查找文件对象的所有者,取得该对象的所有权来更改文件对象(查资料得知的,没太理解)


获得文件属性,但是GetLastError说文件不存在,直接返回了


于是我猜了一下:这个文件应该是交了钱之后装着密钥的,如果存在就会开始解密了而不是加密文件。于是就跳过了一个超复杂的函数

(确认后的确是这样,猜对了就很开心...ヽ(✿゚▽゚)ノ)



释放互斥体



创建了五个线程:

第一个线程:每隔一段时间就获得时间,打开00000000.res然后写入数据。


第二个线程:

每隔一段时间检测解密密钥文件是否存在。存在应该就会解密。


第三个线程:

隔一段时间检测一次磁盘数量有没有变化,有的话应该会加密里面的文件。


第四个线程:每隔一段时间就无窗口创建taskdl.exe进程(看了前辈们的报告说是清除文件的)


第五个线程:

每隔一段时间创建taskse.exe和@WanaDecryptor@.exe进程(勒索窗口)


里面还存有一个注册表键值,但是没有进行操作,我猜测应该是创建的子进程里使用键值写注册表然后实现自启动?


五个线程创建完毕之后终于到了最后一个函数

样本里还涉及对密钥进行操作,这类函数我实在是看不懂,贴一张安天的前辈的报告的图吧......

(密码学没好好学,下周还考试呢啥都不会emmm)





三:TaskStart中的加密文件部分分析


就这个函数...我在IDA里分析完了之前的代码之后,因为它没有参数于是居然完全没有发现它的存在...

一度心态崩溃(脑子里一直循环:卧槽我到底在哪漏了啥??)

于是给他起个名字叫:明明最终要但居然连个参数都没有的鬼函数...


首先判断@WanaDecryptor@.exe,@WanaDecryptor@.exe.lnk,ReadMe是否存在



然后开始加密所有用户的桌面和文档目录(可能是为了让所有用户都立即感受到自己被勒索了emmm)

获得桌面的路径


根据路径找到目录


然后创建临时文件并打开,但是什么都没做就删除了?...

 


在目录下排除这三个文件


然后遍历目录下所有的文件,如果文件格式不是exe和dll就判断文件格式是不是要加密的


是的话就打开文件,获得文件大小,然后加密


加密当前用户文档目录下的文件

对其他用户的这两个目录都进行加密



接下来是使用taskkill.exe终止下面五个进程



获得磁盘卷信息,判断磁盘是否有效(?)到磁盘内第一个目录下开始遍历

找到临时文件目录,使用和之前一样的方式遍历加密文件。


完毕后创建勒索窗口进程,使用线程1的线程函数写入res文件。


创建cmd,用命令行启动勒索窗口,会每隔一段时间就把原文件移动到临时目录下。


移动到临时目录下


每隔一段时间删除临时目录下的文件


文件遍历加密部分的详细过程我现在也有点力所不能及,希望等修炼一段时间之后再重新尝试一下吧!


0x03 总结

作为萌新我一定是脑子坏了才会第一次分析就来看WannaCry (┬_┬) 感觉样本最核心的部分应该是对密钥进行的操作和遍历磁盘文件时的详细操作,但是目前我能力还有限,暂时告一段落(核心部分之外的代码都已经让我分析的很吃力了…)

样本的行为流程总结如下:主程序写注册表之后使用内置压缩软件解压资源文件,动态加载资源文件中的模块,然后转到模块导出函数TaskStart函数里

TaskStart函数先为之后的文件操作获得了一些安全权限,然后检测是否存在解密密钥,存在应该就会进行解密操作。接下来创建五个线程分别执行不同的操作。(上面分析了)

最后是遍历加密文件函数:从当前桌面和文档目录开始遍历加密,再对每个用户的这两个目录遍历加密。接着遍历磁盘分区下的每个目录中的每个文件,如果是要加密的文件类型就随机生成密钥,加密文件,并生成新文件添加后缀名.WNCRY,原文件的字节码好像也被进行了可能是异或的加密操作(没找到对应代码…),文件大小和原来一致但是字节码不一样。之后会创建一个进程,定时进行移动原文件到临时目录下和清空临时目录操作。


就这样吧!!撒花


最后于 2018-6-11 12:43 被THeme丶编辑 ,原因:
最新回复 (9)
THeme丶 2018-6-10 19:36
2
emmm,刚才才看到mstwugui版主大大的恶意代码分析报告模板里kanxue大大说的精华标准按照模板来定T﹏T
等我有时间再整理一下重新发一次吧...
sudozhange 2018-6-10 19:54
3
wannacry是要有永恒之蓝利用模块,也是比较重要的部分,内存中是可以提取密钥的,没有分析到
THeme丶 2018-6-11 09:08
4
漏洞利用部分是在病毒主程序里用来传播的,我拿到的样本是主程序释放的勒索模块。
最后于 2018-6-11 12:45 被THeme丶编辑 ,原因:
THeme丶 2018-6-11 09:28
5
等我再修炼一整子,重新找一个带传播的样本主体。。再试一次
最后于 2018-6-11 12:46 被THeme丶编辑 ,原因:
THeme丶 2018-6-11 12:41
6
有人知道自己怎么删自己的回复吗...?只发现了编辑功能...
最后于 2018-6-11 17:12 被THeme丶编辑 ,原因:
basketwill 2018-6-12 09:50
7
设置隐藏用得cmd    命令
THeme丶 2018-6-12 19:51
8
basketwill 设置隐藏用得cmd 命令
感谢前辈!!前辈一句话胜读十天书♪(^∀^●)ノ
之前我还在研究命令行都能干啥,但是直接搜搜不出来...于是就放弃了。当时看到创建进程的时候完全没想到...
命令行参数:attrib  +h:设置文件夹属性为隐藏
命令行参数:icacls  .  /grant  Everyone:F  /T  /C  /Q:设置所有用户完全访问(读取,写入)特定文件夹。
应该没啥问题了吧^_^
THeme丶 2018-6-13 00:28
9
妈呀(┬_┬)。。谢谢kanxue版主大大!!我会继续努力的!!!
枝枝呀 ෆ 2018-6-13 09:37
10
最后于 2018-6-13 11:52 被枝枝呀 ෆ编辑 ,原因:
返回