转:使用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属性 启动调试服务器 ...
随机推荐
- scrapy架构设计分析
scrapy是一个Python爬虫框架.我们自己用requests也能写爬虫(GET某个URL,然后Parse网页的内容),那么,问题来了,scrapy高明在哪些地方呢?下面就来讨论下这个话题,看看业 ...
- C++指针与数组
对数组地址的理解,如 int c[2] = {2,3}; int(*cp)[2] = &c; cout << &c[0] << c << cp &l ...
- cookie与session的区别与应用
通常我们所说的浏览器自动保存密码,下次不用登陆,提示一次就不再出现的内容,大部分通过cookie或者session来实现的. cookie的概念 cookie是浏览器(User Agent)访问一些网 ...
- jQuery简单日历插件版
先来看demo:http://codepen.io/jonechen/pen/xOgZMz 插件代码: ; (function($) { var Calendar = function(ele, op ...
- gdoi2017
今年的gdoi第一天t1大水题一道 裸的kmp 但是 我把记录长度的int数组开成了char类型 正解变爆零 心态爆炸......... 后面的第二题两千字题目以及五千字附加故事(我是没有去看,据说全 ...
- 基于 Docker 的 Zabbix 微服务系统
zabbix 官网提供一个镜像 [ zabbix-appliance ], 可以直接拉起一个 zabbix-server. 但是数据库无法分离出来. 本实践使用 zabbix 官方提供的 Docker ...
- 正则表达式实现将html文本转换为纯文本格式(将html字符串转换为纯文本方法)
Regex regex = new Regex("<.+?>", RegexOptions.IgnoreCase); string strOutput = regex. ...
- poj 1298 The Hardest Problem Ever
题目链接:http://poj.org/problem?id=1298 题目大意:按照所给的顺序要求将输入的字符串进行排列. #include <iostream> #include &l ...
- Django rest framework 版本控制(源码分析)
基于上述分析 #2.处理版本信息 处理认证信息 处理权限信息 对用户的访问频率进行限制 self.initial(request, *args, **kwargs) #2.1处理版本信息 #versi ...
- Exploring Qualcomm's TrustZone Implementation
转自 http://bits-please.blogspot.com/2015/08 (需要FQ, 狗日的墙) In this blog post, we'll be exploring Qua ...