逆向分析——使用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. html 5 新特性

    现在html 5技术是最新的html标准,掌握html 5已经变得非常重要,以下是我查看相关资料后对html 5 的新特性的总结,方便大家对比学习.html 5的新特性1.取消了一些过时的html 4 ...

  2. mysql varchar到底能存多少字符。

    utf8编码的varchar Mysql记录行数据是有限的.大小为64k,即65535个字节,而varchar要用1-2字节来存储字段长度,小于255的1字节,大于255的2字节. Mysql 5.0 ...

  3. vijos 1057 盖房子 简单DP

    描述 永恒の灵魂最近得到了面积为n*m的一大块土地(高兴ING^_^),他想在这块土地上建造一所房子,这个房子必须是正方形的. 但是,这块土地并非十全十美,上面有很多不平坦的地方(也可以叫瑕疵).这些 ...

  4. HDU 5901 Count primes 大素数计数

    题意:计算1~N间素数的个数(N<=1e11) 题解:题目要求很简单,作为论文题,模板有两种 \(O(n^\frac{3}{4} )\),另一种lehmer\(O(n^\frac{2}{3})\ ...

  5. leaflet一个前端gis框架,比openlayer更简单

    leaflet一个前端gis框架,比openlayer更简单 作者github:https://github.com/mourner?tab=overview&from=2009-12-01& ...

  6. bzoj 1004 burnside 引理+DP

    对于burnside引理需要枚举染色,这道题属于burnside的一种简单求解的方法,就是polya,我们可以使每一种置换中的循环节中的元素的颜色都相同,那么这样的话就可以直接DP了,我们可以将m个置 ...

  7. 如何入门 Python 爬虫?

    作者:谢科   来源:知乎链接:https://www.zhihu.com/question/20899988/answer/24923424 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  8. F题 hdu 1431 素数回文

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1431 素数回文 Time Limit: 2000/1000 MS (Java/Others)    M ...

  9. 【1】记一次破解wifi

    当然,使用的依旧是aircrack套件,这次依旧是跑字典,今天,捉到了另一个实验室icephone的wpa握手包,我猜测实验室的wifi一般都跟自己的名字有关,icephone刚好是8位字母,于是我就 ...

  10. Laravel 项目登录报错:The MAC is invalid.

    在 Laravel 项目完成部署到服务器.数据库导入成功后 后台登录报错: 原因是 Laravel 的 APP_KEY 和 encrypt() 函数加密的问题.(encrypt() 是 Laravel ...