恶意软件逆向工程:Ghidra 入门 -第三部分-分析 WannaCry 勒索软件

news2024/11/17 3:46:11

逆向工程是最受欢迎和最有价值的网络安全/信息安全技能之一。但很少有人能将自己的技能水平发展到精通这一备受追捧的技能。Ghidra 是美国间谍机构 NSA 提供的一种相对较新且免费的逆向工程工具。

在本教程中,我们将研究历史上最臭名昭著的一个恶意勒索病毒:WannaCry。它感染了全球30多万台电脑,如果不是马库斯-赫钦斯(Marcus Hutchens,又名MalwareTech)的工作和技能,可能会造成巨大的破坏。Marcus Hutchens 获得了该恶意软件的样本,并立即开始检查其代码。在其中,他发现了通常被称为killswitch的东西。实际上,他发现的是将用于该勒索软件的命令和控制(C&C)的URL。当他意识到这个URL还没有被注册时,他就注册了。通过这样做,他拒绝了勒索软件作者对其恶意软件的控制权,从而拯救了互联网。

在这里,我们将查看恶意软件寻找URL的初始感染载体,并试图了解它如何启动其恶意活动。

# 1、准备好你的环境并安装Ghidra

对于本教程,我建议你使用Kali或其他操作系统的虚拟机。这是为了确保你不会意外地将WannaCcy释放到你的其他系统或网络中(这通常是处理恶意软件时的良好做法)。接下来,下载WannaCry。你可以从许多地方获得它,如VirusTotal

然后启动Ghidra

image-20220726124931570

然后导入样本文件。

image-20220726125123471

然后开始分析:

image-20220726125228551

接下来,会有详细介绍分析的选项。保留所有的默认值,并添加(Decompiler Parameter ID)反编译器参数ID(这将为一个函数创建参数和局部变量。对于大文件来说,这可能会增加大量的分析时间,但对于WannaCry来说,这应该不会有什么问题)。

image-20220726125421696

在 Ghidra 分析 WannaCry 时,可能会收到以下错误消息。不用管它,只需单击"OK"。

image-20220726125649068

分析完成后如下所示:

image-20220726130157490

# 2、查找Main()函数

下一步是寻找启动 WannaCry 这个恶意软件的函数。正如我们在将恶意软件加载到 Ghidra 时所指出的,WannaCry 是一个便携式可执行文件 (PE)。每个 Windows 程序都有一个入口点,通常命名为 WinMain 或 wWinMain。请参阅下面的 Microsoft 文档。

image-20220726130355778

当我们转到符号树并展开函数文件夹时,没有找到 WinMain 或 wWinMain 函数,但我们看到了entry函数。这可能与 WinMain() 具有相同的目的。让我们检查一下。

image-20220726130630967

双击它,它将出现在列表窗口和反编译窗口。

image-20220726130731223

# 3、查找"killswitch"

通过扫描反编译窗口的代码,我们可以看到这个函数调用了另一个函数 FUN_00408140()。双击它来分析它。

image-20220726134222607

然后你会在列表窗口和反编译窗口中看到一个URL

image-20220726134241374

image-20220726134405297

它似乎将 URL 放入名为 puVar3 的变量中。

继续往下,我们可以看到对InternetOpenUrlA函数的引用。

image-20220726134553894

我们可以通过 Microsoft Technet 搜索,看到 InternetOpenUrlA 函数正如你所预想的那样,它调用并打开指定的 URL

image-20220726134758964

在 InternetOpenUrlA 下方,我们看到几行使用 InternetCloseHandle。这些指定如果 iVar2 为 0 ,则关闭句柄并运行 FUN_00408090(),否则关闭句柄并终止程序。

image-20220726134936325

这是 Marcus Hutchins 在第一次检查和分析 WannaCry 时注意到的。这是命令和控制 (C&C) 的 URL。如果程序尝试访问 URL 并返回 0,则程序自动终止。如果它没有终止,则执行 FUN_00408140()。让我们关注 FUN_00408140()

# 4、程序流程

在下一步中,让我们按照 FUN_00408140() 的流程进行操作。找到 Ghidra 顶部的 Window 选项卡,然后单击 Function Call Graph

image-20220726140248038

