按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
对象文件、库文件和源代码病毒
这类病毒的数量非常少,总数大概不会超过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)上,编写越来越方便,语言的功能也越来越强大,可以采用完全程序化的方式对文本、数据表进行完整的控制,甚至可以调用操作系统的任意功能,包括格式化硬盘这种操作也能实现了。
在字处理和其他办公软件中包括宏语言的初衷是为了实现办公自动化,包括自动的报表生成,一些固定格式的公文生成等等,比如说打开一个文件实现自动的签名和回复对于公司的公文来说是很重要的功能,使用WORD的宏语言可以很方便的实现。但是这种自动执行的特性也给宏病毒的出现打开了方便之门。
宏病毒存在于文档文件中的形式非常复杂,宏病毒的感染都是通过宏语言本身的功能实现的,比如说增加一个语句、增加一个宏等等,不通过宏语言执行环境(比如说WORD或者EXCEL程序)的功能,直接在二进制的数据文件中加入宏病毒基本上是不可能的。在本书第五章中专门有一节详细叙述了微软办公软件文档的二进制结构,如果你感兴趣的话可以研究那一节的内容。
WORD版本7以后,宏可以以加密的形式存在,宏代码只能被运行而不能被查看,碰到这种加密的宏病毒,采用简单的字符串搜索的方式对查找这类病毒无能为力。
宏病毒还是一种与平台无关的病毒(甚至包括和CPU无关),任何电脑上如果能够运行和微软字处理软件、电子数据表软件兼容的字处理、电子数据表软件,也就是说可以正确打开和理解WORD文件(包括其中的宏代码)的任何平台都有可能感染宏病毒。
我们下面以WORD宏病毒为例,详细说明宏病毒的感染机制。
使用微软的字处理软件WORD,用户可以进行打开文件、保存文件、打印文件和关闭文件等操作。在进行这些操作的时候,WORD软件会查找指定的“内建宏”:关闭文件之前查找“FileSave”宏,如果存在的话,首先执行这个宏,打印文件之前首先查找“FilePrint”宏,如果存在的话执行这个宏。另外还有一些以“自动”开始的宏,比如说“AutoOpen”、“AutoClose”等,如果这些宏的定义存在的话,打开/关闭文件的时候会自动执行这些宏。在EXCEL环境下同样存在类似的自动执行的宏。
下面是以“自动”开始,可以在适当的时候自动执行的宏的列表:
WORD
EXCEL
Office97/2000
AutoOpen
Auto_Open
Documeny_Open
AutoClose
Auto_Close
Document_Close
AutoExec
AutoExit
AutoNew
Document_New
Auto_Activate
Auto_Deactivate
以“文件”开始的预定义宏在不同语言中名字不完全相同(但是对于非西方文字,如中文、日文,名字和英文的宏名字是一样的)。这些宏会在执行特定操作的时候被激发,比如说使用菜单项打开和保存文件等。还有一类宏,是在用户编辑文字的时候,如果输入了指定键或者指定的键的序列,则该类宏会被触发。
攻击微软WORD、EXCEL和其他Office程序的宏病毒,基本上都是采用上面三种方式触发的。如果打开一个被感染宏病毒的文档,WORD(EXCEL或者其他)会首先执行包含在“AutoOpen”宏中的病毒代码,如果宏病毒替换了标准的菜单处理函数,则使用该项菜单的时候会执行宏病毒代码,当然还有另外一种情况,就是敲入指定字符序列的时候会激发相应的病毒代码。
为了避免被杀毒软件检测出来,一些宏病毒使用了和DOS环境下多态病毒类似的方法来隐藏自己。在“自动”开始的宏中,不包括任何感染或者破坏的代码,但是在其中包含了创建新的宏(实际进行感染和破坏的宏)的代码,这样“自动”宏被执行之后,创建了新的病毒宏在执行,执行完毕之后再删除病毒宏。这样,杀毒软件很难从原始的代码中发现病毒的踪迹。
在WORD或者其他Office程序中,宏分成两种,一种是每个文档中间包含的内嵌的宏,另外一种是属于WORD应用程序,为所有打开的文档共用的宏。任何宏病毒首先都是藏身在一个指定的WORD文件中的,一旦打开了这个WORD文件,宏病毒就被执行了,宏病毒要做的第一件事情就是将自己拷贝到全局宏的区域,使得所有打开的文件都会使用这个宏。当WORD退出的时候,全局宏将被存放在某个全局的模板文件(。DOT文件)中,这个文件的名字通常是“NORMAL。DOT”。如果这个全局宏模板被感染,则WORD再启动的时候会自动的装入宏病毒并且执行。
然后病毒就开始进行实际的感染,有的病毒已经包括了对“FileSave”、“FileOpen”的处理,如果没有则病毒会创建一个新的处理函数替代原来的。这样,一旦用户保存文件,病毒就会被附加在新保存的文件中,一旦用户打开文件,病毒同样会立刻附加在新打开的文件中。还有一种感染速度更快的方法,病毒搜索所有最近打开的文档(宏语言具有这个功能),然后将它们全部感染。
EXCEL宏病毒除了很少的几点不同以外,和WORD宏病毒非常相似。首先是EXCEL的全局模板文件不是“NORMAL。DOT”,而是放在EXCEL安装目录下的“STARTUP”子目录中的所有EXCEL文件。EXCEL的版本变化非常快,4。0版本和EXCEL95使用的宏完全不一样,但是微软有一个良好的习惯,就是除了很少的例外以外,后来的版本对前一个版本的的支持都比较好,这样做带来的副作用就是,在4。0版本下编写的宏病毒在EXCEL95下仍然能够正常的工作。
ACCESS作为微软办公软件的一员,同样具有强大的宏语言,也就同样有可能被病毒感染。而且ACCESS中间存在自动脚本和自动宏的概念,由于ACCESS数据库处理的需要,软件本身就大量使用了脚本语言的功能,如果清除被病毒感染的文件很可能把正常的脚本也清除,这样会造成数据库文件的损坏。
其他的一些字处理软件,包括AmiPro、IBM的WordPro等,只要具有了足够强大的宏语言就可能包括病毒,由于使用这些字处理软件的人比较少,所以没有严重的病毒感染事件,但是AmiPro和WordPro环境下的病毒都已经被发现过。
有一些简单的办法可以判断一个文件是否被宏病毒感染。首先打开你的WORD,选择菜单:工具(Tools)-》宏(Macro)—》宏列表(Macros),如果发现里面有很多以“Auto”开始的宏,那么你很可能被宏病毒感染了。自从微软的Office97以后,在打开一个Office文档的时候,如果文档中包括了宏,则WORD会弹出下面的警告框:弹出这个警告框并不一定就意味着病毒,因为微软的很多Office自动化功能就是通过宏来实现的。但是在国内使用这些功能的用户很少,所以一些杀毒软件把正常的包含宏的文档中的宏统统去掉(甚至包括Office安装程序中的一些模板文档),用户反而觉得这种软件好,因为从此不会再有任何警告框出现了。唉,这就是中国用户的典型心理,和前面说的误报率一样,让人哭笑不得。
第四节 躲避杀毒软件的检测——病毒的多态(变形)技术
我们把使用通常的特征码扫描法无法检测(或者极其难以检测)的病毒称为多态病毒。多态病毒避免被检测的方法主要有两种:使用不固定的密钥或者随机数加密病毒代码,或者在病毒运行的过