尖REN 发布于2022年11月8日 分享 发布于2022年11月8日 0x00 前言 2017年5月12日,全球爆发大规模蠕虫勒索病毒WanaCrypt0r感染。各大厂商对软件进行了深入的分析,但是针对初学者的分析教程还是比较少,在反复的过程中有很多问题需要解决。而且也没有专门介绍勒索软件实际操作流程的文章,所以写了这篇新手教程,希望对大家有所帮助。 0x01 简介 本文将介绍以下内容: 实际操作过程示例 IDA动态调试方法 调试tasksche.exe的具体过程 0x02 样本分析 测试环境:Win 7 x86 测试工具:IDA 6.8 样本下载地址: http://bbs.pediy.com/thread-217586-1.htm 经测试,样本是WanaCrypt0r的母亲mssecsvc.exe发布的勒索程序tasksche.exe。 因此,不包括“Kill Switch”开关和MS17-010漏洞代码。 样本流程分析: 通过逆向分析,样本流程如下 注: 示例流程图由processon绘制,在线URL如下: https://www.processon.com/ 0x03 实际测试 1、启动IDA,加载样本文件wcry.exe 找到WinMain(x,x,x,x)函数,在初始位置断开断点(快捷键F2),如下图所示 2、启动调试器 选择调试器(F9) 选择本地Win32调试器,如下图所示 选择调试器-继续进程(F9)进入调试界面,如下图所示 3、开始单步调试 步骤快捷方式F7 一步一步走捷径F8 执行call sub_401225,按F7进入并查看该函数的反汇编代码,如下图所示 为了便于分析,可以输入快捷键F5查看伪代码,如下图所示 通过代码猜测这个函数的作用如下: 调用GetComputerNameW函数获取计算机名。 使用rand函数生成一个随机数。 将它们组合起来生成一个唯一的ID。 动态执行直到这个函数结束,寄存器EAX的值存储函数返回的结果,对应上面的函数,EAX寄存器存储生成的ID值。 EAX的地址是0040F8AC,这个内存地址的内容是vxdxwoohxv 276,也就是生成的ID值是vxdxwoohxv 276。 以上操作过程如下 继续调试并执行到jnz short loc_40208E。可以看到程序分支,IDA会自动提示下一个分支向左执行(分支会闪烁),如下图所示。 对比上面的示例流程图,可以看出此时没有进入安装模式。 4、修改启动参数,进入安装模式 为了进入安装模式,您需要在程序启动时添加参数/i。 现在退出调试模式,选择调试器进程选项,填写参数/i,如下图所示。 再次启动调试,执行到jnz short loc_40208E,程序跳转到右分支,进入安装模式,如下图所示 继续调试,去调用sub_401B5F。 该功能的作用如下 尝试在文件夹c:\ProgramData,c:\Intel,%Temp%下依次创建一个名为ID的文件夹,直到成功。 执行此语句后,检查路径c:\ProgramData,找到新生成的文件夹vxdxwoohuuxv276,如下图所示 继续调试,下一个功能就是把程序本身复制到上面的目录,如下图所示 执行调用sub_401F5D,函数如下: 创建一个服务,服务名和显示名都用ID命名,启动参数是cmd.exe/C“C:\ Program Data \ vxxxxwoohux v276 \ taskche . exe”,对应的是子函数sub_401CE8,如下图所示。 创建互斥体global \ mswinzonecachecounter互斥体,用于避免程序重复启动,对应子函数sub_401EFF,如下图所示。 注: 由于该服务被设置为自动执行,C:\ program data \ vxdxwoohuxv 276 \ taskche.exe将在安装该服务后自动执行。不出意外的话,你的测试系统已经弹出了勒索软件的主界面,如下图所示。 至此,安装模式结束,如下图所示。接下来,左支路调试完成。 5、将启动参数取消,重新进入调试模式,进入左侧分支 如下图 执行call sub_4010FD,函数如下: 创建注册表项HKEY本地机器 执行call sub_401DAB,释放资源中的PE文件。该文件包含: 伯恩利 c.wnry 朗尼 悉尼 唐利 taskdl.exe taskse.exe 纽约大学 目录 如下图 执行call sub_401E9E,函数如下: 加密的c.wnry文件第一行是13am 4 VW 2 dhxygxeqepohkhsquy 6 nga eB94(软件作者的比特币地址) 继续调试,然后执行cmd命令: attrib.exeh 用于将当前文件夹设置为隐藏属性,如下图所示 然后执行cmd命令: icacls.exe。/授予每个人:F /T /C /Q 每个人都用来给当前文件夹添加权限,主要用来打开访问权限,如下图。 执行call sub_40170A,用于动态获取API地址,主要用于下面的内存加载dll。 执行用于解密dll的调用sub_4014A6。您可以通过在一个特殊的位置中断该点来从内存中转储dll文件。 通过分析代码,发现解密函数位于sub_403A77中,如下图所示 对于这个函数,EAX在函数执行前保存解密数据的长度,EBX在函数执行后保存解密dll文件的起始地址。 完整的过程如下 在函数执行前检查寄存器EAX的值,解密长度为0x10000(截图中未显示) 001790C8存储解密后的dll文件的起始地址。 转储以上解密数据(数据范围001790c8-001890c8)并保存为dll文件。用ida打开,识别为dll文件。导出函数是TaskStart。 注: 我已经将解密的dll文件解压并上传到github,地址如下: https://github . com/3g student/wanacrypt 0r-Reverse-Analysis/blob/master/crypt . dll 1 继续调试,执行调用sub_402924,用来加载内存中的dll,导出函数TaskStart传入。 至此,tasksche.exe的任务已经完成,接下来的工作就由dll实现了。 0x04 小结 介绍了如何使用IDA动态调试WanaCrypt0r中的tasksche.exe,会导致对WanaCrypt0r的解密dll和加密过程的逆向分析。 留下回复 链接帖子 意见的链接 分享到其他网站 更多分享选项…
推荐的帖子