转:使用IDA动态调试WanaCrypt0r中的tasksche.exe
逆向分析——使用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的更多相关文章
- 逆向分析-IDA动态调试WanaCrypt0r的wcry.exe程序
0x00 前言 2017年5月12日全球爆发大规模蠕虫勒索软件WanaCrypt0r感染事件,各大厂商对该软件做了深入分析,但针对初学者的分析教程还比较少,复现过程需要解决的问题有很多,而且没有文章具 ...
- IDA动态调试技术及Dump内存
IDA动态调试技术及Dump内存 来源 https://blog.csdn.net/u010019468/article/details/78491815 最近研究SO文件调试和dump内存时,为了完 ...
- ida动态调试笔记
ida动态调试笔记 目标文件:阿里安全挑战赛的第二题 点击打开链接 使用环境:ida6.8点击打开链接,adt bundle点击打开链接 首先打开avd安卓模拟器,界面如下: 在dos下运行adb命令 ...
- 【转】安卓逆向实践5——IDA动态调试so源码
之前的安卓逆向都是在Java层上面的,但是当前大多数App,为了安全或者效率问题,会把一些重要功能放到native层,所以这里通过例子记录一下使用IDA对so文件进行调试的过程并对要点进行总结. 一. ...
- 学汇编的时候可以拿IDA之类的反汇编工具辅助学习,再用gdb或者IDA动态调试,跟踪每条指令的 执行结果。都不难
作者:潘安仁链接:https://www.zhihu.com/question/40720890/answer/87926792来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...
- IDA动态调试Android的DEX文件
Android程序的dex文件的动态调试确实是个大问题,网上也有一些教程但是不是特别的详细,今天用到了IDA动态调试Android的DEX文件,特此记录一下. IDA 6.6新添加了对dex文件的调试 ...
- IDA 动态调试
感谢南邮,让我把ida动态调试,给搞定了,困扰了很久,之前下的ubuntu的源,好像有问题,ifconfig这个命令一直装不上,突然想起来了我的服务器很久没用了,重装了下系统,换成ubuntu,这里记 ...
- 【转】Android IDA 动态调试最完善攻略,跨过各种坑
前提条件和运行环境一定要写清楚,不然会有很多坑,坑死人. (1)IDA 是最新的7.0版本 (2) JDB 使用Java安装目录下的 (3)系统是win10 使用命令窗口时有很大的差别 (4)手机是 ...
- IDA动态调试SO文件
1. 所需工具 IDA Pro 6.6. 安卓SDK工具 2. 模拟器设置 将ida所在目录的dbgsrv文件夹内的android_server文件push到模拟器中. 设置777属性 启动调试服务器 ...
随机推荐
- MongoDB入门(4)- MongoDB日常操作
MongoDB客户端 MongoDB有很多客户端 MongoVue Robomongo MongoDB命令行 启动mongo shell 在windows下,双击mongo.exe可以启动mongo ...
- $.ajax() 方法的理解
jquery中的ajax方法理解,AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术.AJAX ...
- Linux 文件编码问题及iconv命令
iconv命令是运行于linux/unix平台的文件编码装换工具.当我们在linux/unix系统shell查看文本文件时,常常会发现文件的中文是乱码的,这是由于文本文件的编码与当前操作系统设置的编码 ...
- 【BZOJ】1984 月下“毛景树”
[算法]树链剖分+线段树 [题解]线段树的区间加值和区间覆盖操作不能同时存在,只能存在一个. 修改:从根节点跑到目标区域路上的标记全部下传,打完标记再上传回根节点(有变动才需要上传). 询问:访问到目 ...
- Java线程总结(一)
首先,先贴上一个简单的线程实例: public class MyThread extends Thread{ @Override public void run(){ try { for (int i ...
- html中的meta标签
1.定义 meta元素提供页面的原信息,位于文档头部 2.必须的属性 content属性 该属性提供名称/值对中的值,使用要与http-equiv或name属性一起使用 3.可选的属性 3.1.htt ...
- Python代码这样写更优雅(转)
1.变量交换 大部分编程语言中交换两个变量的值时,不得不引入一个临时变量: >>> a = 1>>> b = 2>>> tmp = a>&g ...
- Spring Boot中配置文件application.properties使用
一.配置文档配置项的调用 启动后在浏览器直接输入http://localhost:18080/user/test,就直接打印出配置文件中的配置内容. 二.绑定对象bean调用 有时候属性太多了,一个个 ...
- mysql in/no in/like
% 任意字符 _ 任意一个字符 in (value,......) 在这里 not in (value,......) 不在这里 mysql> select 'a' not in (1,2,3, ...
- perl 在win下输出中文乱码问题
use utf8; my $name = '你好'; binmode(STDOUT, ":encoding(gbk)"); print $name,"\n"; ...