转:使用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属性 启动调试服务器 ...
随机推荐
- 游戏编程入门之Bomb Catcher游戏
首先是代码: MyDirectX.h: #pragma once //header file #define WIN32_EXTRA_LEAN #define DIRECTINPUT_VERSION ...
- 梳排序Comb sort
梳排序还是基于冒泡排序,与冒泡不同的是,梳排序比较的是固定距离处的数的比较和交换,类似希尔那样 这个固定距离是待排数组长度除以1.3得到近似值,下次则以上次得到的近似值再除以1.3,直到距离小至3时, ...
- 选择排序Selection sort
顾名思意,就是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来, 顺序放入新数组,直到全部拿完 再简单点,对着一群数组说,你们谁最小出列,站到最后边 然后继续对剩余的无序数组说 ...
- .net core 安装Swagger
Install-Package Swashbuckle -Pre 1.Startup // This method gets called by the runtime. Use this metho ...
- Python随机选择Maya场景元素
之前在公司参与的一个与国外合作的项目中,有一景需要动态.随机地选取场景中的一些物体,同时显示指定材质,当时是用Houdini的节点+Hscript 解决的: 今天用简洁优雅的Python在Maya中写 ...
- IIS7绑定多个HTTPS网站并应用自签名证书
本文主要介绍如何在IIS中添加多个网站并使用同一个数字签名证书(win7+IIS7.5) IIS中添加站点site1,端口号为80,主机名为空.如下图: 创建证书 IIS->Server Cer ...
- [LA3523/uva10195]圆桌骑士 tarjan点双连通分量+奇环定理+二分图判定
1.一个环上的各点必定在同一个点双连通分量内: 2.如果一个点双连通分量是二分图,就不可能有奇环: 最基本的二分图中的一个环: #include<cstdio> #include<c ...
- 【点分治练习题·不虚就是要AK】点分治
不虚就是要AK(czyak.c/.cpp/.pas) 2s 128M by zhb czy很火.因为又有人说他虚了.为了证明他不虚,他决定要在这次比赛AK. 现在他正在和别人玩一个游戏:在一棵树上 ...
- Tensorflow 2.0.0-alpha 安装 Linux系统
1.TensorFlow2.0的安装测试 Linux Tensorflow Dev Summit 正式宣布 Tensorflow 2.0 进入 Alpha 阶段. 基于 Anaconda 创建环境一个 ...
- Spark-2.3.2【SparkStreaming+SparkSQL-实时仪表盘应用】
应用场景:实时仪表盘(即大屏),每个集团下有多个mall,每个mall下包含多家shop,需实时计算集团下各mall及其shop的实时销售分析(区域.业态.店铺TOP.总销售额等指标)并提供可视化展现 ...