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

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


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

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

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

0x04 小结

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

原文发布时间为:2017年5月19日

本文作者:3gstudent 

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-12-22 09:25:44

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

安卓动态调试七种武器之孔雀翎 – Ida Pro

安卓动态调试七种武器之孔雀翎 – Ida Pro 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器.因此,笔者将会在这一系列文章中分享一些自己经常用或原创的调试工具以及手段,希望能对国内移动安全的研究起到一些催化剂的作用. 目录如下: 安卓动态调试七种武器之长生剑 - Smali Instrumentation 安卓动

Android 逆向apk的.so动态库

那么我们上篇文章中提及了安全性问题, Android apk如何加固防止被破解(防止逆向编译),那么本篇文章提及一点,so动态库的安全性与重要性. 首先我们要知道, .so动态库是做什么用的,它不像.smail文件可修改,它是属于汇编语言,如果直接去修改,文件会发生错乱.早上有人来问我,游戏打入渠道sdk之后发生错误,且只有armeabi里发生错误,这种情况可以断定.so动态库中有了兼容的冲突. 通常我们会看到libs下面有这么几个文件夹,mips.armeabi.armeabi-v7a和x86

app-使用ida逆向分析法分析APP中用户ID

问题描述 使用ida逆向分析法分析APP中用户ID 还有另外一个App:118eb1af8dd78f32.ipa,分析这个App中存在的一个重要信息--一个用户ID,要求使用ida逆向分析法 地址:http://range.jsxajs.cn:8080/mobileApp/2/118eb1af8dd78f32.ipa PS:下载地址绝对安全,不涉及安全问题,法律问题.

安卓动态调试七种武器之长生剑 - Smali Instrumentation

安卓动态调试七种武器之长生剑 - Smali Instrumentation 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器.因此,笔者将会在这一系列文章中(共7篇)分享一些自己经常用或原创的调试工具以及手段,希望能对国内移动安全的研究起到一些催化剂的作用. 目录如下: 安卓动态调试七种武器之长生剑 - Smali

安卓动态调试七种武器之离别钩 – Hooking(下)

安卓动态调试七种武器之离别钩 – Hooking(下) 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器.因此,笔者将会在这一系列文章中分享一些自己经常用或原创的调试工具以及手段,希望能对国内移动安全的研究起到一些催化剂的作用. 目录如下: 安卓动态调试七种武器之长生剑 - Smali Instrumentation

root技术背后android手机内核提取及逆向分析

root技术背后android手机内核提取及逆向分析       安卓ROOT技术背景:      Android手机获得Root权限,可以让/system和/data分区获得读写的权限.这两个分区的权限配置,一般在根分区的init.rc文件中,修改这个文件可永久获得root权限.众所周知,市面上绝大部分的Android手机文件系统有三个分区,分别是/,/system,/data.根分区(/)是打包为ramdisk.img后,再与kernel的zImage打包为boot.img. boot.im

编程实现小型虚拟机保护并逆向分析及其保护

本文讲的是编程实现小型虚拟机保护并逆向分析及其保护, 1.引言 虚拟机保护技术已经出现了10多年,目前已有较多.较为成熟的商业化虚拟机保护产品,如VMProtect.Themida等.这些产品实现的虚拟机过于复杂,而本文仅仅是逆向分析和编程实现小型虚拟机保护,这种小型虚拟机仅用于说明虚拟机保护这种技术,可以用于开发CrackMe,但与真正的虚拟机保护还有非常远的路要走. 2017年看雪CTF大赛正在火热征题中,防守组的各位参赛者随手写一个适用于自己CrackMe的虚拟机,相信可以如虎添翼. Gi

如何对西数硬盘固件进行逆向分析

几年前我就开始做BIOS rootkits方面的东西(在UEFI成为主流之前).我知道在初始化启动过程的后期阶段,大多数硬件都有一个BIOS类型设置 ,我的主要关注GPU和硬盘.本文我所做的是我曾经 在 spritesmods 上看到的一些东西. 硬盘破解 我发现一个老版本的西部数码硬盘驱动器很适合现在的研究,所以我把控制器卸下来. Spritesmods上的那个家伙把固件的闪存芯片弄下来然后把里面的内容全部拷贝出来了,这里唯一的问题是红圈中闪存芯片这个地方. 红圈中是Marvell 88i88

安卓动态调试七种武器之离别钩 – Hooking(上)

安卓动态调试七种武器之离别钩 – Hooking(上) 作者:蒸米@阿里聚安全 0x00 序 随着移动安全越来越火,各种调试工具也都层出不穷,但因为环境和需求的不同,并没有工具是万能的.另外工具是死的,人是活的,如果能搞懂工具的原理再结合上自身的经验,你也可以创造出属于自己的调试武器.因此,笔者将会在这一系列文章中分享一些自己经常用或原创的调试工具以及手段,希望能对国内移动安全的研究起到一些催化剂的作用. 目录如下: 安卓动态调试七种武器之长生剑 - Smali Instrumentation