Ghidra 为我们生成了一个易于阅读的来自该函数的调用流程图,包括上游和下游。可以看到entry函数是FUN 00408140的上游,下游是InternetOpenAInternetOpenUrlAInternetCloseHandleFUN_00408090

image-20220726140322296

回到反编译窗口,让我们双击 FUN_00408090() 进入来分析它。

image-20220726140503837

image-20220726140616921

请注意,反编译器显示恶意软件会尝试调用 OpenServiceA函数。这包括打开 mssecv2.0_004312fc 的参数。这似乎打开了 Microsoft 安全服务。这很有趣...

image-20220726140924904

当我们搜索微软的 Technet 时,我们发现没有这样的服务存在。该恶意软件正在启动一项伪装成合法的 Microsoft 安全服务的新服务,以掩盖其真实性质。

# 本节概括

Wannacry 勒索软件有可能在 2017 年对互联网造成毁灭性打击。它利用当时最新发布的 EternalBlue 漏洞进入计算机系统,然后加密所有数据,直到他们支付赎金。Wannacry由朝鲜APT开发,他们未能掩盖或混淆恶意软件,最重要的是,没有注册C&C域。感谢 Marcus Hutchins,他检测到killswitch并解除了这个勒索软件继续感染,从而减轻了它的影响。

# 说明

本文由合天网安实验室编译,如需转载,请注明来源 原文地址:Reverse Engineering Malware, Ghidra Part 3: Analyzing the WannaCry Ransomware (hackers-arise.com)

关于合天网安实验室

合天网安实验室(www.hetianlab.com)-国内领先的实操型网络安全在线教育平台

真实环境,在线实操学网络安全 ; 实验内容涵盖:系统安全,软件安全,网络安全,Web安全,移动安全,CTF,取证分析,渗透测试,网安意识教育等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1615272.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用docker部署数据可视化平台Metabase

目前公司没有人力开发数据可视化看板,因此考虑自己搭建开源可视化平台MetaBase。在此记录下部署过程~ 一、镜像下载 docker pull metabase/metabase:latest 运行结果如下: 二、创建容器 docker run -dit --name matebase -p 3000:3000\ -v /home/loc…

vulfocus靶场名称: apache-cve_2021_41773/apache-cve_2021_42013

Apache HTTP Server 2.4.49、2.4.50版本对路径规范化所做的更改中存在一个路径穿越漏洞,攻击者可利用该漏洞读取到Web目录外的其他文件,如系统配置文件、网站源码等,甚至在特定情况下,攻击者可构造恶意请求执行命令,控…

程序员缓解工作压力的小窍门

目录 1.概述 2.工作与休息的平衡 3.心理健康与自我关怀 4.社交与网络建设 1.概述 作为程序员,缓解工作压力是非常重要的。压力太大有可能会写很多bug。我们可以采取以下方法来保持高效和创新,同时维护个人健康和工作热情。 定时休息:保持…

手写Promise实现

手写Promise实现 一、前言二、代码三、测试四、测试结果 一、前言 阅读参考资料,本文整理出使用 构造函数 手撕出 Promise 的方法,在整理过程中不断添加注解以示思路。有错请指出哟,一起进步!!!class 实现 …

【做一名健康的CSDNer】程序员哪几种行为最伤肾(程序员必看)

虽然没有专门针对程序员这一职业群体特有的伤肾行为的研究报道,但根据一般人群的健康风险和生活习惯,程序员由于其特殊的工作模式和环境,可能更容易出现如下伤肾的行为: 熬夜加班: 程序员由于项目进度、bug修复等原因&…

1、opencv介绍与开发环境搭建

1、opencv介绍 OpenCV 是 Intel 开源计算机视觉库,是一个跨平台的开源计算机视觉和机器学习软件库。它由一系列 C 函数和少量 C 类构成,可用于开发实时的图像处理、计算机视觉以及模式识别程序。 该库有 2500 多种优化算法,其中包括一套全面…

HarmonyOS ArkUI实战开发-NAPI 加载原理(上)

笔者在前 6 小结讲述了NAPI 的基本使用,包括同步和异步实现,本节笔者从源码的角度简单讲解一下NAPI 的加载流程,源码版本为 ArkUI 4.0 Release 版本。 hap 工程结构 工程配置签名后打一个 hap 包出来,然后解压该 hap 文件&#…

