病毒如何附着在文件上?它如何感染应用程序?我说的是二进制级别,如何将代码添加到文件中以使其被感染?
显然,如果我们对原始文件进行哈希检查,它将具有与受感染文件不同的哈希值。这是否意味着它在文件中添加了额外的数据?这是如何运作的?
如果我的问题不是很清楚,请原谅我,我很难描述我的意思。只是为了确保我的观点是正确的,这就是我现在的看法:
< 图像二进制文件 > + < 病毒 > = < 图像二进制文件 < 病毒 > >
病毒如何附着在文件上?它如何感染应用程序?我说的是二进制级别,如何将代码添加到文件中以使其被感染?
显然,如果我们对原始文件进行哈希检查,它将具有与受感染文件不同的哈希值。这是否意味着它在文件中添加了额外的数据?这是如何运作的?
如果我的问题不是很清楚,请原谅我,我很难描述我的意思。只是为了确保我的观点是正确的,这就是我现在的看法:
< 图像二进制文件 > + < 病毒 > = < 图像二进制文件 < 病毒 > >
取决于病毒和文件类型。此外,请记住,“病毒”在技术上描述了一种自我复制形式的恶意软件——还有其他形式的恶意软件可以使用类似的技术隐藏在文件中。所以:
可执行文件:大多数可执行文件相对稀疏——由于各种原因,合法代码和数据之间存在很大差距。可能是出于性能原因,或者是为了利用编译器优化,或者只是因为没有设置各种编译器标志来将输出大小压缩到最小。一些病毒利用这一点,在这些间隙中插入它们的指令,这会改变文件的结果哈希(注意不同的哈希意味着内容不同,而不仅仅是文件大小发生了变化)。通过劫持程序入口点在合法代码之前或代替合法代码执行病毒代码,可以在应用程序启动时执行病毒。
请注意,在这种情况下,可执行文件包括诸如 DLL 文件之类的东西——它们本质上是公开功能的 Windows 可执行文件,而不是自包含的应用程序。存在一些技术差异,但在感染方面,它们几乎相同 - 只需劫持一个调用并使其指向您的代码而不是原始代码。
Linux 可执行文件非常相似,都有空白空间,但文件系统也可能会尝试强制执行特定文件是否被视为“可执行文件”或“数据”的规则,这可能会使问题稍微复杂化。
数据文件:一些数据文件,尤其是媒体文件(图像、声音、视频),使用块结构,其中许多不同类型的数据存储在不同的块中。例如,PNG 文件至少由三个“块”组成:标题、图像数据和文件结束标记。在这些文件中,通常可以使用正确的形式添加额外的块,并添加任意数据:在 PNG 文件中,这可能是添加一个“iTXt”块,它只是一个 Unicode 文本块。
但是,数据文件通常无法自行执行,因此通常也会存在修改过的可执行文件,或者处理应用程序中的目标缺陷。例如,如果有一个命令行图像处理工具获取图像文件夹并以某种方式处理它们,则可能会发现一个缺陷,这意味着通过提供一个特定的输入文件,它会将数据添加到文件夹中的所有文件中。在“邪恶”文件之后处理的文件夹使它们的行为方式相同。这可以归类为类似病毒的行为,但不符合计算机病毒的某些定义。
对于某些文件类型,在合法文件内容之后添加数据也是有效的。例如,如果您只是将文本文件附加到 JPEG 文件中,它们仍然可以工作 - 就像您的脑海中的图像一样。这可能被病毒使用,但由于缺乏可执行性,不太可能是病毒的唯一部分。
其他形式的恶意软件使用了类似的技术:有整个系列的恶意软件被插入到 PHP 文件中,然后在有人访问相关页面时执行。勒索软件通常通过劫持 Javascript 文件并向其中添加恶意代码来分发。但是,在这些情况下,代码通常不会自我复制,因此不符合成为病毒的所有技术细节。