Wannacry2.0勒索病毒分析----小白流深度解析

接到一个Wannacry2.0逆向分析的活,基本上把所有能查到的文章都查了一遍。本人在逆向方面也是小白一枚,结合了好多文章以及逆向课程,最后成功解析整个程序。
首先对到手的勒索病毒查壳,可以看到这个程序没有加壳。

关闭网络连接以及windows实时保护

首先运行Process Monitor,一款微软提供的系统监视工具,用于实时监控Windows操作系统上的文件系统、注册表和进程活动。

可以看到病毒是逐步锁定文件,此时桌面还没有替换,也没有弹窗。这也是中勒索病毒需要第一时间断网断电的原因

病毒完全运行之后,桌面替换并出现弹窗。页面提供了多国语言,左侧是一个计时器,设定3天付款,超过三天费用翻倍。超过7天就无法恢复。同时提供了一个Decrypt按钮,可以恢复一点文件,证明攻击者能力。

我们来到Process Monitor,ctrl+L打开过滤器,根据进程名称找到wcry.exe


过滤之后就可以看到详细信息,包括进程启动的路径、涉及命令等。

Ctrl+T打开进程树,可以看到病毒运行之后会生成一系列exe文件、调用命令提示符。

分析生成的三个程序,attrib.exe执行命令attrib +h,用来隐藏文件。这里也可以看到病毒会将自己伪装成微软的软件

icaicls.exe执行命令icacls . /grant Everyone:F /T /C /Q。来修改文件和文件夹的权限。其中.表示当前目录;/grant Everyone:F表示授予Everyone用户组完全控制权限;/T表示递归应用到所有子目录和文件;/C报错继续执行;/Q表示不提示成功信息。@WanaDecryptor@.exe会通过“cmd.exe /c vssadmin delete shadows /all /quiet & wmic shadowcopy delete & bcdedit /set {default} bootstatuspolicy ignoreallfailures & bcdedit /set {default} recoveryenabled no & wbadmin delete catalog -quiet”命令删除系统卷影副本、删除备份目录并禁用系统恢复功能

通过cmd执行命令“reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v "jkbxjvtomvykrh375" /t REG_SZ /d "\"C:\Users\Administrator\Desktop\2024\勒索软件样本\wcry2.0\tasksche.exe\"" /f”在注册表中添加一个新的启动项

通过命令可以观察到该病毒程序执行操作大致流程为释放内部的一些文件,然后将文件夹和文件隐藏以及赋予权限。并添加启动项等。其中执行过程均设置不会提示消息。

对程序操作进行统计计数,可以看到涉及的各种函数。详细的执行流程转到IDA中解析。

当使用IDA分析一个程序时,一般去找入口点函数start或者主函数WinMain函数,在该病毒程序中,就存在主函数WinMain。当前窗口为反汇编视图,在此窗口可以看到程序的汇编指令和内存布局,包括寄存器操作、推栈和函数调用等

快捷键tab或者f5进入反编译视图,在这个视图下汇编代码被转换为更易读的C风格代码,帮助用户理解程序的高层逻辑和功能。它展示了变量、函数调用和控制结构,更接近人类可读的源代码。

接下来观察其中代码。通过Filename数组来对首字节以及后续字节进行初始化,通过GetModuleFileNameA函数来获取当前模块的文件路径。通过函数sub_401225结合计算机名生成一个随机字符串。通过函数sub_401B5F在C:\ProgramData目录下创建一个新的目录。通过函数sub_401064创建进程,并以命令方式隐藏目录下所有文件,并赋予目录下所有文件完全访问权限。通过函数sub_4014A6对加密文件t.wnry进行解密。

通过函数sub_4010FD新增名为WanaCrypt0r的注册表,并在发生错误时进行处理。

通过函数sub_401DAB引入XIA:2058资源,这里可以看到FindReSourceA函数引用了一个Type字符,双击跳转后可以看到一串字符为“XIA”而在WinMain函数中可以看到401DAB函数还引用了一个Str字符串,跳转发现str的值为“WNcry@2ol7”,这里通过文章了解到这个值是后续病毒存放资源文件的压缩包解压密码。

双击Type字符串,或者shift+f12跳转到字符串列表,发现type字符串的值是XIA

在WinMain函数中sub_401DAB函数会将内部资源文件释放出来,而str放的是解压密码。



 

通过函数 sub_401E9E随机选择一个比特币地址。其中Source0、1、2三个数组用来存放三个比特币地址,这个比特币地址就是我们在勒索窗口下方看见的一个地址

这里的401064函数是用来创建进程的,而在WinMain中引用到的CommandLine以及aIcaclsGrantEve就是存放之前提到的设置完全控制权限以及设置文件隐藏的命令

往下就可以观察到程序的最关键函数sub_4014A6,它负责对存放加解密密钥、程序核心算法的文件t.wnry进行解密

可以看到该函数会为文件分配内存空间。同时多次使用ReadFile_0来验证文件的完整性,并读取0x10000字节的大小,最后对加密的文件进行解密。

