逆向工程恶意软件,第 5 部分:OllyDbg 基础知识

原文链接:https://www.hackers-arise.com/post/2017/10/03/Reverse-Engineering-Malware-Part-5-OllyDbg-Basics

在本系列中,我们将研究如何对恶意软件进行逆向工程,以了解其工作原理并可能重新利用它。黑客和间谍机构,如中央情报局和国家安全局,经常将恶意软件重新用于其他目的。

之前,我们研究了IDA Pro的基础知识,IDA Pro是我们行业中使用最广泛的反汇编器。在本教程中,我们将介绍使用最广泛且最免费的调试器之一OllyDbg。

OllyDbg 是一款通用的 Win32 用户土地调试器。它具有易于使用且相当直观的GUI,使其成为相对快速的研究。虽然OllyDbg是免费的,但它不是开源的,因为我们无法访问源代码。尽管如此,OllyDbg还是有一个定义明确的插件架构,使得那些想要向这个强大的工具添加功能的开发人员可以轻松扩展它。

如果您使用的是 Kali 或其他安全发行版,它通常安装在您的系统上。OllyDbg将在Windows或Linux中运行,实际上,它需要WINE在Linux中运行。如果您的系统上没有OllyDbg,可以在此处下载OllyDbg

步骤#1:启动OllyDbg

要在Kali中启动OllyDbg,请转到应用程序,然后转到逆向工程,最后转到ollydbg,如下面的屏幕截图所示。

当您这样做时,它将打开如下所示的屏幕。请注意,OllyDbg在GUI顶部具有熟悉的下拉菜单系统。

步骤#2:将文件加载到OllyDbg中

下一步是将.exe文件加载到Ollydbg中。您可以通过将文件拖放到Olly的工作区域中或转到顶部的“文件”菜单并选择“打开”来执行此操作。请注意,打开的窗口指定它必须是可执行文件。

当您单击“打开”时,Ollydbg 将开始分析代码的过程。在本例中,我使用了一个简单的.exe,该.exe预安装在名为 LaunchU3 的闪存驱动器上.exe仅用于演示目的。显然,它不是恶意软件。在以后的教程中,我们将同时使用恶意软件和非恶意软件进行调试和分析。诸如OllyDbg之类的调试器也可用于分析开发人员代码中的错误(错误),以及破坏防止盗版的身份验证方案。

正如你在下面看到的,Olly,获取代码并分成几个窗口。在左上角的窗口中,我们有指令的虚拟地址,在右上角的窗口中,CPU寄存器,在左下角,我们有驻留在内存中的数据,最后在右下角的窗口中,我们有堆栈。另外,请注意,在右下角,以黄色突出显示,我们有状态。在这种情况下,它表示我们处于“暂停”状态。

步骤#3:代码的不同视图

我们可以通过单击顶部菜单上的视图按钮来获得数据的不同视图。请注意,每个视图都与一个热键相关联,该热键前面是 Alt 键,但使用 Ctrl 键的“修补程序”除外。

从这里我们可以打开进程的日志(Alt + L),可执行文件(Alt + E),内存布局(Alt + M),窗口,句柄及其断点(Alt + B)。请注意,其中每个字母也以菜单栏上的蓝色字母表示为快捷方式。

如果我们选择可执行模块(Alt + E)或蓝色的“E”,我们将打开一个包含所有可执行文件的窗口,如下所示。“可执行模块窗口”最右侧显示基本虚拟地址,第二列显示内存中二进制文件的虚拟大小,第三列显示入口点的虚拟地址,第四列中模块的名称、文件版本以及进程中加载的每个模块的文件路径。如果文本显示为红色,则表示模块是动态加载的。

从可执行文件窗口中,我们可以右键单击并拉出一个上下文相关的窗口。从这里我们可以做很多事情,但让我们看一下“查看名称”窗口。