重发布及路由策略实验

目录 一、实验拓扑 二、实验需求 1、按照图示配置 IP 地址,R1,R3,R4 上使用 loopback 口模拟业务网段 2、R2,R3 和R4运行 oSPF,各自协议内部互通 3、在 RIP 和 oSPF 间配置双向路由引入,要求除 R4 上的…

C++初阶学习第二弹——C++入门(下)

C入门(上):C初阶学习第一弹——C入门(上)-CSDN博客 目录 一、引用 1.1 引用的实质 1.2 引用的用法 二、函数重载 三、内敛函数 四、auto关键字 五、总结 前言: 在上面一章我们已经讲解了C的一些基本…

【C语言】strstr函数刨析-----字符串查找

目录 一、strstr 函数介绍 ✨函数头文件: ✨函数原型: ✨函数解读 ✨功能演示 二、函数的原理以及模拟实现 ✨函数原理 ✨函数的模拟实现 三、strstr函数的注意事项 四、共勉 一、strstr 函数介绍 strstr函数是在一个字符串中查找另一个字符…

Leetcode 86. 分隔链表

题目链接: 86. 分隔链表 - 力扣(LeetCode)https://leetcode.cn/problems/partition-list/description/ 题目: 给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出…

CDN技术:全球化的数字内容快速分发系统

CDN技术:全球化的数字内容快速分发系统 在今天的互联网世界中,内容分发网络(CDN)技术起着至关重要的作用。它通过全球分布的服务器网络,快速、安全地将内容送达世界各地的用户,极大地提升了网页加载速度和…

SpringBoot+vue开发记录(二)

说明:本篇文章的主要内容为SpringBoot开发中后端的创建 项目创建: 1. 新建项目: 如下,这样简单创建就行了,JDK什么的就先17,当然1.8也是可以的,后面可以改。 这样就创建好了: 2. pom.xml…

【Android12】Bugreport实现原理

Bugreport实现原理 Bugreport Bugreport介绍 Android Bugreport是一个用于记录和收集 Android设备上系统信息、日志和调试信息的工具。 系统发生某些问题时,可以通过bugreport把系统当前时刻点(运行BugRepot的时刻)的系统相关的状态和信息…

Redis中BitMap在钉钉机器人中的应用

性能分析 数据库中有1000w用户,每个用户签到一次,对应两个字段 连续签到多少次 、签到时间。 签到时间字段占用10个字节,连续签到多少天 占用5个字节(假设一个用户能活100年,每天都签到,一个用户最多签到3…

【爬取研招网指定学校专业信息】

前言 本文介绍了如何使用 Python 的 requests 库和 BeautifulSoup 库来爬取研究方向信息,并将其保存为 CSV 文件。爬取的网站为“中国研究生招生信息网”(https://yz.chsi.com.cn/)。代码从指定的专业目录页面爬取研究方向的相关信息&#x…

ROM修改进阶教程------services.jar文件过小 合并odex apk合并odex 几种方法步骤解析

在上期博文中有说明去卡密等相关操作。但在安卓低版本中有些services.jar文件过小。大小不足1K,这种是无法直接反编译的。我们简单使用压缩软件打开查看。其中文件小的里面没有dex文件。这种需要我们先合并odex使其成为一个可以直接反编译的文件再来操作。操作也可以用于其他a…

Day 31 贪心算法理论基础 455.分发饼干 376. 摆动序列 53. 最大子序和

贪心算法理论基础 ​ 贪心算法的本质:选择每一个阶段的局部最优,从而达到系统的整体最优; ​ 贪心的套路就是没有套路,最好的策略就是举反例,因为大多数时候并不要求严格证明,只需要得到普遍性结论即可&a…

Linux之ebpf(1)基础使用

Linux之ebpf(1)基础使用 Author: Once Day Date: 2024年4月20日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可以参考专栏:Linux基础知识_Once-D…

C语言:数据结构(单链表)

目录 1. 链表的概念及结构2. 实现单链表3. 链表的分类 1. 链表的概念及结构 概念:链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针链接次序实现的。 链表的结构跟火车车厢相似,淡季时车次的车厢会相应…