逆向分析——使用IDA动态调试WanaCrypt0r中的tasksche.exe-阿里云开发者社区

开发者社区> 玄学酱> 正文

逆向分析——使用IDA动态调试WanaCrypt0r中的tasksche.exe

简介: 本文讲的是逆向分析——使用IDA动态调试WanaCrypt0r中的tasksche.exe,2017年5月12日全球爆发大规模蠕虫勒索软件WanaCrypt0r感染事件,各大厂商对该软件做了深入分析,但针对初学者的分析教程还比较少,复现过程需要解决的问题有很多,而且没有文章具体介绍勒索软件的实际运行流程,所以我写了这篇面向初学者的教程,希望帮助大家。
+关注继续查看
本文讲的是逆向分析——使用IDA动态调试WanaCrypt0r中的tasksche.exe

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漏洞利用代码

样本流程分析:

通过逆向分析,样本流程如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

注:样本流程图使用processon绘制

0x03 实际测试

1、启动IDA,加载样本文件wcry.exe

找到WinMain(x,x,x,x)函数,在初始位置下断点(快捷键F2),如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

2、启动调试器

选择Debugger(快捷键F9)

选择Local Win32 debugger,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

选择Debugger-Continue process(快捷键F9),进入调试界面,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

3、开始单步调试

单步步入快捷键F7

单步步过快捷键F8

执行到 call sub_401225,按F7单步步入,查看该函数的反汇编代码,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

为了便于分析,可以输入快捷键F5查看伪代码,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

通过代码猜测该函数的功能如下:

  • 调用GetComputerNameW函数获得计算机名

  • 使用rand函数生成一个随机数

  • 二者结合生成一个唯一的ID

动态执行至该函数结束,寄存器EAX的值保存函数返回结果,对应到上述函数,EAX寄存器保存的是生成的ID值

EAX的地址为0040F8AC,查看该内存地址的内容为vxdxwoohuuxv276,即生成的ID值为vxdxwoohuuxv276

以上操作过程如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

继续调试,执行到jnz short loc_40208E,可看到程序出现分支,IDA会自动提示接下来要执行的分支为左侧(该分支会闪烁),如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

对照前文的样本流程图,可知此时并未进入安装模式

4、修改启动参数,进入安装模式

为了进入安装模式,需要在程序启动时加入参数/i

现在退出调试模式,选择Debugger-Process options,填入参数/i,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

再次启动调试,执行到jnz short loc_40208E,程序跳入右侧分支,进入安装模式,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

继续调试,执行到call sub_401B5F

该函数的功能如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

依次尝试在c:ProgramData、c:Intel、%Temp%文件夹下创建以ID为名称的文件夹,直到成功为止

执行完该语句,查看路径c:ProgramData,发现新生成的文件夹vxdxwoohuuxv276,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

继续调试,接下来的功能为将程序自身复制到上述目录,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

执行到call sub_401F5D,该函数的功能如下:

创建服务,服务名称和显示名称均以ID命名,启动参数为cmd.exe /c “C:ProgramDatavxdxwoohuuxv276tasksche.exe”,对应子函数sub_401CE8,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

创建互斥量GlobalMsWinZonesCacheCounterMutexA,用来避免程序重复启动,对应子函数sub_401EFF,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

注:由于服务设置成自动执行,所以安装服务后会自动执行C:ProgramDatavxdxwoohuuxv276tasksche.exe,不出意外,你的测试系统此时已经弹出勒索软件的主界面,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

至此,安装模式结束,如下图,接下来完成对左侧分支的调试

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

5、将启动参数取消,重新进入调试模式,进入左侧分支

如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

执行到call sub_4010FD,该函数的功能如下:

创建注册表项HKEY_LOCAL_MACHINESoftwareWanaCrypt0rwd

键值为程序绝对路径,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

执行到call sub_401DAB,该函数释放资源中的PE文件,文件包含:

  • b.wnry

  • c.wnry

  • r.wnry

  • s.wnry

  • t.wnry

  • taskdl.exe

  • taskse.exe

  • u.wnry

  • msg(目录)

如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

执行到call sub_401E9E,该函数功能如下:

加密c.wnry文件的第一行内容13AM4VW2dhxYgXeQepoHkHSQuy6NgaEb94(软件作者的比特币地址)

继续调试,接下来执行cmd命令:

attrib.exe +h

用于将当前文件夹设置为隐藏属性,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

接着执行cmd命令:

icacls.exe . /grant Everyone:F /T /C /Q

用于为当前文件夹添加权限用户组Everyone,主要用来开放访问权限,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

执行到call sub_40170A,该函数用来动态获取API地址,主要为了实现接下来的内存加载dll

