我是逆向工程的新手,我现在已经开始研究特定文件格式的剖析,特别是 PE。我真的很喜欢学习文件的不同部分和不同的标志。
我只是想知道,这在逆向工程的劳动力中有什么实际用途?
我知道它们可能有某种用途,但我对这个领域真的很陌生,我想知道你以前什么时候使用过这些知识。
我是逆向工程的新手,我现在已经开始研究特定文件格式的剖析,特别是 PE。我真的很喜欢学习文件的不同部分和不同的标志。
我只是想知道,这在逆向工程的劳动力中有什么实际用途?
我知道它们可能有某种用途,但我对这个领域真的很陌生,我想知道你以前什么时候使用过这些知识。
虽然这个问题有点宽泛,但我觉得我可以通过至少解释我在逆向使用文件格式结构的一些方法来提供一个可以接受的答案。
首先,“在劳动力中”的逆向工程师总是有一些目标。例如,在防病毒公司工作的恶意软件分析师可能会分析样本以:
逆向工程只是了解给定系统的工作原理。文件格式是这个系统的一部分,因此,简单地了解文件格式的工作原理、它的魔法值是什么、存储在那里的数据类型、标题由什么组成等等都是系统的一部分。一些项目的逆向工程过程。
我参与的一个项目涉及了解某些文件的 PE 格式标头与其他文件的 PE 格式标头有何不同。为此,我需要根据 PE 文件头中的一些数据修改,找出为什么 Windows 操作系统会正确加载某些 PE 文件,而拒绝加载其他 PE 文件。
这个项目不是开源的,所以我不能详细介绍,但我可以告诉你,想要防止逆向工程的人会使用称为“打包器”和“软件保护器”的工具/算法,这些工具的一个组成部分是他们会阻碍、破坏或以其他方式改变磁盘上 PE 标头中的数据。为什么有人会这样做的一个例子是因为 PE 标头具有将由可执行文件调用的所有外部库和函数的列表。这个列表是IMAGE_IMPORT_DESCRIPTOR
为每个 DLL调用的,例如 kernel32.dll 和 ntdll.dll,它有一个列表IMAGE_IMPORT_BY_NAME
(也可以是顺序导入)它列出了可执行文件要使用的所有函数。了解程序如何工作的一种简单方法是简单地查看此导入列表,因为如果程序使用网络,就会有网络导入,如果它使用密码学,就会有密码导入,等等。
所以为了防止这种情况,软件加壳器和保护器通常会破坏磁盘上的这个表,然后在程序运行后动态重建它。为了有效地分析程序,逆向工程师通常必须在程序加载到内存后转储程序,并使用 ImpRec 之类的工具重建表。对 PE 文件格式有充分的了解使这项任务成为可能。
在我上述项目的情况下,我需要找出何时在头成员中设置了一个位,为什么操作系统会以与清除该位不同的方式处理文件。这包括学习文件格式,然后使用 WinDbg 作为内核调试器来找出NtCreateProcess
无法加载某些文件的原因。
示例 2
我有一个文件解析器,需要测试安全漏洞。解析器的主要工作之一是读取文件格式头数据结构,解释它们,然后对这些数据采取行动。例如,想想当 Adobe Photoshop 打开一个 JPEG 文件时会发生什么。对于这项任务,我必须研究文件格式的文档以更好地了解这些数据结构的作用,然后我编写了一个自定义模糊测试工具将任意格式错误的数据注入标头中,以试图利用解析器应用程序。