在这里,我们可以看到程序中使用的所有函数和导入的函数。我们还可以使用 Ctrl+N 访问此窗口。通过检查可执行文件的导入函数,我们通常可以破译恶意软件的功能。Microsoft 的 MSDN API 文档站点(www.MSDN.microsoft.com)可以作为有用的资源,用于找出这些函数的作用、参数的这些函数的接收以及这些函数返回的内容。

在“名称”窗口中,如果我们右键单击函数名称,则可以通过单击“切换断点”或“F2”来设置断点。

OllyDbg的内存映射窗口显示进程中每个分配的内存区域的虚拟地址、虚拟大小、所有者模块、节名称、内存分配类型和内存保护。

OllyDbg 的“线程”窗口显示线程 ID、入口点虚拟地址、线程环境块 (TEB) 虚拟地址、最后一个错误值、状态(如活动或挂起)、优先级以及进程中每个线程的计时信息。

“窗口”窗口显示进程拥有的每个窗口的句柄、标题、父窗口、窗口 ID、窗口样式和窗口类信息。

“句柄”窗口显示进程拥有的每个句柄的对象类型、引用计数、访问标志和对象名称。

SEH(结构化异常处理程序)链窗口显示当前线程的结构化异常处理程序函数。

断点

任何调试器的关键功能之一是能够设置断点。断点使我们能够在指定的地址或指令处停止程序的执行。断点有两种主要类型(1) 软件和 (2) 硬件。OllyDbg 提供了一种使用 Alt+B 通过断点窗口查看和打开和关闭断点的方法

OllyDbg 常用快捷键

用户界面

打开新程序 F3

关闭程序 Alt+F2

最大化/还原活动窗口 F5

使 OllyDbg 位于最顶层窗口 Alt+F5

关闭 OllyDbg Alt+X

窗户

打开断点窗口 Alt+B

打开 CPU 窗口 Alt+C

打开模块窗口 Alt+E

打开日志窗口 Alt+L

打开内存窗口 Alt+M

编辑

添加标签 : (冒号)

添加注释 ;(分号)

编辑内存 Ctrl+

组装空间

撤消更改 Alt+BkSp

执行

步入 F7

动画转换为 Ctrl+F7

步过 F8

通过 Ctrl+F8 进行动画处理

运行应用程序 F9

传递异常处理程序并运行 Shift+F9

执行直到返回 Ctrl+F9

执行直到用户代码 Alt+F9

跟踪到 Ctrl+F11

通过 Ctrl+F12 进行跟踪

暂停 F12

暂停跟踪条件 Ctrl+T

运行到选择 F4

断点

设置/取消设置断点 F2

设置/编辑条件断点 Shift+F2

设置/编辑条件日志断点 Shift+F4

暂时禁用/恢复 BP 空间

数据

分析可执行代码 Ctrl+A

扫描对象文件 Ctrl+O

显示符号名称 Ctrl+N

搜索

查找选定的地址外部参照 Ctrl+R

查找跳转到行 Ctrl+J

搜索序列 Ctrl+S

搜索分配的内存 Ctrl+L

搜索二进制 Ctrl+B

搜索命令 Ctrl+F

重复上次搜索 Ctrl+L

导航

转到原点 * (星号)

转到表达式 Ctrl+G 的地址

转到上一个地址 – (减号)

转到下一个地址 + (加号)

转到上一个过程 Ctrl+-

转到下一个过程 Ctrl++

转到上一个参考 Alt+F7

转到下一个引用 Alt+F8

跟随表达式 Ctrl+G

跟随跳转或呼叫回车

查看调用树 Ctrl+K

杂项

上下文相关帮助 Ctrl+F

快捷键的完整列表

以下是OllyDbg官方网站上的OllyDbg快捷方式的完整列表 www.ollydbg.de

功能

全局快捷方式

现在我们已经演示了两个主要工具,IDA Pro和OllyDbg,并向您介绍了Assembler Basics和Windows Internals,现在是时候开始逆转恶意软件了!

发表评论

您的电子邮箱地址不会被公开。