(这是对整个过程的非常非技术性的描述,欢迎评论和提问)
实践中的机制在所有系统中都是相同的,这与为什么将这些东西称为病毒而不是细菌有很大关系。
病毒不是“活的”,因为它缺乏必要的机制。它所做的是劫持一个更复杂的实体(例如细胞)的机器,并让它执行它的竞价——病毒可能只不过是一种以“竞价”列表作为有效载荷的劫持机制。
计算机病毒与这种简单的结构非常相似。
劫持如何运作?
计算机系统必须有一个启动序列——首先你这样做,然后你这样做,进一步的说明在这里,然后......——和一个动作序列(用于启动程序)。
例如,当您尝试运行一个可执行文件时,系统会打开该文件,找出它需要什么(如果它不能满足这些需求,就会抱怨——例如“缺少库”),找出如何放置所有组件打包在.exe内存中的文件中,确定在哪里执行,用彼此的信息更新组件以便它们可以通信,解包组件并将它们放置在内存中准备好的位置,最后释放对组件的控制措施标记为“第一”。
病毒通过(两个例子)劫持了这个过程:
- 找到将要激活可执行代码的位置列表(MBR、引导扇区、操作系统加载程序、操作系统存根、自动执行脚本、引导进程……)
- 将自己注入到这个列表中,以便系统在启动时还有一件事要做,那就是为病毒蛹注入生命。这可以通过修改操作系统的待办事项列表来完成,或者将其放置在一些方便的地方,例如 Windows 中的
auto-run文件夹或Run registry分支。任何放置在那里的东西都会在启动时运行。
- 或者它可以替换其中一个组件,将其保存在其他地方。当系统激活组件认为它是合法的时,病毒会做它的事情,然后它也会检索休眠的组件并激活它,就好像它是系统一样。因此,实际上,序列又长了一步,但“官方”从外部看,步数没有变化。
该病毒还可能将自身写入操作系统的诊断程序中,因此它们不会报告任何异常情况。这个过程可能在非常接近硬件的地方运行,因此感染很难被检测到。
为了感染可执行文件,病毒会以稍微不同的方式进行相同的操作。它可以修改文件的内部“清单”,使系统真正运行病毒。然后病毒会从其臃肿的“身体”中提取出原始过程的残骸,并依次激活它。用户将看到所需的进程正在运行,而不会注意到激活的轻微延迟。
消毒需要了解病毒,以便可以从受感染的对象中提取原始文件,并用于完全替换它。
存在更复杂的隐藏方法:许多可执行文件的内部区域大多为零,用作一种或另一种的临时存储。病毒隐藏在那里,并且只对文件进行了轻微的修改,因此要激活的“第一个组件”不是原来的组件,而是病毒现在所在的空白区域。作为“内部”文件,文件大小现在没有变化。病毒一旦获得控制权,就会将自己移动到其他地方,再次将其隐藏的区域(内存中)归零,并将控制权交给旧的“第一个组件”,然后它不会发现任何异常。