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

转:http://www.4hou.com/technology/4832.html

2017年5月19日发布

导语:本文将具体介绍想哭“WanaCrypt0r”勒索软件的实际运行流程,讲述复现过程需要解决的各种问题。

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绘制

0x03 实际测试

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

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

2、启动调试器

选择Debugger(快捷键F9)

选择Local Win32 debugger,如下图

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

3、开始单步调试

单步步入快捷键F7

单步步过快捷键F8

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

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

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

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

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

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

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

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

以上操作过程如下图

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

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

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

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

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

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

继续调试,执行到call sub_401B5F

该函数的功能如下图

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

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

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

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

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

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

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

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

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

如下图

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

创建注册表项HKEY_LOCAL_MACHINESoftwareWanaCrypt0rwd

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

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

  • b.wnry

  • c.wnry

  • r.wnry

  • s.wnry

  • t.wnry

  • taskdl.exe

  • taskse.exe

  • u.wnry

  • msg(目录)

如下图

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

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

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

attrib.exe +h

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

接着执行cmd命令:

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

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

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

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

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

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

完整过程如下图

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

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

注:我已将解密的dll文件提取并上传至github,地址如下:

https://github.com/3gstudent/WanaCrypt0r-Reverse-Analysis/blob/master/crypt.dll1

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

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

0x04 小结

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

转:使用IDA动态调试WanaCrypt0r中的tasksche.exe的更多相关文章

  1. 逆向分析-IDA动态调试WanaCrypt0r的wcry.exe程序

    0x00 前言 2017年5月12日全球爆发大规模蠕虫勒索软件WanaCrypt0r感染事件,各大厂商对该软件做了深入分析,但针对初学者的分析教程还比较少,复现过程需要解决的问题有很多,而且没有文章具 ...

  2. IDA动态调试技术及Dump内存

    IDA动态调试技术及Dump内存 来源 https://blog.csdn.net/u010019468/article/details/78491815 最近研究SO文件调试和dump内存时,为了完 ...

  3. ida动态调试笔记

    ida动态调试笔记 目标文件:阿里安全挑战赛的第二题 点击打开链接 使用环境:ida6.8点击打开链接,adt bundle点击打开链接 首先打开avd安卓模拟器,界面如下: 在dos下运行adb命令 ...

  4. 【转】安卓逆向实践5——IDA动态调试so源码

    之前的安卓逆向都是在Java层上面的,但是当前大多数App,为了安全或者效率问题,会把一些重要功能放到native层,所以这里通过例子记录一下使用IDA对so文件进行调试的过程并对要点进行总结. 一. ...

  5. 学汇编的时候可以拿IDA之类的反汇编工具辅助学习,再用gdb或者IDA动态调试,跟踪每条指令的 执行结果。都不难

    作者:潘安仁链接:https://www.zhihu.com/question/40720890/answer/87926792来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  6. IDA动态调试Android的DEX文件

    Android程序的dex文件的动态调试确实是个大问题,网上也有一些教程但是不是特别的详细,今天用到了IDA动态调试Android的DEX文件,特此记录一下. IDA 6.6新添加了对dex文件的调试 ...

  7. IDA 动态调试

    感谢南邮,让我把ida动态调试,给搞定了,困扰了很久,之前下的ubuntu的源,好像有问题,ifconfig这个命令一直装不上,突然想起来了我的服务器很久没用了,重装了下系统,换成ubuntu,这里记 ...

  8. 【转】Android IDA 动态调试最完善攻略,跨过各种坑

    前提条件和运行环境一定要写清楚,不然会有很多坑,坑死人. (1)IDA 是最新的7.0版本  (2) JDB 使用Java安装目录下的 (3)系统是win10 使用命令窗口时有很大的差别 (4)手机是 ...

  9. IDA动态调试SO文件

    1. 所需工具 IDA Pro 6.6. 安卓SDK工具 2. 模拟器设置 将ida所在目录的dbgsrv文件夹内的android_server文件push到模拟器中. 设置777属性 启动调试服务器 ...

随机推荐

  1. [USACO09DEC] Cow Toll Paths

    https://www.luogu.org/problem/show?pid=2966 题目描述 Like everyone else, FJ is always thinking up ways t ...

  2. hdu4085 Peach Blossom Spring

    Peach Blossom Spring http://acm.hdu.edu.cn/showproblem.php?pid=4085 Time Limit: 10000/5000 MS (Java/ ...

  3. LightOJ 1151 - Snakes and Ladders 高斯消元+概率DP

    首先来个期望的论文,讲的非常好,里面也提到了使用线性方程组求解,尤其适用于有向图的期望问题. 算法合集之<浅析竞赛中一类数学期望问题的解决方法> http://www.lightoj.co ...

  4. PHP日期时间操作

    一.设置时区 date_default_timezone_set('PRC'); 二.获取当前时间的 Unix 时间戳(格林威治时间 1970 年 1 月 1 日 00:00:00到当前时间的秒数)和 ...

  5. 企业CEO最核心的应该是销售意识

    一个企业的本质是赚利润,利润怎么来?靠卖东西,所以企业里面最重要的应该是销售人员.在一些500强的外企里有一个规定,没有做过销售的人是很难升到总经理的,在以色列的军队中,没有当过班长,是不可以被提拔为 ...

  6. Android应用程序App应用上线流程

    对于很多初级开发者,可能对app应用上线不太了解,本文跟大家介绍一下怎么上线app应用.上线App并不是一件很困难的事情,App的应用功能也不需要很强大,甚至不用联网,只有简单的一两个页面的App应用 ...

  7. Linux进程调度与源码分析(一)——简介

    本系列文章主要是近期针对Linux进程调度源码进行阅读与分析后的经验总结,分析过程中可能结合部分Linux网络编程的相关知识以便于理解,加深对Linux进程调度的理解和知识分享. 本系列文章主要结合L ...

  8. mount/umount命令【转】

    转自:http://www.cnblogs.com/qq78292959/archive/2012/03/06/2382334.html 如果想在运行的Linux下访问其它文件系统中的资源的话,就要用 ...

  9. centos 安装flash

    linux系统中安装flash插件 linux中安装flashplayer插件的简单方法: 1.下载其中最新版本的播放器,下载地址: http://get.adobe.com/cn/flashplay ...

  10. Windows 10又现新Bug,24核心竟卡成蜗牛

    Windows 10又现新Bug,24核心竟卡成蜗牛 https://news.cnblogs.com/n/573996/