1、计算机病毒原理计算机病毒原理及防治及防治卓新建 博士北京邮电大学 信息工程学院 信息安全中心Email: or: 电话:(010)62282264目录目录v第1章 计算机病毒的基础知识及发展简史v第2章 计算机病毒的相关DOS基本系统知识v第3章 计算机病毒的结构及作用机制v第4章 检测计算机病毒的基本方法v第5章 清除计算机病毒的基本技术v第6章 计算机病毒的预防及计算机系统的修复v第7章 典型计算机病毒的机理分析v补充 常见反病毒产品的介绍第1章 计算机病毒的基础知识1.1 计算机病毒的定义1.2 病毒的基本特征1.3 计算机病毒的分类1.4 计算机病毒的发展简史1.5 计算机病毒在我国的
2、发展简况1.6 计算机病毒的产生及相关社会问题1.7 计算机病毒防治的基本方法1.1 计算机病毒的定义v在生物学中,病毒是指侵入动植物体等有机生命体中的具有感染性、潜伏性、破坏性的微生物,而且不同的病毒具有不同的诱发因素。v“计算机病毒”一词是人们联系到破坏计算机系统的“病原体”具有与生物病毒相似的特征,借用生物学病毒而使用的计算机术语。v美国计算机安全专家Frederick Cohen博士是这样定义计 算机病毒的:”病毒程序通过修改其他程序的方法将自己的精确拷贝或可能演化的形式放入其他程序中,从而感染它们”。1.1 计算机病毒的定义1994年中华人们共和国计算机安全保护条例定义:“计算机病毒
3、是指编制、或者在计算机程序中插入的,破坏计算机功能或数据、影响计算机使用,并能自我复制的一组计算机指令或者程序代码”。广义定义广义定义能够引起计算机故障能够引起计算机故障, ,破坏计算机数据的程序都统称破坏计算机数据的程序都统称为计算机病毒。为计算机病毒。1.2 病毒的基本特征v计算机病毒是一段特殊的程序,它与生物学病毒有着十分相似的特性。除了与其他程序一样,可以存储和运行外,计算机病毒(简称病毒)还有感染性、潜伏性、可触发性、破坏性、衍感染性、潜伏性、可触发性、破坏性、衍生性生性等特征。它一般都隐蔽在合法程序(被感染的合法程序称作宿主程序)中,当计算机运行时,它与合法的程序争夺系统的控制权,
4、从而对计算机系统实施干扰和破坏作用。v感染性 计算机病毒的感染性是指计算机病毒具有把自身复制到其他程序中的特性。感染性是计算机病毒的根本属性,是判断一个程序是否为病毒程序的主要依据。病毒可以感染文件、磁盘、个人计算机、局部网络、互联网,病毒的感染是指从一个网络侵入另一个网络,由一个系统扩散到另一个系统,由一个系统传入到另一个磁盘,由一个磁盘进入到另一个磁盘,或者由一个文件传播到另一个文件的过程。软盘、光盘、网络(主要包括电子邮件、BBS、WWW浏览、FTP文件下载等等)是计算机病毒的主要感染载体,点对点的通信系统和无线通信系统则是最新出现的病毒的感染载体。感染性是病毒的再生机制,病毒通过修改磁
5、盘扇区信息或文件内容,并与系统中的宿主程序链接在一起达到感染的目的,继而它就会在运行这一被感染的程序之后开始感染其他程序,这样一来,病毒就会很快地感染到整个系统。病毒的感染性与计算机系统的兼容性有关。v潜伏性(或隐藏性 )病毒的潜伏性是指其具有依附于其他媒体而寄生的能力,即通过修改其他程序而把自身的复制品嵌入到其他程序或磁盘的引导区(包括硬盘的主引导区)中寄生。这种繁殖的能力是隐蔽的,病毒的感染过程一般都不带有外部表现,大多数病毒的感染速度极快。而且大多数病毒都采用特殊的隐藏技术,例如有些病毒感染正常程序时将程序文件压缩,留出空间嵌入病毒程序,这样使被感染病毒的程序文件的长度的变化很小,很难被
6、发现;有些病毒修改文件的属性等;还有些病毒可以加密、变型(多态病毒)或防止反汇编、防跟踪等等都是为了不让被感染的计算机用户发现。当计算机病毒侵入系统后,一般并不立即发作,而是具有一定的潜伏期。在潜伏期,只要条件许可,病毒就会不断地进行感染。一个编制巧妙的计算机病毒程序,可以在一段很长的时间内隐藏在合法程序中,对其他系统进行感染而不被人们发现。病毒的潜伏性与感染性相辅相成,潜伏性越好,其在系统中存在的时间就会越长,病毒的感染范围也就越大。 v可触发性病毒一般都有一个触发条件:或者触发其感染,即在一定的条件下激活一个病毒的感染机制使之进行感染;或者触发其发作,即在一定条件下激活病毒的表现(破坏)部
7、分。条件判断是病毒自身特有的功能,一种病毒一般设置一定的触发条件。病毒程序在运行时,每次都要检测控制条件,一旦条件成熟,病毒就开始感染或发作。触发条件可能是指定的某个时间或日期、特定的用户识别符的出现、特定文件的出现或使用次数、用户的安全保密等级、某些特定的数据等等 v破坏性 计算机病毒的破坏性取决于病毒设计者的目的和水平 v计算机病毒的危害大致有如下几个方面:(1)对计算机数据信息的直接破坏作用(2)抢占系统资源(3)影响计算机运行速度(4)病毒对计算机硬件的破坏(5)衍生性v衍生性既然计算机病毒是一段特殊的程序,了解病毒程序的人就可以根据其个人意图随意改动,从而衍生出另一种不同于原版病毒的
8、新病毒,这种衍生出的病毒可能与原先的计算机病毒有很相似的特征,所以被称为原病毒的一个变种;如果衍生的计算机病毒已经与以前的计算机病毒有了很大甚至是根本性的差别,则此时就会将其认为是一种新的计算机病毒。变种或新的计算机病毒可能比原计算机病毒有更大的危害性。 v病毒程序与正常程序的区别:正常程序是具有应用功能的完整程序,以文件形式存在,具有合法文件名;而病毒一般不以文件的形式独立存在,一般没有文件名,它隐藏在正常程序和数据文件中,是一种非完整的程序。正常程序依照用户的命令执行,完全在用户的意愿下完成某种操作,也不会自身复制;而病毒在用户完全不知的情况下运行,将自身复制到其他正常程序中,而且与合法程
9、序争夺系统的控制权,甚至进行各种破坏。 1.3 计算机病毒的分类1.3.0 计算机病毒的数量计算机病毒的数量1.3.1 传统计算机病毒传统计算机病毒1.3.2 宏与宏病毒、脚本语言与脚本病毒、宏与宏病毒、脚本语言与脚本病毒、 蠕虫、木马、后门等概念蠕虫、木马、后门等概念1.3.0计算机病毒的数量计算机病毒的数量v目前,病毒到底有多少,各种说法不一。v2000年12月在日本东京举行的“亚洲计算机反病毒大会”的报告中说,2000年11月以前的病毒数量超过55 000种;v目前,有的防病毒销售商则声称收集了60 000种左右的PC病毒(有些声明是骗人的);vWildList Organization
10、在2001年7月的报告中列出了698中。v但SupplementalList连同WildList Proper只列出了214种(David Harley, Robert Slade, Urs E.Gattiker著,朱代祥,贾建勋,史西斌译,计算机病毒揭密,北京,人民邮电出版社,2002,9)。v“两个病毒在它们连续的代码和数据范围内,即使只有一个比特的区别也是不同的” (Vesselin Bontchev,Methodology of Computer Anti-Virus Research,University of Hamburg,1998)。1.3.1 传统计算机病毒传统计算机病毒v1
11、按计算机病毒攻击的机型分类(1)攻击微型机的病毒;(2)攻击小型计算机的病毒;(3)攻击工作站的病毒 v2按计算机病毒攻击的操作系统分类 (1)攻击DOS系统的病毒;(2)攻击Windows系统的病毒;(3)攻击攻击UNIX或OS/2系统的病毒v3按传播媒介分类(1)单机病毒;(2)网络病毒1.3.1 传统计算机病毒传统计算机病毒v4按计算机病毒的寄生方式分类 (1)源码型病毒; (2)入侵型病毒;(3)外壳型病毒;(4)操作系统型病毒v5按病毒的表现(破坏)情况分类(1)良性病毒 ;(2)恶性病毒 v6按计算机病毒寄生方式和感染途径分类 按寄生方式:引导型病毒,文件型病毒。 按感染途径:驻留
12、内存型和不驻留内存型。 混合型病毒集引导型和文件型病毒特性于一体。1.3.2 与病毒相关的几个概念与病毒相关的几个概念v1 1宏与宏病毒(宏与宏病毒(Macro and Macro virusMacro and Macro virus) 在Windows环境下数据文件是由Word等文字处理软件建立的,被称为文档文件或文档。Word文档中包含两种信息:文本信息或称文本,格式信息。 Microsoft Word中对宏的定义为“宏就是能够组织在一起的,可以作为一个独立命令来执行的一系列Word命令。它能使日常工作变得容易”。Word文档中的格式信息就包含了很多这样的宏。Word的宏语言有十分强大的功
13、能,它具备访问系统的能力,可以直接运行DOS系统命令、调用Windows API、DLL等。这些操作都可能对系统的安全直接构成威胁。 如果一个宏中包含了上述形式的有破坏能力的命令,并且还有自我复制功能,这个宏就成了宏病毒。概括起来讲,宏病毒就是使用宏语言编写的有一定破坏能力的程序,可以在一些数据处理系统中运行(主要是微软的办公软件系统,字处理、电子数据表和其他Office程序中),存在于字处理文档、数据表格、数据库、演示文档等数据文件中,利用宏语言的功能将自己复制到其他数据文档中。除了Word宏病毒外,常见的还有Excel宏病毒PowerPoint宏病毒等。v2 2脚本语言与脚本病毒(脚本语言
14、与脚本病毒(Script Language and Script Language and Script VirusScript Virus)脚本病毒类似于宏病毒,但它的执行环境不再局限于Word、Excel等Microsoft Office应用程序,而是随着Microsoft 将脚本语言和视窗操作系统日益紧密的结合,扩展到网页、HTA,甚至文本文件中。脚本语言是介于HTML和Java、C+和Visual Basic之类的编程语言之间的语言。脚本语言需要一个脚本语言引擎解释执行脚本语言编写的程序。主要的脚本语言包括活动服务器页面(Active Server Pages)、微软可视化BASIC脚
15、本语言(Microsoft Visual Basic Scripting Edition)、Java Script、PHP、REXX、PERL等等。脚本语言的功能越来越强大,现代的脚本语言基本上可以完成所有的文件系统操作,所以使用脚本语言的病毒的出现也就成为必然。 脚本病毒主要有以下几种类型:基于JavaScript的脚本病毒,基于VBScript的脚本病毒(很多宏病毒其实就属于这一类),基于PHP的脚本病毒,脚本语言和木马程序结合的病毒。1.3.2 与病毒相关的几个概念与病毒相关的几个概念v3 3蠕虫(蠕虫(WormWorm)蠕虫是一个程序,它进入计算机网络,利用空闲的处理器去测定网络中的计
16、算机跨度。蠕虫程序由许多段构成,在其主段的控制下,蠕虫的某个段运行在单独的计算机上。蠕虫典型的传播方式是依靠网络的漏洞,利用网络或电子邮件方式由一台计算机传播到另一台计算机,靠将自身向其他计算机提交来实现再生,并不将自身寄生在另一个程序上。 本来蠕虫是作为分散式计算领域中研究的一部分而被编写的,没有破坏安全的意图,也不隐藏其出现或运作(蠕虫也可以用重写某特定内存区的方法进行破坏,在蠕虫运行中也可以破坏程序,蠕虫通常造成的后果是网络阻塞,甚至由此造成系统崩溃)。所以,一般而言,蠕虫本身并不被当作传统的计算机病毒。但是现在,蠕虫被病毒的制造者们加以利用,很多带有蠕虫性质的计算机病毒被制造出来,它们
17、实际上是蠕虫和病毒的混合体,既有蠕虫的在网络上繁殖的功能,又有病毒的寄生和破坏的功能,比如1999年出现,之后流行了几年的Melissa病毒、“求职信”病毒、“杀手13”病毒等等。 目前在流行的恶性病毒中,有90%以上的病毒是蠕虫病毒。1.3.2 与病毒相关的几个概念与病毒相关的几个概念v 4 4木马(木马(Trojan HorseTrojan Horse) 所谓特洛伊木马程序,是指一种程序,从表面看是正常程序,可以执行明显的正常功能,但也会执行受害者没有预料到的或不期望的动作。 通常木马并不被当成病毒,因为它们通常不包括感染程序,因而并不自我复制,只是靠欺骗获得传播。现在,随着网络的普及,木
18、马程序的危害变得十分强大,如今它常被用作在远程计算机之间建立连接,像间谍一样潜入用户的计算机,使远程计算机通过网络控制本地计算机。 按照木马程序对计算机的不同破坏方式,可以把现在的木马程序分为以下几类:远程访问型、密码发送型、键盘记录型、毁坏型和FTP型。 例如,1989年美国人类学家鲍伯博士编写了一个特洛伊木马程序,复制逾万片免费邮送到世界各地,但在说明书中要挟用户,使用之前必须向他支付378美元,否则将会损坏用户的其他程序。这个程序是一个有关医学研究爱滋病信息的数据库,平时,该数据库的确是一个正常的有用数据库。但是,当用户启动该数据库90次时,突然它将磁盘上的所有文件加密。从2000年开始
19、,计算机病毒与木马技术相结合成为病毒新时尚。1.3.2 与病毒相关的几个概念与病毒相关的几个概念v5 5后门(后门(BackdoorBackdoor) 后门是程序或系统内的一种功能,它允许没有账号的用户或普通受限用户使用高权限访问甚至完全控制系统。后门在程序开发中有合法的用途,有时会因设计需要或偶然因素而存在于某些完备的系统中。后门不是计算机病毒,但显然后门也会成为别有用心者的利器。 1.3.2 与病毒相关的几个概念与病毒相关的几个概念1.4 计算机病毒的发展简史 1949年,计算机之父冯诺依曼在复杂自动机组织论中提出“一部事实上足够复杂的机器能够复制自身”。 20世纪60年代初,美国贝尔实验
20、室里“磁芯大战”的游戏。 1975年,Shock Wave Rider(John Bruner)出现了“Virus”一词。1981年,世界上诞生了真正意义上的计算机病毒Elk Cloner,这个病毒将自己附着在磁盘的引导扇区上,通过磁盘进行感染。1983年11月3日,美国计算机安全学术讨论会上,Frederick Cohen博士首次提出计算机病毒的概念。同一天,专家们在VAX11/750计算机系统上验证了计算机病毒的存在。在其后的一周内,在5次病毒试验中,平均30分钟病毒就可使计算机系统瘫痪。1.4 计算机病毒的发展简史1986年底,病毒Brain开始流行。Brain病毒首次使用了伪装的手段来
21、迷惑计算机用户。1987年10月,美国新闻机构报道了这一事件。在这一年,中国的公安部成立了计算机病毒研究小组,并派出专业技术人员到中科院计算所和美国、欧洲进修、学习计算机安全技术,标志着计算机病毒引起了中国政府的警惕。 1987年,DOS环境下的文件型病毒得到了很大的发展。出现了能自我加解密的病毒Cascade,Stoned病毒和PingPong病毒等等。同年12月份,第一个网络病毒Christmas Tree开始流行。1.4 计算机病毒的发展简史 1988年11月2日,美国康奈尔大学的学生Morris将自己编制的蠕虫程序在几小时内造成Internet网络的堵塞,6000多台计算机被感染,造成
22、巨大的损失。在美国,仅1988年中,就约有9万台计算机遭计算机病毒入侵。人民日报就Morris 事件报道了关于病毒的事件。 同时,反病毒技术也已经开始成熟了,所罗门公司的反病毒工具Doctors Solomons Anti-Virus Toolkit成为当时最强大的反病毒软件。 1989年,病毒家族开始出现了,比如Yankee病毒,Eddie病毒,Frodo病毒(第一个全秘密寄生的文件病毒)。同年出现了名为AIDS的特洛伊木马型病毒。1.4 计算机病毒的发展简史1989年4月西南铝厂首先发现小球病毒,计算机病毒开始侵入我国。1989年7月,中国公安部推出了中国最早的杀毒软件Kill 6.0。
23、1990年,出现了第一个多态病毒Chameleon、使用多级加密解密和反跟踪技术的病毒Whale等,可以用于开发病毒的工具软件Virus Production Factory,专门为病毒制造者开设的进行病毒信息交流和病毒交换的BBS。 1990年,中国出现了基于硬件的反病毒系统华星防病毒卡。 1991年,发现了复合多态病毒Tequila;不存在于某个文件或引导扇区中的DIRII病毒;攻击网络的GPI病毒等。这一年,反病毒公司也得到了发展壮大,Symantec和Central Point两个重要的工具软件开发商开始介入杀毒市场。中国的瑞星公司成立,推出了瑞星防病毒卡。1992年,多态病毒生成器“
24、MtE”开发出来,病毒构造工具集Virus Create Library开发成功。在芬兰发现了首例Windows病毒。1.4 计算机病毒的发展简史1995年8月9日,在美国首次发现专门攻击Word文件的宏病毒Concept。 1997年2月,第一个Linux环境下的病毒Bliss出现。1997年4月,第一个使用FTP进行传播的Homer病毒出现。1998年6月,CIH病毒被发现。这一年也出现了远程控制工具“Back Orifice”、“Netbus”等,第一个感染Java可执行文件的Strange Brew病毒,用实用VB脚本语言编写的Robbit病毒。 1999年,通过邮件进行病毒传播开始成
25、为病毒传播的主要途径,而宏病毒仍然是最流行的病毒。这一年,比较有名的病毒有:Melissa,Happy99;FunLove等等。1993年、1994年,采用密码技术、编写技巧高超的隐蔽型病毒和多态性病毒相继出现,也出现了感染源代码文件的SrcVir病毒和感染OBJ文件的Shifter病毒。1.4 计算机病毒的发展简史2000年被称作VBScript病毒/蠕虫之年。大量使用脚本技术的病毒出现,脚本技术和蠕虫、传统的病毒、木马程序以及操作系统的安全漏洞相结合,给病毒技术带来了一个新的发展高峰。最著名的如VBS/KAK蠕虫,Loveletter病毒。 2000年,中国的金山公司发布金山毒霸,金山公司
26、开始进入杀毒软件市场。 2001年7月出现了Code Red和 Code Red II,9月出现的Nimda病毒突破了以往病毒的各种传播途径,它们会利用微软服务器漏洞植入后门程序的特洛伊木马,或是通E-mail大肆传播、衍生无数变种的计算机蠕虫,也有可能是通过浏览网页下载病毒,甚至三者兼具,造成了大范围的因特网上的服务器被阻断或访问速度下降,在世界范围内造成了巨大的损失。仅Code Red病毒所造成的经济损失,就远远超过过去6年来任何一年的年度损失。1.5 计算机病毒在我国的发展简况v开始时传播速度和范围没达到西方的规模,时间上滞后。v随着计算机网络在中国的普及,计算机病毒在中国的出现逐步与世
27、界“接轨”。v中国越来越多地出现了“国产病毒”(“新世纪”、“中国炸弹”、“冰河”等)v防病毒的水平相对较差。1.6 计算机病毒的产生及相计算机病毒的产生及相关社会问题关社会问题按照病毒编造者的目的,病毒大概有以下几种来源: 1研究、兴趣等目的;2游戏、恶作剧、表现欲等目的;3软件保护目的;4破坏、报复目的;5军事目的制造计算机病毒者,归纳起来有6类人: 1学生、研究生和学者 ; 2玩家; 3电脑学会4软件商; 5 职员; 6恐怖组织1.7 计算机病毒防治的基本方法v利用相应的检测和杀毒软件v手工检测、杀除、预防计算机病毒 假定或猜测过程确认过程分析过程解决过程计算机病毒演示DOS环境下的病毒
28、演示v火炬病毒v救护车病毒vRescuevSuicide火炬病毒v该病毒发作时,在屏幕显示五把燃烧的火炬。同时,该病毒用内存的随机数从硬盘的物理第一扇区开始覆盖,造成硬盘中的数据丢失。Rescue病毒v病毒发作时,显示一些图形和文字。Suicide病毒v该病毒发作时,在屏幕上显示一幅图形,告诉你的机器已经被该病毒感染。救护车病毒v该病毒发作时,从屏幕左下角有一辆救护车跑过。宏病毒演示vDMV病毒vAliance病毒vLaroux病毒vConcept病毒DMV病毒v该病毒据说是第一个宏病毒,属于实验性的,无破坏性。Aliance病毒v该病毒发作时,显示一个对话框。Laroux病毒v该病毒感染Wi
29、ndows Excel文档,图中显示的是病毒的宏名。Concept病毒v该病毒感染Win Word后,将在屏幕上弹出一个对话框。其他新型病毒Active X病毒 JAVA病毒HTML病毒手机病毒掌上型移动设备病毒病毒与黑客程序结合的有害程序。第2章 计算机病毒的相关DOS基本系统知识v2.1 磁盘结构与组织v2.2 DOS的组成、启动及内存分配v2.3 中断及其处理过程v2.4 .COM文件和.EXE文件结构和其加载机制v2.5 一个简单的引导程序2.1 磁盘结构与组织磁盘是微型计算机程序和数据广泛使用的存储介质,也是计算机病毒传播、入侵的主要对象之一。因此,了解磁盘的结构及其数据组织的特点,
30、对于检测和防治计算机病毒具有十分重要的意义。 2.1 磁盘结构与组织 软盘结构与数据组织(1)软盘结构与存储方式(2)物理扇区和逻辑扇区(3)DOS磁盘组织 硬盘结构与数据组织(1)硬盘的结构(2)硬盘的数据组织(3)主引导扇区(4)DOS分区和DOS引导扇区(5)文件分配表(6)文件目录表2.2 DOS的组成、启动及内存分配DOS系统基本程序模块由以下几个部分组成(以MS-DOS为例):(1)引导程序(BOOT)。它驻留在系统盘的0面0道l扇区,在启动计算机时,它首先被自动读入内存,然后由它负责把DOS的其他程序调入内存。(2)BOM中的ROMBIOS。它提供对计算机输入输出设备进行管理的程
31、序,被固化在主机板上的ROM中,是计算机硬件与软件的最低层的接口。(3)输入输出管理IO.SYS模块。其功能是初始化操作系统,并提供DOS系统与ROM BIOS之间的接口。()核心MSDOS.SYS模块。它主要提供设备管理、内存管理、磁盘文件及目录管理的功能,这些功能可以通过所谓的系统功能调用INT 21H来使用,它是用户程序与计算机硬件之间的高层软件接口。()命令处理COMMAND.COM模块。它是DOS调入内存的最后一个模块,它的任务是负责接收和解释用户输入的命令,可以执行DOS的所有内、外部命令和批命令。它主要由部分组成:常驻部分、初始化部分和暂驻部分。2.2 DOS的组成、启动及内存分
32、配 用户命令 用户 COMMAND.COM MSDOS.SYS 用户程序 IO.SYS ROM BIOS 引导程序 硬件 磁盘启动 图图2.32.3用户同用户同DOSDOS及及DOSDOS四大程序模块之间的执行关系和层次关系图四大程序模块之间的执行关系和层次关系图DOS的启动过程主要有以下一些步骤:(1)在系统复位或加电时,计算机程序的指令指针自动从内存地址0FFFF:0000H外开始执行,该处含有一条无条件转移指令,使控制转移到系统的ROM板上,执行ROM BIOS中的系统自检和最初的初始化工作程序,以及建立INT 1FH以前的中断向量表。如果自检正常,则把系统盘上存于0面0道1扇区的系统引
33、导记录读入内存地址0000:7C00H,并把控制权交给引导程序中的第一条指令。(2)引导记录用于检查系统所规定的两个文件IO.SYS和MSDOS.SYS是否按规定的位置存于启动盘中,如符合要求就把它们读入内存地址0060:0000H,否则启动盘被认为不合法,启动失败。 (3)IO.SYS与MSDOS.SYS被装入内存以后,引导记录的使命即完成,控制权交给IO.SYS,该程序完成初始化系统、定位MSDOS.SYS以及装入COMMAND.COM等工作。其主要过程是:建立新的磁盘基数表并修改INT lEH向量地址指向该磁盘基数表。初始化异步通信口R5-232和打印机口。修改0lH,03H,04H和1
34、BH中断入口。调用INT 11H及INT l2H确定系统的硬件配置和内存RAM容量。将系统初始化程序移到内存高端并将MSDOS.SYS程序下移占据其位置。控制权交给MSDOS.SYS。MSDOS.SYS是DOS的核心部分,它在接受控制以后,也进行一系列的初始化工作,这些工作包括:初始化DOS内部表和工作区、初始化DOS的中断向量20H2EH、建立磁盘输入输出参数表以及设置磁盘缓冲区和文件控制块等。完成这些工作以后,继续执行IO.SYS的系统初始化程序。初始化程序检查系统盘上的系统配置程序CONFIG.SYS,如果存在,则执行该程序,按配置命令建立DOS的运行环境:设置磁盘缓冲区大小、能同时打开
35、的句柄文件个数、加载可安装的设备驱动程序等。将命令处理程序COMMAND.COM程序装入内存,并把控制权交给该程序。至此IO.SYS文件的使命即告完成。(4)命令处理程序在接受控制以后,重新设置中断向量22H、23H、24H和27H入口地址,然后检查系统盘上是否存在AUTOEXEC.BAT文件。若系统盘上不存在该文件,则显示日期和时间等待用户输入,显示DOS提示符。若存在该文件,则程序转入暂驻区,由批处理程序对其进行解释和执行,执行完成后显示DOS提示符。至此,DOS的整个启动过程全部结束,系统处于命令接受状态。系统自检冷启动热启动A驱动器有盘否?有系统文件么?显示无系统盘并提示换盘换盘并按任
36、意键C盘上有系统文件么?装入系统文件并进行系统初始化进入ROM BASIC启动盘上有CONFIG.SYS?启动盘上有AUTOEXEC.BAT?执行CONFIG.SYS文件显示DOS提示符询问日期和时间执行AUTOEXEC.BAT文件NYNY YNYNN系统加电YCtrl+Alt+Del图图2.42.4 DOS的启动过程图的启动过程图DOS启动后,内存的组织即分配如图2.6所示,该图仅说明了DOS在基本内存(640KB)运行时的内存分配状态。在计算机通常的工作方式(实方式)下,总体上来说,DOS可以管理的内存空间为1 MB。此l MByte空间可分为两大部分,一部分是RAM区,另一部分则是ROM
37、区。而RAM区又分为系统程序、数据区和用户程序区两部分。由于DOS的版本不同,DOS系统文件的长度就不同,从而驻留在内存中的系统程序占用的内存空间也就不同,这样用户程序区的段地址就是一个不确定的值。 从内存绝对地址0040:0000H0040:00FFH开始存放一些重要的数据,这些数据是由ROM BIOS程序在引导过程中装入的,记录了有关系统的设备配置和存储单元的系统参数,它们是提供给ROM BIOS例行程序在进行设备操作时必备的重要数据。其中地址为40:1340:14的两个字节存放了以lKB为单位的内存总容量(含存储扩展板容量),例如640 KB RAM为280H。有些病毒程序通过调入内皴高
38、端并修改40:1340:14内存而驻留内存;地址为40:6C40:6F的4个字节为时钟数据区;前两个字节(40:6C40:6D)为065535之间的一个数,由8253定时器每55 ms调1NT 8H使数值加1;后两个字节(40:6E40:6F)为小时数,当计数值满65 535时(恰好1小时),小时数加1。病毒常通过调用这一时钟数据来检测激活的时机是否成熟。 图图2.5 DOS2.5 DOS内存分布图内存分布图2.3 中断及其处理过程1. 中断的概念2. 中断优先权3. 中断向量表4. 中断处理过程5. 与病毒有关的中断 1. 中断的概念 1. 中断的概念中断的概念所谓中断,是指CPU对系统中发
39、生的无一定时序关系的随机事件的响应,也就是在CPU工作过程中,当出现某种较为紧急的事件时,令CPU暂时停止当前的工作,转去执行处理此事件的程序。该处理程序完成该做的工作后,立即返回断点,CPU继续执行原程序。这个过程叫做中断。中断是CPU处理外部突发事件的一个重要技术。使用中断,系统可在分时处理、实时操作、故障处理等方面得到提高。引起中断的原因或者说发出中断请求的来源叫做中断源。根据中断源的不同,可以把中断分为硬件中断和软件中断两大类,而硬件中断又可以分为外部中断和内部中断两类。 2. 中断优先权CPU为了处理并发的中断请求,规定了中断的优先权,中断优先权由高到低的顺序是:除法错,INT 0H
40、(溢出中断),INT nH(软件中断);不可屏蔽中断;可屏蔽中断;单步中断。 3. 中断向量表为了有效地管理各种中断,系统初始化之后在内存的最低端建立了一张中断向量表,它占有0000H到03FFH的1K地址空间。该表用来存放各种中断程序的入口地址,每一中断向量的入口地址占有4个字节,高两字节存放中断向量的段地址,低两字节存放中断向量的偏移地址。整个中断向量表中可以存放256个中断向量地址,编号从00到255。4. 中断处理过程首先是中断源发出中断请求,由中断控制机构把各中断请求汇集起来,按中断优先级别排队,选取一个级别最高的中断请求;而CPU硬件中,每执行完一条指令或开始取一条指令前,检查有无
41、中断请求,如出现中断请求,CPU先确定好中断类型,然后进行如下几方面的工作: (1)把状态标志进栈保护; (2)0IF(即:清除标志IF,禁止跟踪),0TF(清除标志TF,禁止中断); (3)根据中断类型号计算中断向量入口地址在向量表中的位移,计算的方法是:位移中断类型号4,由此获得中断向量的入口地址(段地址和偏移地址);(4)保护断点,把当前代码段寄存器的内容进栈保护,将中断向量的段地址送CS;把当前指令指针入栈保护,将中断向量的偏移地址送IP,于是,程序就转到了中断服务程序; (5)进入中断服务程序之后,一般要保护现场(寄存器压栈),然后进行中断服务,在中断返回前要恢复现场(寄存器弹栈),
42、最后用STI开中断,并用IRET恢复断点处的标志寄存器、CS和IP的值。 5.与病毒有关的中断 INT 8H时钟中断 INT 10H显示器驱动程序 INT l3H磁盘IO中断 INT lAH日期/时钟I/O中断 INT lCH定时器断续中断 INT 20H程序正常结束中断和INT 27H退出且驻留中断 INT 24H标准错误处理程序入口地址中断 INT 25H、INT 26H磁盘逻辑扇区读写中断 INT 21H系统功能调用 2.4 .COM文件和.EXE文件结构和其加载机制v文件型病毒专门入侵可执行文件。在DOS状态下,可执行文件共有两种:.COM和.EXE文件。可执行文件是计算机病毒传染的主
43、要对象之一。病毒往往用附加或插入的方式隐藏在可执行程序文件中,或者采取分散及多处隐藏的方式,当病毒程序潜伏的文件被合法调用时,病毒程序也合法进入运行,并可将分散的程序在其非法占用的存储空间进行装配,构成完整的病毒体后进入运行状态。进入运行状态的病毒再去扩散感染其他文件,以致磁盘所有可执行文件均被感染甚至文件被毁坏。 1. 程序段前缀(程序段前缀(PSP)v在DOS状态下,当输入一个可执行文件名或在运行中的程序中通过EXEC子功能加载个程序时,COMMAND确定当前内存空间的最低端作为被加载程序的段起点,在该处建立个所谓的程序段前缀控制块,其中存放有关被加载程序运行时所必需的一些重要信息和其他有
44、关内容,其长度为256个字节,用来沟通DOS用户程序和命令行之间的联系。程序段前缀的一般结构如图2.6所示。 10H 8H 0H 80H 100H程序中止INT 20H内存的顶保留DOS功能长调用(第5字节)结束地址(IPCS)Ctrl+Break引出地址(IP)Ctrl+Break引出地址(IP)标准错误输出地址(IPCS) DOS系统2CH包含有环境的段地址 使用 5CH已格式化的参数区 已格式化的标准未打开文件控制块FCB1 6CH已格式化的参数区 已格式化的标准未打开文件控制块FCB2 (若5 CH处FCB1已打开,则覆盖此处) 未格式化的参数区 默认的磁盘传输区(DATA)图图2.6
45、2.6 程序段前缀程序段前缀PSPPSP的结构图的结构图程序段前缀主要包括以下几部分:(1)程序出口(2)调用文件的信息(3)功能调用代码(4)环境块段地址(5)磁盘传输区程序段前缀为程序运行提供了必要的信息和存放信息的空间。2. COM文件的结构及其加载文件的结构及其加载vCOM文件结构简单,磁盘上对应于该文件的所有信息都是要被加载的对像,没有控制加载信息。DOS在加载.COM文件时,在内存当前空间的最低端建立一个相应的PSP,然后紧靠PSP的上方将磁盘上.COM文件的所有内容装入,并把控制转向PSP的100H偏移处,运行该文件。 v加载.COM文件后,CPU内部寄存器的初始值被固定地设置成
46、如下状态:4个段寄存器CS、ES、DS、SS都指向PSP的段;指令指针IP的值被设置指向0100H;堆栈指针寄存器SP的初始位被设置成FFFFH或当前可用内存字节数减2;堆栈的栈顶放入一个字0000H,为.COM文件以RET返回DOS作准备;BXCX寄存器的内容含有.COM文件的长度,一般情况下BX等于0。3 .EXE文件的结构及其加载文件的结构及其加载v .EXE文件的结构v .EXE文件比较复杂,它允许代码、数据、堆栈段分别处于不同的段,每一个段都可以是64KB。当生成一个.EXE文件时,存放在磁盘上的执行代码凡是涉及到段地址的操作数都尚未确定,在DOS加载该程序时,需要根据当前内存空间的
47、起始段值对每一个段进行重定位,使这些段操作数具有确定的段地址。因此,存放在磁盘上的.EXE文件一般都由两部分内容组成:一部分是文件头;另一部分是装入模块。v文件头位于.EXE文件的首部,它包括加载.EXE文件时所必需的控制信息和进行段重定位的重定位信息表。重定位表中含有若干个重定位项,每一项对应于装入模块中需进行段重定位的一个字,每个重定位项占有4个字节,这4个字节表示一个全地址(段地址和偏移量),其中高两字节给出某个需做段重定位字的段值,低两字节则给出其偏移量,这里的段值和偏移量,是相对于程序正文段而言的。文件头通常的长度是512字节的整数倍,重定位的项数越多,其占用的字节数越多。.EXE文
48、件头的一般结构如表2.11所示。 偏移值(十六进制)字段含义01EXE文件的标志:4DH、5AH23最后一个扇区的字节数45包含文件头在内的文件页数(以512字节为一页)67重定位的项数89文件头的节数(16字节为一节)0A0B程序运行所需最小节数0C0D程序运行所需最大节数0E0F被装入模块中堆栈段相对段值1011被装入模块初始的SP值1213文件所有字的累加和1415被装入模块初始的IP值1617被装入模块代码段的相对段值1819重定位表第一个重定位项的偏移1A1B覆盖号,如果程序驻留则为0 可变保留区 重定位表,其起始位置由18H19H处指出 可变保留区表表2.11 EXE2.11 EX
49、E文件头的一般结构文件头的一般结构 3 .EXE文件的结构及其加载文件的结构及其加载v.EXE文件的加载过程 DOS在加载一个.EXE文件时,一般要经过以下各步:在内存的最低端建立PSP。计算装入模块的长度,把文件头的1BH字节读入内存,把文件的页长度换算成节长度,减去文件头所占的节长度,其结果是装入模块的节长度,将此节长度减去最后一个扇区的节长度20H,所得的差值乘以16再加上最后一个扇区的实际字节数,即是被装入模块的实际字节长度;把被装入模块读入内存起始段开始的内存中,或是由用户定义的内存段地址开始的内存中;把重定位表读入内存工作区,根据重定位表中的表项,对装入模块中的重定位字进行重定位修
50、改操作;确定有关寄存器的初始值,把寄存器ES和DS设置成程序段前缀的段地址,将文件头中的值设置到寄存器IP、CS、SS和SP中,并把起始段值分别加到DS和SS中去,这样,程序便从CS:IP被设定的地址开始执行。 2.5 一个简单的引导程序第3章 计算机病毒的结构及作用机制v3.1 计算机病毒的结构组成v3.2 病毒的引导部分v3.3 病毒的感染部分v3.4 病毒的表现(破坏)部分v3.5 脚本病毒和邮件病毒的运行机制v3.6 病毒的隐藏(欺骗)技术v3.7 新一代计算机病毒的特点及发展趋势3.1 计算机病毒的结构组成图图2 2.1 .1 计算机病毒程序结构计算机病毒程序结构引导模块引导模块感染