前言
在这个系列文章中,我会向大家介绍逆向工程恶意软件的各个方面的知识。逆向工程恶意软件是一个很深奥和复杂的主题,因此很少有人掌握它,这也是这个领域的薪酬很高的主要原因。
在开始本文之前,我需要先阐述一个概念框架,并阐述与逆向工程恶意软件有关的一些策略和问题。
什么是逆向工程?
在本系列文章中,即使我无法访问源代码(通常是这种情况),我也将尝试确定该恶意软件的功能。在确定软件功能之后,我将尝试对其调整或在另一个恶意软件中重新构建相关功能。
逆向工程用于恶意软件开发和监测的两个环节。在开发环节,使用逆向工程的作用是用来查找恶意软件可以利用的操作系统和应用程序中的漏洞。此外,开发人员可以使用逆向工程来查找和使用其他恶意软件的模块。像所有软件开发人员一样,恶意软件开发人员会重复使用他人软件中的有用代码,即使在进行恶意软件开发时也不会重新编写代码。
而在监测环节,安全调查员和事件处理程序要使用逆向工程来跟踪恶意软件的作用以及它可能带来的危害。此外,逆向工程通常可以使安全调查员了解恶意软件的起源和归因。
低级软件
在进行逆向工程过程中,我经常会在低级软件中进行工作。因为对我来说源代码通常是不可用的,只有在低级软件才能实现这点。
汇编码
汇编是软件链中的最低级别,尽管我无法访问源代码,但是可以使用各种工具将源代码减少到汇编级别。任何高级语言的指令都必须对汇编语言代码可见,每个指令必须减少到一个或多个汇编指令。在大多数情况下,我将在逆向工程时使用这个简单的汇编代码。
显然,要取得成功,我必须熟悉汇编语言代码。不幸的是,没有一种具体的汇编语言,因为汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言。要掌握逆向工程,就必须掌握我选定平台的汇编代码。在本系列中,我将研究x86,x64和ARM汇编。
机器码
机器码或二进制代码是由CPU读取的代码,机器码和装配码是同一件事情的两种不同的表示。机器语言(machine language)是一种指令集的体系,这种指令集,称机器码,是电脑的CPU可直接解读的数据,机器码有时也被称为原生码(Native Code)。
汇编语言只是机器码的文本表示,使得它们更容易使人类可读。每个汇编语言命令由一个称为操作码的数字表示,以方便操作。
编译器
编译器将源代码转换为机器码,逆向过程中最大的挑战之一是编译器倾向于优化代码,使其更有效率,并且性能更好。因此,由两个不同的编译器编译的相同的代码实际上会产生不同的机器码,从而使我的分析工作变得更加困难。
逆向过程
逆向过程通常可以分为至少两种类型:代码级和系统级。
代码级
当我执行代码级逆向过程时,就会尝试从机器码中提取软件的代码概念和算法。这就需要对CPU如何工作,操作系统如何工作以及软件开发过程等方面进行了解。在此过程中,我将使用IDA Pro,SoftIce,Ollydbg等一些工具。
系统级
系统级逆向过程涉及使用运行工具来获取有关软件的信息,检查程序,检查可执行文件以及跟踪程序的输入和输出,大部分信息将来自操作系统。我将使用诸如SysInternals Suite,Tripwire,lsof,Wireshark等工具。
逆向工具
逆向工程工具可以分为几类,包括:
1.系统级工具
这些工具会探测,监视和探索我正在检查的软件。在大多数情况下,安全员会使用操作系统来收集恶意软件的信息。
2.反汇编工具
反汇编工具将使用该软件来生成程序的汇编代码,这样,我就可以在没有看到源代码的情况下检查恶意软件的内部工作了。
3.调试器
我可以使用调试器在程序运行时观察程序,这样我就能够设置断点并跟踪代码。
4.解压器
反编译器会尝试使用可执行文件并以高级语言重新创建源代码,虽然由于编译人员不同而使逆向过程不同,但仍然是逆向工程的一个最有效率的工具。
合法性
逆向工程的合法性一直是有争议的,合法性问题主要围绕逆向工程的社会和经济方面。例如,如果你要逆向微软的Excel,对其功能重新调整,然后重新出售它,这就会被视为非法的。如果你是逆向工程恶意软件来破译其功能和起源,那么这可能被认为是合法的。
版权法和“数字千年版权法案”(DMCA)是与逆向工程有关的重要法规。有些人声称,在逆向工程过程中创建的软件程序的非正式版本,本身就违反了版权法。不过,法院并不这么认为。
另一方面,DMCA保护的是受版权保护的系统不被复制,但这与逆向工程的精神完全是矛盾的,因为逆向工程通常都要涉及这些受版权保护的系统。
但是有一个例外,比如,为了评估或提高计算机系统的安全性。
结论
我希望大家看完本文后,可以了解逆向工程恶意软件过程的基本框架和细节背景。从而更好的踏上逆向工程的光辉大道!
后面的文章,我会深入浅出的向大家介绍各种相关比较深奥的逆向工程细节,请大家留意我的更新。