执行到call sub_4014A6,该函数用来解密dll,可以在特殊位置下断点,从内存dump出该dll文件

通过分析代码,发现解密函数位于sub_403A77,如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

对应该函数,函数执行前,EAX保存解密数据长度,函数执行后,EBX保存解密dll文件的起始地址

完整过程如下图

逆向分析使用IDA动态调试WanaCrypt0r中的tasksche.exe

函数执行前查看寄存器EAX的值,解密长度为0x10000(截图未体现)

保存解密dll文件的起始地址001790C8,将以上解密数据(数据范围001790C8-001890C8)dump并保存成dll文件,使用ida打开,识别为dll文件,导出函数为TaskStart


继续调试,执行到call sub_402924,该函数用来内存加载dll,传入导出函数TaskStart

至此,tasksche.exe任务完成,接下来的工作交由dll实现

0x04 小结

本文介绍了如何使用IDA对WanaCrypt0r中tasksche.exe进行动态调试,接下来会带来对解密dll的逆向分析过程,介绍WanaCrypt0r的加密流程。




原文发布时间为:2017年5月19日
本文作者:3gstudent 
本文来自云栖社区合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
C#.NET使用Task,await,async,异步执行控件耗时事件(event),不阻塞UI线程和不跨线程执行UI更新,以及其他方式比较
原文:C#.NET使用Task,await,async,异步执行控件耗时事件(event),不阻塞UI线程和不跨线程执行UI更新,以及其他方式比较 使用Task,await,async,异步执行事件(event),不阻塞UI线程和不跨线程执行UI更新   使用Task,await,async 的异步模式 去执行事件(event) 解决不阻塞UI线程和不夸跨线程执行UI更新报错的最佳实践,附加几种其他方式比较 由于是Winform代码和其他原因,本文章只做代码截图演示,不做界面UI展示,当然所有代码都会在截图展示。
3334 0
javascript:使用document.getElementById读取数据为空分析
  今天写个网页,想在页面加载onLoad时,动态显示由后台其他程序传来的数据时,用document.getElementById获取控件对象总是为空。但是检查了这个id确实是存在的。在网上查阅一番后才知道了其中的原因。
892 0
php中使用exec,system等函数调用系统命令
php的内置函数exec,system都可以调用系统命令(shell命令),当然还有passthru,escapeshellcmd等函数。   在很多时候利用php的exec,system等函数调用系统命令可以帮助我们更好更快的完成工作。
683 0
Java对文件的读、写随机访问,RandomAccessFile类的使用分析
  在网上看了一些关于java中的RandomAccessFile类的介绍,又经过查看Java API和自己编的测试程序,总算是对RandomAccessFile的使用有了一定的了解。自己做了以下比较详细的总结吧。
1034 0
使用分析函数进行行列转换
其实使用分析函数进行处理是很好的方式,翻一下Tom的书,将其中的一个例子收录在这里. 比如查询scott.emp表的用户SAL排序信息,可以使用如下查询: SQL> SELECT deptno, ename, 2 ROW_NUMBER () OVER (PARTITION BY ...
628 0
[Chromium]如何安全的使用PostTask
PostTask参数决策树 如何传递绑定的对象 官方的解释总是最权威,有疑问看这里或者直接看代码中的说明: bind_helpers.h.  传值方式 描述 this 或 对象指针 如果对象本身是一个RefCountedThread...
1217 0
IDA反汇编/反编译静态分析iOS模拟器程序(二)加载文件与保存数据库
启动windows版的IDA,在Quickstart界面点击New,弹出一个对话框选择文件。也可以按取消后再把文件拖进IDA。由于Mac版的IDA没注册,没有save功能,所以只好先把Mac上的东西拷贝到windows再打开了。
1059 0
IDA反汇编/反编译静态分析iOS模拟器程序(五)F5反编译
反编译是IDA最让人振奋的功能,它的本质是IDA的一个插件,不过会被当做hex-rays的另一个产品。既然是产品,那当然就另外收费,demo版是没有的。
1068 0
爬虫分析之数据存储——基于MySQL,Scrapy
上一篇->爬虫练习之数据整理——基于Pandas 上上篇->爬虫练习之数据清洗——基于Pandas 配置MySql 关于MySQL在Ubuntu的Pycharm上的配置,可以参考这篇文章中的第三部分 Mac安装mysql及终端操作mysql与pych...
1224 0
[Android]Android焦点流程代码分析
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/7286503.html 通过View的View::focusSearch进行焦点搜索对应方向上的下一个可以获取焦点的View: public View focus...
1042 0
+关注
玄学酱
这个时候,玄酱是不是应该说点什么...
20710
文章
438
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载