按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
染(著名的“CIH”病毒就是用了这种方法)。
CIH的具体感染机制我们会在后面专门论述CIH病毒的一节中详细说明。
寄生病毒精确的实现了病毒的定义,“寄生在宿主程序的之上,并且不破坏宿主程序的正常功能”,所以寄生病毒设计的初衷都希望能够完整的保存原来程序的所有内容,因此除了某些由于程序设计失误造成原来的程序不能恢复的病毒以外,寄生型病毒基本上都是可以安全清除的。
除了改变文件头、将自己插入被感染程序中以外,寄生病毒还会采用一些方法来隐藏自己:如果被感染文件是只读文件,病毒在感染时首先改变文件的属性为可读写,然后进行感染,感染完毕之后再把属性改回只读,病毒在感染时往往还会记录文件最后一次访问的日期,感染完毕之后再改回原来的日期,这样用户就不会通过日期的变化觉察到文件已经被修改过了。
根据病毒感染后,被感染文件的信息是不是有丢失,我们把病毒感染分成两种最基本的类型,破坏性感染和非破坏性感染,对于非破坏性感染的文件,只要杀毒软件清楚的掌握了病毒感染的基本原理,准确的进行还原是可能的,在这种情况下,我们称这个病毒是可清除的。而对于破坏性感染,由于病毒删除或者覆盖了原来文件的全部/部分内容,所以这种病毒是不能清除的,只能删除感染文件,或者用没有被感染的原始文件覆盖被感染的文件。
DOS环境下的和EXE文件具有完全不同的结构,所以病毒感染的方法也完全不一样,有的病毒根据文件后缀名来判断感染的是还是EXE文件,而另外一种更加准确的方法是比较文件头,看看是不是符合EXE文件的定义。根据文件后缀名来进行感染经常会造成错误,一个最典型的例子是视窗95系统目录下的“MAND”文件,后缀名显示它是一个文件,但是这个大小超过90K的文件实际上是一个EXE文件。那些根据文件后缀名进行感染的病毒一旦感染这个文件就会造成文件的损坏,这也是很多用户发现自己在视窗下无法打开DOS框的原因。
覆盖病毒:
这种病毒没有任何美感可言,也没有体现出任何高明的技术,病毒制造者直接用病毒程序替换被感染的程序,这样所有的文件头也变成了病毒程序的文件头,不用作任何调整。显然,这种病毒不可能广泛流行,因为被感染的程序立刻就不能正常工作了,用户可以迅速的发现病毒的存在并采取相应的措施。
无入口点病毒:
这种病毒并不是真正没有入口点,只是在被感染程序执行的时候,没有立刻跳转到病毒的代码处开始执行。也就是说,没有在文件的开始放置一条跳转指令,也没有改变EXE文件的程序入口点。病毒代码无声无息的潜伏在被感染的程序中,可能在非常偶然的条件下才会被触发开始执行,采用这种方式感染的病毒非常隐蔽,杀毒软件很难发现在程序的某个随机的部位,有这样一些在程序运行过程中会被执行到的病毒代码!
那么,这种病毒必须修改原来程序中的某些指令,使得在原来程序运行中可以跳转到病毒代码处。我们知道x86机器的指令是不等长,也就是说无法断定什么地方开始的是一条有效地、可以执行到的指令,将这条指令改成跳转指令就可以切换到病毒代码了。聪明的病毒制造者从来不会被这种小儿科的问题难倒,他们发现了一系列的方法可以做这件事情:
* 大量的可执行文件是使用C或者帕斯卡语言编写的,使用这些语言编写的程序有这样一个特点,程序中会使用一些基本的库函数,比如说字符串处理、基本的输入输出等,在启动用户开发的程序之前,编译器会增加一些代码对库进行初始化,病毒可以寻找特定的初始化代码,然后使用修改这段代码的开始跳转到病毒代码处,执行完病毒之后再执行通常的初始化工作。“纽克瑞希尔”病毒就采用了这种方法进行感染。
* 病毒的感染部分包括了一个小型的反汇编软件,感染的时候,将被感染文件加载到内存中,然后一条一条代码的进行反汇编,当满足某个特定的条件的时候(病毒认为可以很安全的改变代码了),将原来的指令替换成一条跳转指令,跳转到病毒代码中,“CNTV”和“中间感染”病毒是用这种方法插入跳转到病毒的指令。
* 还有一种方法仅仅适用于TSR程序,病毒修改TSR程序的中断服务代码,这样当操作系统执行中断的时候就会跳转到病毒代码中。(比如说修改21H号中断,这样任何DOS调用都会首先通过病毒进行了)
TSR(Terminal Still Resident中止仍然驻留)程序,是DOS操作系统下一类非常重要的程序,包括所有的DOS环境下的中文操作系统(CCDOS、中国龙等)等一大类程序都是TSR程序。这类程序的特点是程序执行完毕之后仍然部分驻留在内存中,驻留的部分基本上都是中断服务程序,可以完成特定的中断服务任务。
除此之外,还有另外一种比较少见的获得程序控制权的方法是通过EXE文件的重定位表完成的。
伴随病毒
这种病毒不改变被感染的文件,而是为被感染的文件创建一个伴随文件(病毒文件),这样当你执行被感染文件的时候,实际上执行的是病毒文件。
其中一种伴随病毒利用了DOS执行文件的一个特性,当同一个目录中同时存在同名的后缀名为的文件和后缀名为。EXE的文件时,会首先执行后缀名为的文件,例如,DOS操作系统带了一个XCOPY。EXE程序,如果在DOS目录中一个叫做XCOPY的文件是一个病毒,那么当你敲入“XCOPY (回车换行)”的时候,实际执行的是病毒文件。
还有一种伴随方式是将原来的文件改名,比如说将XCOPY。EXE改成XCOPY。OLD,然后生成一个新的XCOPY。EXE(实际上就是病毒文件),这样你敲入“XCOPY (回车换行)”的时候,执行的同样是病毒文件,然后病毒文件再去加载原来的程序执行。
另外一种伴随方式利用了DOS或者视窗操作系统的搜索路径,比如说视窗系统首先会搜索操作系统安装的系统目录,这样病毒可以在最先搜索目录存放和感染文件同名的可执行文件,当执行的时候首先会去执行病毒文件,最新的“尼姆达”病毒就大量使用这种方法进行传染。
文件蠕虫:
文件蠕虫和伴随病毒很相似,但是不利用路径的优先顺序或者其他手段执行,病毒只是生成一个具有“INSTALL。BAT”或者“SETUP。EXE”等名字的文件(就是病毒文件的拷贝),诱使用户在看到文件之后执行。
还有一些蠕虫使用了更加高级的技术,主要是针对压缩文件的,这些病毒可以发现硬盘上的压缩文件,然后直接将自己加到压缩包中,目前病毒支持的压缩包主要是ARJ和ZIP,可能主要原因是因为这两种压缩格式的资料最全,压缩算法也是公开的,所以病毒可以方便的实现自己的压缩/增加方法。
针对批处理的病毒也存在,病毒会在以BAT结尾的批处理文件中增加执行病毒的语句,从而实现病毒的传播。
链接病毒
这类病毒的数量比较少,但是有一个特别是在中国鼎鼎大名的“目录2”(DIRII)病毒。病毒并没有在硬盘上生成一个专门的病毒文件,而是将自己隐藏在文件系统的某个地方,“目录2”病毒将自己隐藏在驱动器的最后一个簇中,然后修改文件分配表,使目录区中文件文件的开始簇指向病毒代码,这种感染方式的特点是每一个逻辑驱动器上只有一份病毒的拷贝。
簇:由于硬盘上每一个扇区的大小一般只有512字节,如果一个文件分布在很多的扇区中,要想完整的在文件分配表中表示这个文件占用的扇区将会使用非常多非常多的目录空间,例如1个1M的文件,将需要2K字节的空间表示文件占用扇区的情况。所以所有的文件系统都引入了簇的概念,一个簇就是很多个扇区,但是组合在一起作为文件分配的最小单位,簇的大小有4K、16K、32K等多种。
在视窗NT和视窗2000操作系统中,还有一种新的链接病毒,这种病毒只存在于NTFS文件系统的逻辑磁盘上,使用了NTFS文件系统的隐藏流来存放病毒代码,被这种病毒感染之后,杀毒软件很难找到病毒代码并且安全的清除。
对象文件、库文件和源代码病毒
这类病毒的数量非常少,总数大概不会超过10个,病毒感染编译器生成的中间对象文件(OBJ文件),或者编译器使用的库文件(。LIB)文件,由于这些文件不是直接的可执行文件,所以病毒感染这些文件之后并不能直接的传染,必须使用被感染的OBJ或者LIB链接生成EXE()程序之后才能实际的完成感染过程,所生成的文件中包含了病毒。
源代码病毒直接对源代码进行修改,在源代码文件中增加病毒的内容,例如搜索所有后缀名是“。C”的文件,如果在里面找到“main(”形式的字符串,则在则在这一行的后面加上病毒代码,这样编译出来的文件就包括了病毒。
文件病毒的基本原理
当被感染程序执行之后,病毒会立刻(入口点被改成病毒代码)或者在随后的某个时间(“无入口点病毒”)获得控制权,获得控制权后,病毒通常会进行下面的操作(某个具体的病毒不一定进行了所有这些操作,操作的顺序也很可能不一样):
* 内存驻留的病毒首先检查系统可用内存,查看内存中是否已经有病毒代码存在,如果没有将病毒代码装入内存中。非内存驻留病毒会在这个时候进行感染,查找当前目录、根目录或者环境变量PATH中包含的目录,发现可以被感染的可执行文件就进行感染。
环境变量:首先在DOS操作系统下出现,是由操作系统保存,对所有程序都一样的一些定义的值,比如说环境变量PATH是执行程序时搜索的路径列表,环境变量PROMPT是执行DOS命令时的提示信息。在视窗操作系统下也有环境变量,但是除了搜索路径以外的视窗操作系统的环境变量基本上在DOS框里面才会用到。
* 执行病毒的一些其他功能,比如说破坏功能,显示信息或者病毒精心制作的动画等等,对于驻留内存的病毒来说,执行这些功能的时间可以是开始执行的时候,也可以是满足某个条件的时候,比如说定时或者当天的日期是13号恰好又是星期五等等。为了实现这种定时的发作,病毒往往会修改系统的时钟中断,以便在合适的时候激活。
* 完成这些工作之后,将控制权交回被感染的程序。为了保证原来程序的正确执行,寄生病毒在执行被感染程序的之前,会把原来的程序还原,伴随病毒会直接调用原来的程序,覆盖病毒和其他一些破坏性感染的病毒会把控制权交回DOS操作系统。
* 对于内存驻留病毒来说,驻留时会把一些DOS或者基本输入输出系统(BIOS)的中断指向病毒代码,比如说INT13H或者INT 21H,这样系统执行正常的文件/磁盘操作的时候,就会调用病毒驻留在内存中的代码,进行进一步的破坏或者感染。
第三节 流传最广泛的病毒——宏病毒
宏病毒是使用宏语言编写的程序,可以在一些数据处理系统中运行(主要是微软的办公软件系统,字处理、电子数据表和其他Office程序中),存在于字处理文档、数据表格、数据库、演示文档等数据文件中,利用宏语言的功能将自己复制并且繁殖到其他数据文档里。
宏病毒在某种系统中能否存在,首先需要这种系统具有足够强大的宏语言,这种宏语言至少要有下面几个功能:
* 一段宏程序可以附着在一个文档文件后面。
* 宏程序可以从一个文件拷贝到另外一个文件。
* 存在这样一种机制,宏程序可以不需要用户的干预自动执行。
从微软的字处理软件WORD版本6。0开始,电子数据表软件EXCEL4。0开始,数据文件中就包括了宏语言的功能,早期的宏语言是非常简单的,主要用于记录用户在字处理软件中的一系列操作,然后进行重放,可以实现的功能有限,但是随着WORD版本97和EXCEL版本97的出现,微软逐渐将所有的宏语言统一到一种通用的语言:适用于应用程序的可视化BASIC语言(VBA)上,编写越来越方便,语言的功能也越来越强大,可以采用完全程序化的方式对文本、数据表进行完整的控制,甚至可以调用操作系统的任意功能,包括格式化硬盘这种操作也能实现了。
在字处理和其他办公软件中包括宏语言的初衷是为了实现办公自动化,包括自动的报表生成,一些固定格式的公文生成等等,比如说打开一个文件