函数sub_401DAB:

使用Resource Hacker打开X1,发现资源“XIA”下存在名称为2058:1033的资源数据,观察16进制请求头为 50 4B 开头,判定为zip压缩包文件,提取该资源,修改后缀为.zip,使用360压缩方式打开,存在文件msg、b.wnry、c.wnry、r.wnry、s.wnry、t.wnry、taskdl.exe、taskse.exe、u.wnry,解压密码为“WNcry@2ol7”

我们回到靶机服务器,使用ollydbg动态调试病毒,根据函数sub_4014A6找到地址004014A6,根据代码找到函数结束位置00401707并按F2设置断点。

在函数结尾位置按f2打上断点

 

输入F9运行程序,观察右上角的寄存器地址002DECF8,鼠标点击这个地址然后右键,数据窗口中跟随。跳转后通过左下角HEX数据头4D 5A发现当运行完sub_4014A6函数后病毒于此处生成一个pe文件。根据起始地址002DECF8,大小0x10000,所以此处PE文件地址范围为002DECF8-002EECF8,选中该范围内的数据,右键--二进制--二进制复制,将数据保存到一个新建的文本文档1.txt中。

此时再回去看病毒的文件夹发现原本XIA:2058里面的文件已经释放出来了,但是文件还没有被加密上锁。说明对文件加密上锁的操作发生在释放文件之后。

打开010 Editor,点击File--Import Hex--1.txt,文件类型选择Hex Text。全选所有数据,右键--Selection--Save Selection,将文件保存为exe格式,得到t_wnry.exe。使用PEiD查看该文件,发现为dll文件,

使用IDA打开t_wnry.exe继续分析,发现该程序存在函数TaskStart.通过GetModuleFileNameW获取程序全路径,通过CreateThread回调函数内部每隔5秒检测00000000.pky文件一次。通过CreateThread回调函数内部每隔3秒运行一次taskdl.exe、taskse.exe和@WanaDecryptor@.exe程序。

通过sub_10003AC0创建两个文件分别保存公钥和私钥

其中sub_10005730是最主要的加密文件的函数

进入第二层函数sub_10005680

这里注意到sub_10001830后有四个参数,其中Parameter作为数组,byte_1000DD24作为一个字节类型的全局变量,长度被设置为34,用来存储临时数据;(int)sub_10005340中的fopen函数引入了f.wnry以及字符串at

用来实现将f.wnry以追加模式打开,并将内容添加到文件结尾,而不覆盖原有内容;(int)&dword_1000DD8C用来存储整数数据

sub_10001830中分配了两块1MB的内存块,并执行了前面的四个参数。达到了将文件移动到临时目录,并加上后缀.WNCRTY的功能。这里文件还没有加密,只是文件名被添加了.WNCRTY。这里观察StartAddress,其中包含sub_10001830的核心函数sub_100029F0

我们进入核心函数sub_100029F0,可以看到该函数主要是获取C盘临时目录的路径长度并移动文件到临时目录下。并加上后缀.WNCRY

sub_10005190首先判断指定驱动器是否为固定驱动器((HGLOBAL)3),然后通过一个循环不断在磁盘检查空间并写入文件

其中sub_10005120用来在回收站中删除hibsys.WNCRYT文件

进入函数sub_10005540,上面是同类型操作:获取磁盘类型,判断是否是固定磁盘,获取临时文件的路径,找到关键函数sub_100027F0。进入之后找到sub_10002300,再次进入下一层


ok满屏幕的局部变量和指针

具体的文件加密格式通过sub_10002D60函数实现

进入下一层的加密函数sub_10002940,这里会根据返回值的不同,做出不同的响应。普通文件会被加密为.WNCRY,不加入链表(链表是一种数据结构,用来存储一系列的元素也成节点,节点包括数据和指向下一个节点的指针)。而大文件会被处理为.WNCYR。未处理文件则被加入链表进入等待状态。

继续进入下一层函数sub_10002200,这里主要做一些加密后缀与原后缀的拼接和校验

进入下一层sub_10001960,这是最底层的加密算法,首先读取一个文件的前8个字节内容去跟WANACRY!比较。然后在原文件名的后缀再加上.WNCRYT来创建一个新文件。然后将原文件里面的内容写入到这个新创建的文件中,从而实现对一个文件加密的过程。

到这里就完成了对Wannacry2.0勒索病毒的逆向分析。在逆向过程中也踩了很多的坑,

比如在虚拟机里放了一个HRSword,这直接让我的病毒程序图标也变成了火绒剑的标。然后从IDA到OD到ResourceHacker里所有解析出来的内容全部都变了。感觉是火绒剑做了一个处理

其实在IDA里面可以更多的通过字符串查找来找一下关键的函数,通过快捷键Shift+f12。比如像t.wnry、压缩包的密码WNcry@2ol7,通过字符串反过来跳转到函数会更快。

在od中就主要是一些主要的快捷键还有寄存器的知识。

文内我注释好的idb文件可以私信我领取

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值