计算机病毒分析与防范大全(第3版)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

第二篇 计算机病毒分析

第4章 追根溯源——传统计算机病毒概述

4.1 早期的DOS病毒介绍

4.1.1 DOS操作系统简介

DOS(Disk Operating System)是磁盘操作系统的英文缩写。1981年,微软正式发布MS-DOS 1.0。1983年3月,微软公司发布了MS-DOS 2.0,这个版本与以前相比有了很大改进,它可以灵活地支持外部设备,同时引进了UNIX系统的目录树文件管理模式。后来,MS-DOS渐渐成为了16位操作系统的标准。

MS-DOS的最后一个版本是6.22版,这以后的DOS就和Windows相结合了。6.22版的MS-DOS已经是一个十分完善的版本,其众多的内部、外部命令使用户可以比较简单地对电脑进行操作,此外其稳定性和可扩展性也都十分出色。

DOS操作系统具有文件管理方便、外设支持良好、兼容性好和小巧稳定等优点。但与此同时,DOS是一个单用户、单任务的操作系统,因此使用起来有很大的局限性。此外,DOS采用不直观的字符操作界面,对多媒体的支持也很有限,所以,DOS系统后来逐渐退出了历史舞台,并被Windows操作系统所代替。

4.1.2 DOS病毒

DOS病毒是指针对DOS操作系统开发的病毒,是出现最早、数量最多、变种也最多的计算机病毒。由于Windows操作系统的出现,病毒制造者大多已经不再制作新的DOS病毒了,因此,DOS病毒几乎绝迹。DOS病毒大多数只能在DOS环境下运行和传染。但某些DOS病毒在Win9x环境中仍可以进行感染活动,因此若执行染毒文件,Win9x用户也会被感染。有相当一部分DOS病毒可在Windows的DOS窗口下运行并传播。一部分DOS病毒在Windows下运行时,可能会导致系统死机或程序运行异常。

目前发现的所有病毒中有一半以上都是DOS病毒,虽然DOS病毒数量众多,但是无论从破坏程度还是从传播速度上来讲,都无法与诸如蠕虫、漏洞攻击类病毒相提并论。大部分DOS病毒都是制造者通过对公开代码进行一定变形而制作的恶作剧,这些病毒的绝大部分是感染DOS可执行文件,如:EXE文件,COM文件,或者是BAT文件等。此外,大部分DOS病毒都有一个共同的特性,即通常在特定条件下发作,破坏性比较严重的病毒会破坏硬盘中的重要资料,甚至重新格式化(Format)硬盘。比如,米开朗基罗病毒在每年3月6日发作,当用户开机时,病毒会对用户的硬盘进行格式化。

早期常见的以日期为发作条件的病毒的发作现象如表4-1所示。

表4-1 以日期为发作条件的病毒发作现象

由于Windows等图形界面操作系统的开发和普及,DOS操作系统已经逐渐退出了历史舞台,攻击DOS系统的病毒也随之越来越少。虽然现在新开发的DOS病毒几乎绝迹,但是,DOS病毒在反病毒的历史上仍然占有不可替代的地位。

4.2 Office杀手——宏病毒

4.2.1 什么是“宏”

宏(Macro)是微软公司出品的Office软件包中所包含的一项特殊功能。微软设计此项功能的主要目的是给用户自动执行一些重复性的工作提供方便。它利用简单的语法,把常用的动作写成宏,用户工作时,就可以直接利用事先编好的宏自动运行,以完成某项特定的任务,而不必反复重复相同的动作。

我们在使用Word时使用的通用模板(Normal.dot)里面就包含了基本的宏。只要一启动Word,就会自动运行Normal.dot文件。如果在Word中重复进行某项工作,可利用宏使其自动执行。现在很多大公司都比较注重企业形象,在对内、对外发放的文档中都要在页眉或页脚处加入公司的LOGO和联系方式,为了避免在每次编辑文档时反复添加这些内容,可以只对Normal.dot进行编辑,完成编辑后,当用户再次运行Word创建任何一个文档时都会含有Normal.dot中的惯用选项,这样就大大简化了工作,方便了用户的使用。如图4-1所示,除了Normal.dot以外,Word还提供了很多其他的模板,如我们日常使用的邮件、传真、简历等。

图4-1 Word常用模板

Office中为Word提供了两种创建宏的方法——宏录制器和Visual Basic编辑器。宏将一系列的Word命令和指令组合在一起,形成一个命令,以实现执行任务的自动化。

微软的Word Visual Basic for Application(VBA)是宏语言的标准。随着应用软件的进步,宏语言的功能也越来越强大。利用宏语言不仅可以实现几乎所有的操作,还可以实现一些应用软件原来没有的功能。每个模板或数据文件中都可以包含宏命令。

4.2.2 宏病毒的定义

宏病毒正是利用Word VBA进行编写的一些宏(早期的宏病毒都是用Word VBA语言编写的),不过这些宏的应用不是为了给人们的工作提供便利,而是会破坏文档,使人们的工作遭受损失。宏病毒是一种寄存在文档或模板的宏中的计算机病毒,是利用Microsoft Office的开放性(即Word中提供的VBA编程接口)专门制作的一个或多个具有病毒特点的宏的集合。例如,W2KM.PSD.DOC病毒(发作现象如图4-2所示),当日期和分钟数相同时,会在word文档中随机添加n个n种颜色的n边形(n为随机数量),严重地干扰用户正常地编辑文档。

一旦打开含有宏病毒的文档,其中的宏就会被执行,于是宏病毒就会被激活,转移到计算机中并驻留在Normal模板上。从此以后,所有自动保存的文档都会“感染”上这种宏病毒,而且如果其他用户打开了感染了病毒的文档,宏病毒又会转移到该用户的计算机上。

图4-2 宏病毒的发作现象

4.2.3 宏病毒的特点

第一个宏病毒出现在1995年,大面积暴发并造成较大危害的宏病毒是著名的“台湾一号”病毒。在病毒最为猖獗的1997年,高峰时每周甚至有近千个新的病毒出现,其中绝大多数都是宏病毒,因此,1997年也被称之为“宏病毒年”。那时,宏病毒可以算是比较“先进”的病毒,传播方式也比较独特。

综合来看,宏病毒有以下几个特点。

(1)病毒原理简单,制作比较方便。

宏病毒用Word VBA语言编写,Word VBA语言提供了许多系统级底层调用,如直接使用DOS系统命令,调用Windows API,调用DDE、DLL等。这些操作均可能对系统直接构成威胁。目前,世界上的宏病毒原型已有几十种,大部分Word宏病毒并没有使用Word提供的Execute—Only处理函数处理,它们仍处于可打开阅读修改状态。就算没有宏病毒编写经验的人也可以轻易地改写出宏病毒的变种。

(2)传播速度相对较快。

Word宏病毒通过DOC文档及DOT模板进行自我复制及传播,并且利用互联网、电子邮件大面积传播。由于初期使用者对Word软件本身的特性不了解,对外来的文档、文件基本是直接浏览使用,这就给Word宏病毒传播带来了很多便利的条件。

(3)病毒宏中必然含有对文档读写操作的宏指令。

(4)宏病毒在DOC文档、DOT模板中以BFF(BinaryFileFormat)格式存放。

4.2.4 宏病毒的发作现象及处理

图4-3所示是被宏病毒感染后的Word文件中的病毒体。

图4-3 被宏病毒感染后的Word文件中的病毒体

图4-3中矩形框标注的部分是病毒在修改注册表中保存的Word的安全级别,其注册表路径为:

HKEY_CURRENT_USER\Software\Microsoft\Office\xxxx\Word\Securtiy。椭圆形标注的部分是宏病毒要传播的代码。其中引用了NormalTemplate对象,此对象对应的就是Normal.dot文件。病毒感染此模板文件后,每当新建一个Word文件时,文件就会带有病毒体了。因此,只要在Word宏中发现了类似这两处中的任意一处的标记,就可以基本上判定此文件已经被病毒感染。

宏病毒虽然已不再是目前的主流病毒,但是,如果用户使用的Office软件版本较低,或者经常与朋友或客户交换文档资料,那么,最好仔细回想或检验一下,是否发生过下面的情况:

(1)尝试保存文档时(如图4-4所示),Word只允许将文档保存为文档模板的格式(*.dot)。

(2)Word文档图标的外形类似模板图标而非文档图标。文档图标与模板图标的区别如图4-5所示。

图4-4 Word只允许将文档保存为文档模板格式

图4-5 文档图标与模板图标

(3)在工具菜单上指向宏并单击宏后,程序无任何响应,或工具菜单上不再显示宏或自定义菜单项。

(4)宏列表中出现新宏(在工具菜单上,鼠标指向宏,然后单击宏)。例如,如果带有诸如AutoOpen、AutoNew、AutoExec、FileSaveAs这样一些名称的宏,或一些名字很怪的宏,如AAAZAO、PayLoad等,就说明极有可能是感染了宏病毒,因为Normal模板中是不包含这些宏的。

(5)打开Word文档或模板时显示异常或意外消息。

(6)如果打开一个文档后未经任何改动,立即就有存盘操作,也有可能是因为该Word文档带有病毒。

如果在使用文档时出现过上述现象,那么很可能是由于感染了宏病毒。除了用最新的杀毒软件产品查杀病毒外,还可以按照微软官方推荐的以下方法进行简单处理:

(1)在打开怀疑感染了宏病毒的文件时按住Shift键。如果在打开文档或模板时按住Shift键(或在启动Word时按住Shift键),将避免宏自动运行;如果存在宏病毒,将不会加载宏。

(2)可利用管理器重命名Normal.dot或删除宏列表中的可疑的宏(如图4-6所示)。

图4-6 重命名Normal.dot或删除宏列表中的可疑的宏

(3)将文件插入新文档。启动Word,打开一个新的空白文档。在插入菜单上,单击文件。选中受影响的文件,然后单击打开。删除宏列表中可疑的宏。用另一个文件名保存新文档,然后删除受感染的文件。

当然,最简便的方法还是用最新版的杀毒软件对宏病毒进行查杀。

4.2.5 典型的宏病毒——“七月杀手”病毒

“七月杀手”病毒是一个典型的宏病毒。该病毒是一种具有极大的隐蔽性和破坏性的,由国内黑客编写的中文Word 97宏病毒。

1.“七月杀手”病毒的破坏和表现

顾名思义,“七月杀手”病毒是一个以日期为触发条件的宏病毒,只感染Office 97和Office 2000产生的Word文件。“七月杀手”病毒在7月1日至31日期间发作,在此期间,受到病毒感染的用户在使用Word时,病毒会弹出一个标题为“醒世恒言”的简体中文对话框,框内的文字含有一些非常偏激的话,如“当今世界太黑暗,太不公平”等,病毒逼迫用户用“确定”键表示与其观点一致,如果一直选择“确定”,将会出现“恭喜你是个智者”的对话框,如果连续3次选择“取消”,将会出现“现在,上帝就要惩罚你……”的文字。该病毒会让用户硬盘中C盘根目录下的自动批处理文件“Autoexec.bat”将原来内容全部删除,并写进一个具有破坏性的命令代码:“deltree/y c:\”,从而当用户再次启动计算机时,用户C盘下的所有文件都将被删除,致使计算机系统无法启动。该病毒是一种非常有害的恶性病毒。

2.“七月杀手”病毒的机理

该病毒能感染Word 97和Word 2000中的DOT及DOC文件,感染通用模板文件Normal.dot,并通过它来感染其他未被感染的或新建立的DOC文件。它与其他宏病毒的不同之处在于:当首次打开带毒的文件时,病毒会在C盘根目录下复制一个名为Autoexec.dot的病毒附本,该文件中隐藏着该病毒的所有代码。

当Word运行时,会自动调用Autoexec.dot文件,此时病毒会被激活,从而抢先感染通用模板文件Normal.dot,该病毒会自动关闭Word系统“工具”中的“宏”、“模板和加载项”及“自定义”项,因而使用户看不到当前Word文档的宏病毒,所以不能使用简单的“手工删除”方法来删除宏病毒。此外,该病毒还会“以毒攻毒”,若文件中还有其他宏病毒,它会将其杀掉,从而独霸计算机。

3.“七月杀手”处理建议

根据该病毒的特性,如果用户的系统中没有安装杀毒软件,可以将电脑的系统时间临时改为7月之前或7月之后,以避开病毒的激发日期。此外,为了防止该病毒使用Deltree命令进行破坏,可以将电脑中的C:\windows\command\deltree.exe改为其他名称。如果已经感染了“七月杀手”病毒,那么当该病毒发作时,应连续按下“确定”键,以避免病毒的激发,如果误按下“取消”键,应立即将C盘根目录下Autoexec.bat文件中的Deltree命令行删除。然而最彻底的方法是使用带有实时监控的查杀病毒软件,这样做既可将病毒完全清除,又可在该病毒入侵系统前彻底对系统进行查毒,使病毒根本无法进入系统。

4.2.6 防范宏病毒的安全建议

为了有效防范宏病毒,建议采取以下措施:

(1)提高安全级别。目前较高版本的Word软件(如Word 2000、Word XP、Word 2003等)都为用户提供3~4个安全级别来进行宏病毒的防范。在不影响正常工作学习的前提下,建议用户使用较高的安全级别来避免宏病毒的感染。如图4-7所示,在宏安全性选项中,最好将安全级别提高到“高”。

(2)删除既不是自定义的也不是Word默认提供的宏。

(3)按照自己的使用习惯设置Normal.dot模板并进行备份。当被病毒感染时,用备份的Normal.dot模板覆盖当前的Normal.dot模板可以起到消除宏病毒的作用。

(4)如果怀疑外来的不明文件含有宏病毒,可以先用不调用任何宏的写字板打开该文件,然后再将文本粘贴到Word中。转换后的文档是不含有任何宏的。

(5)如果用户平时只进行普通的文字处理,很少使用宏编程,对Normal.dot模板也很少修改,可以设置“提示保存Normal模板”功能。如果宏病毒感染了Word文档,当用户从Word退出时,Word会给出“更改的内容会影响到公用模板Normal,是否保存这些修改内容?”的提示,这说明Word已感染了宏病毒。这时应选择“否”,退出后用其他方法杀毒。如图4-8所示,用户在打开Word程序后,可以依次选择“工具”→“选项”→“保存”,在“保存”选项中,选择“提示保存Normal模板”功能。

图4-7 宏安全性选项

图4-8 依次选择“工具”→“选项”→“保存”→“提示保存Normal”选项

4.3 变化多端的文件型病毒

文件型病毒是指能够寄生在文件中的以文件为主要感染对象的病毒。这类病毒程序感染可执行文件或数据文件。如DosCom.Virus.Brain.a病毒和PE-Funlove病毒感染.COM和.EXE等可执行文件;Macro.BadBoy和Macro.BUG-A等宏病毒感染.DOC文件。文件型病毒是所有病毒种类中数量最庞大的一种。

4.3.1 文件型病毒的复制机制

典型的文件病毒通过以下的方式载入并复制自己:

(1)当一个被感染的程序运行之后,病毒控制后台及后续操作。如果该病毒是一个宏病毒,那么当打开一个带有宏程序的文档(Word,Excel)时,病毒就开始控制系统。

(2)如果这个病毒是常驻内存型的,则会将自己载入内存,监视文件运行并打开服务的调用。当系统调用该类操作时,病毒将感染新的文件。

(3)如果该病毒不是常驻内存型的,则会立刻找寻一个新的感染对象,该对象可能是当前目录中的第一个文件、一个固定的DOS目录文件或者是设计病毒的人预先定义的某个文件,然后取得这个原始文件的控制权。

4.3.2 文件型病毒的分类

文件型病毒的分类方式没有统一的规范,但是国际上普遍认可的分类方式有按照病毒的算法分类和按照操作系统分类。

根据病毒特有的算法,文件型病毒可以划分为以下几种。

1.伴随型病毒

这一类病毒并不改变被感染的文件本身,它们根据算法产生.EXE文件的伴随体,该伴随体具有与文件同样的名字和不同的扩展名(.COM)。例如,XCOPY.EXE的伴随体是XCOPY.COM。病毒把自身写入.COM文件且不改变.EXE文件,当DOS加载文件时,伴随体优先被执行,然后再由伴随体加载执行原来的.EXE文件。

2.“蠕虫”型病毒

这种病毒通过计算机网络传播(主要是电子邮件),不改变文件和资料信息,利用网络从一台机器传播到其他的机器,将自身通过网络发送。它们有时存在于系统中,除了内存和硬盘之外一般不占用其他资源。我们将在第5章详细讲解“蠕虫”病毒。

3.寄生型病毒

除了伴随和“蠕虫”型病毒之外,其他病毒均可称为寄生型病毒。它们依附在系统的引导扇区或文件中,通过系统的功能进行传播。这类病毒按照算法可分为:

(1)练习型病毒:病毒自身包含错误,不能进行有效的传播或破坏。有很多恶性病毒都是先炮制出练习型病毒之后再不断改进的。例如,一些处在调试阶段的病毒。

(2)诡秘型病毒:这种类型的病毒一般不直接修改DOS中断和扇区数据,而是通过设备技术和文件缓冲区等对DOS内部调用进行修改,使一般使用者不易看到资源的占用情况。这种病毒采用比较高级的技术,利用DOS的空闲数据区进行工作。

(3)变型病毒(又称幽灵病毒):随着汇编语言的发展,这类病毒使用一个复杂的算法,使自己每感染一次都具有不同的内容和长度。其一般做法是采用一段混有无关指令的解码算法和被变化过的病毒体。

4.3.3 文件型病毒的发展史

在病毒的发展史上,文件型病毒的出现是比较有规律的。一般情况下,在一种新的病毒技术出现后,病毒会迅速发展,紧接着反病毒技术也会得到发展以抑制其流传。当操作系统升级时,病毒也会演变出新的方式,产生新的病毒技术。文件型病毒可以分为以下几类:

1.DOS可执行阶段的病毒

1989年,可执行文件型病毒出现,它们利用DOS系统加载可执行文件的机制工作。其代表为“耶路撒冷”和“星期天”病毒。病毒代码在系统执行可执行文件时取得控制权,修改DOS中断,在系统调用时进行传染,并将自己附加在可执行文件中,使文件长度增加。这类病毒可感染COM和EXE文件。

2.伴随型与批次型阶段的病毒

1992年,伴随型病毒出现,它们利用DOS加载文件的优先顺序进行工作。具有代表性的是“金蝉”病毒,它在感染EXE文件时生成一个和EXE同名的扩展名为.COM的伴随体;在感染COM文件时把原来的COM文件改为同名的EXE文件,而且产生一个与原文件同名的伴随体,其扩展名为.COM。这样,在DOS加载文件时,病毒就会取得控制权。这类病毒的特点是不改变原来的文件内容、日期及属性,清除病毒时只要将其伴随体删除即可。在非DOS操作系统中,一些伴随型病毒利用操作系统的描述语言进行工作,具有代表性的是“海盗旗”病毒,它在执行时询问用户名称和口令,然后返回一个出错信息,之后将自身删除。批次型病毒是工作在DOS下的与“海盗旗”病毒类似的病毒。

3.幽灵与多形型阶段的病毒

1994年,随着汇编语言的发展,人们可以用不同方式实现同一功能,这些方式的组合使一段看似随机的代码产生相同的运算结果。幽灵病毒就是利用这个特点,每感染一次就产生不同的代码。例如,“One Half”病毒就是产生一段有上亿种可能的解码运算程序,病毒体被隐藏在这些加密的数据中。要查解这类病毒,必须能对这段数据进行解码,从而加大了查毒的难度。多形型病毒是一种综合性病毒,它既能感染引导区又能感染程序区。多数幽灵病毒都具有解码算法,一种病毒往往需要两段以上的子程序才能彻底清除。

4.生成器与变体机阶段的病毒

1995年,在汇编语言中,一些数据的运算被放在不同的通用寄存器中进行,但却得出了同样的结果,随机插入的一些空操作和无关指令并没有影响运算的结果,这样,一段解码算法就可以由生成器生成。当生成的是病毒时,这种称之为病毒生成器和变体机的软件就产生了。具有代表性的是“病毒制造机”(VCL),它可以在瞬间制造出成千上万种不同的病毒。查杀这类病毒时就不能使用传统的特征码扫描法,而是需要在宏观上分析指令,解码后查杀病毒。变体机就是增加解码复杂程度的指令生成机制。

5.网络和蠕虫阶段的病毒

1995年,随着网络的普及,病毒开始利用网络进行传播,这些病毒只是以上几代病毒的改进。在非DOS操作系统中,“蠕虫”最具代表性,它不修改磁盘文件,而是利用网络功能搜索网络地址,将自身向下一个地址进行传播。这种病毒有时也存在于网络服务器和启动文件中。

6.视窗阶段的病毒

1996年,随着Windows和Windows 95的日益普及,利用Windows进行工作的病毒开始得到发展。这类病毒修改(NE,PE)文件,其代表是V 3783病毒。这类病毒的工作机制更为复杂,它们利用保护模式和API调用接口工作,清除方法也比较复杂。

7.宏病毒阶段的病毒

1996年,随着Windows Word功能的增强,使用Word宏语言也可以编制病毒,这种病毒使用类Basic语言,容易编写且源代码几乎公开,其作用是感染Word文档文件。在Excel中出现的相同工作机制的病毒也归为此类。由于当时Word文档格式没有公开,所以这类病毒的查杀在当时比较困难。

8.互联网阶段的病毒

1997年,随着互联网的发展,各种病毒也开始利用互联网进行传播,一些携带病毒的数据包和邮件越来越多,如果不小心打开了这些邮件,机器就有可能中毒。现在新出现的互联网病毒大部分属于蠕虫类病毒。

4.3.4 文件型病毒简介

这里我们将按照操作系统的发展来介绍文件型病毒,从而有助于读者对病毒的发展情况有一个全面的了解。

1.DOS病毒

若要运行一个程序,首先要由操作系统把它从存储介质调入到内存中,然后才能运行它以完成计算或处理任务。在PC机环境中,被运行的程序通常是从软盘或硬盘中调入内存的。除了特别设计的内存驻留型程序外,一般的程序在运行结束之后会将其在运行期间占用的内存全部释放给系统,供下一个被运行的程序使用。计算机病毒是一种特殊的程序,因此它使用内存的方式与常规程序使用内存的方式有很多共同之处,然而也有其特点。这需要按病毒的类型来分析。

最早的DOS病毒都是引导型病毒,它的病毒体寄生在硬盘的主引导扇区,在计算机启动的时候从磁盘的引导扇区被ROM BIOS中的引导程序读入内存。正常的引导扇区信息在被ROM BIOS读入内存后,该扇区的引导程序会完成对DOS系统的加载,然后该信息会自动被DOS系统覆盖,在内存中不会留下任何痕迹。而引导区病毒则不能像正常引导程序那样被覆盖,否则就无法继续进行传播了。因此,各种引导区病毒全部是驻留内存型的,检测程序可以通过各种方法发现引导型病毒在内存中的位置。“小球”、“大麻”、“米开朗基罗”等引导区病毒的共同特点就是在把控制权交给正常的引导程序去做进一步的系统启动工作之前,首先把自己搬移到内存的高端。这样可以保证自身不会被覆盖。另外,它还修改DOS对于内存的调用,减少DOS的可用内存空间,并且将自己隐藏在被减少的内存空间中。不同的引导病毒占用的内存数量不同,具体如下:

小球病毒 2KB

大麻病毒 2KB

巴基斯坦智囊病毒 7KB

在查看DOS的可用内存时如果发现可用内存减少,则说明很可能是被内存驻留型病毒感染。

与引导型病毒不同,当文件型病毒被加载到内存时,内存已经在DOS的管理之下了。文件型病毒按使用内存的方式也可以分为驻留内存和非驻留内存两类,其中驻留内存病毒占绝对多数。

驻留内存的文件病毒非常多,比如“1575”、“dir2”、“4096”、“中国炸弹”等。这种病毒一般把自身加到高端内存,这样既不易被内存信息显示程序发现,又使DOS察觉不到内存总数的减少。病毒在计算机基本保持工作状态的情况下以用户不易察觉的方式进行感染。若病毒挂接在系统中,当用户进行正常的操作(如用DIR命令或COPY命令)时,隐藏在内存中的病毒在系统完成操作之前就先进行传染操作。

不驻留内存的病毒有“维也纳”病毒、“Syslock”病毒,“Taiwan”病毒等,这些不驻留内存的病毒既可以只感染.COM文件也可以只感染.EXE文件。它们采用的感染方法是运行一次后就在硬盘上寻找一个未被感染的文件进行感染。当程序运行完成后,病毒代码离开内存且不在内存中留下任何痕迹。这类病毒比较隐蔽,但是它的传播速度没有驻留内存型病毒快。

随着计算机技术的发展,许多计算机病毒采用自加密技术。据统计,在已发现的各种PC机病毒中,有近十分之一的病毒使用了自加密技术。按照被加密的内容划分,自加密分为信息加密、数据加密和程序代码加密三种。比如,“中国炸弹”病毒就是对被感染文件的前6个字节进行了修改,并将其以加密的形式存放在病毒体内。要恢复被感染的文件,必须经过解密才能获得原文件的前6个字节。而“1575”病毒就是把c:command.com字符进行了加密,只要一启动,“1575”病毒自然会随系统文件command.com进入内存,从而大大提高了它的感染能力。而“1701”、“1704”病毒对于自身的病毒体进行了加密,它使用的加密密钥的一部分是被感染文件的文件长度,从而使得每次感染时使用的密钥都不相同,因此进一步增大了清除病毒的难度。

具有高级形式自加密技术的是一种称为Mutation Engine的变形机技术。采用Mutation Engine技术的病毒不同于以往的病毒,它是具有自加密功能的新一代计算机病毒。Mutation Engine是一种程序变形器,它可以使程序代码本身发生变化,同时保持原有的功能。利用计算得到的密钥,变形机产生的程序代码可以有很多种变化。因此,如果反病毒软件用以往的特征串扫描的方法就不起作用了。这种病毒也被称为“幽灵病毒”。

除了这些技术之外,一些病毒还使用了反跟踪技术(如,“1575”病毒就加入了反跟踪技术,阻止利用DEBUG等程序调试软件对其代码进行跟踪),这里就不详细介绍了。

DOS下的可执行文件是标准的可执行文件。采用16进制的文本编辑器可以看见它是以4D5A开头的(由于数据的存储方式是反的,实际上应该是5A4D)。它的结构非常简单。

2.Windows病毒

随着微软Windows 3x操作系统的推出,病毒也进入了Windows时代。由于该操作系统依然使用DOS作为其底层操作系统,所以Windows 3x的病毒数量相对较少,人们能够接触到的典型的Windows 3x病毒是一个叫做“V3783”的病毒。

该病毒传染硬盘、软盘引导区及Windows、DOS可执行程序,其中包括.EXE、.COM、.OVL、.386等文件。程序被传染后长度增加3783字节,文件日期被加上100年作为传染标记。

“V3783”病毒是一种传染性和隐蔽性都很强的病毒,它的独到之处是可以传染Windows文件,使病毒可以在Windows执行时驻留内存。

该病毒采用修改内存控制块的方法达到驻留内存的目的,如果存在UMB,病毒会驻留在UMB中。该病毒驻留内存后截取INT 21H和INT 13H中断,从而实现对文件和引导区的传染。

该病毒驻留内存后,用DIR命令看不出文件长度的变化,用INT 13H读出的磁盘引导记录也是正常的而不是带毒的引导记录,用应用程序读出的带毒文件也都正常,但是由ARJ、PKZIP、RAR、LHA、BACKUP、MSBACKUP、TELIX这7个程序读出的文件却是带毒的,所以被这些压缩程序压进文件包或用TELIX通过调制解调器传到其他地方的文件都是带毒的。由此可见该病毒在隐藏和传播上下了很大工夫。

该病毒在传染硬盘主引导区时隐藏于0柱面0头5扇区,传染软盘引导区时隐藏于新格式化的软盘的第81个磁道,传染文件时附在文件末尾。该病毒本身不加密。

微软为了配合其Windows 3x系统推出了NE格式可执行文件标准,也就是16位Windows格式可执行文件。它提出了section(节)的概念,使文件的结构发生了很大变化,而且还可以加入资源使可执行文件能够显示自己的图标等。具体细节可以参见PE格式的说明。

到了Windows 9x时代,病毒有了很大发展。微软在Windows 95推出的时候公布了其PE格式的可执行文件标准。在Windows 9x、NT、2000下,所有的可执行文件都是基于微软设计的一种新的文件格式Portable Executable File Format(可移植的执行体),即PE格式。而现在新出现的病毒几乎都是PE格式的可执行文件病毒,其中最有名的PE格式的病毒应该是PE_CIH病毒。

CIH病毒是感染Windows 95、98可执行文件的病毒。PE_CIH病毒最先于1998年6月在台湾发现,该病毒作者把此病毒作为一个实用程序发到当地的互联网上,结果在此后的一周内该病毒相继在澳大利亚、瑞士、美国、俄罗斯等国被发现。该病毒于1998年8月中旬流入大陆。CIH病毒是迄今为止发现的最具危害的病毒之一,其阴险之处在于发作时不仅破坏硬盘的引导区和分区表,而且破坏计算机系统Flash BIOS芯片中的系统程序,导致主板损坏。CIH病毒是被发现的第一个直接破坏计算机系统硬件的病毒。该计算机病毒在其代码中包含字符串“CIH v1.2 TT IT”,如图4-9所示。

图4-9 CIH病毒的代码中包含“CIH v1.2 TTIT”字符串

该病毒利用了微软的VxD技术,可以直接对硬盘的物理扇区进行写操作。VxD(虚拟设备驱动)是微软专门为Windows制定的设备驱动程序接口规范。通俗地说,VxD程序有点类似于DOS中的设备驱动程序,专门用于管理系统所加载的各种设备。比如,Windows为了管理最常用的鼠标,就会加载一个鼠标虚拟设备驱动程序(通常是mouse.VxD)。微软之所以将它称为“虚拟设备驱动”,是因为VxD不仅适用于硬件设备,而且也适用于按照VxD规范所编制的各种软件“设备”。有很多应用软件都需要使用VxD机制来实现某些比较特殊的功能。比如,最常见的VCD软解压工具就使用VxD程序有效地改善了视频回放效果。Windows反病毒技术也需要利用VxD机制,这是因为VxD程序具有比其他类型的应用程序更高的优先级,而且更靠近系统底层资源——只有这样,反病毒软件才有可能全面、彻底地控制系统资源,并在病毒入侵时及时作出反应。

由于微软在Win NT构架下的系统没有使用VxD技术,所以PE_CIH病毒在Win NT下是没有办法运行的。

随着计算机软硬件的发展,病毒也有了更进一步的发展,并且伴随着互联网的不断普及,蠕虫病毒将成为未来病毒的主要发展方向。我们将在下面详细介绍。

PE的意思就是Portable Executable(可移植的可执行文件),它是Win32环境自身所带的可执行文件格式。可移植的可执行文件意味着此文件格式是跨Win32平台的:即使Windows运行在非Intel的CPU上,任何Win32平台的PE解释器也都能识别和使用该文件格式。当然,移植到不同的CPU上的PE可执行文件必然会有一些改变。所有Win32可执行文件(除了VxD和16位的Dll)都使用PE文件格式,其中包括NT的内核模式驱动程序(kernel mode driver)。它的一些特性继承自UNIX的Coff(common object file format)文件格式。

所有PE文件(甚至32位的DLL)必须以一个简单的DOS MZ header开始。一旦程序在DOS下执行,DOS就能识别出这是有效的可执行文件,然后运行紧随MZ header之后的DOS stub。DOS stub实际上是一个有效的EXE可执行文件,在不支持PE文件格式的操作系统中,它将简单地显示一个错误提示,其内容类似于字符串“This program can not run in DOS mode”或者是程序员根据自己的意图编写的完整的DOS代码。紧接着DOS stub的是PE header。PE header是PE相关结构IMAGE_NT_HEADERS的简称,其中包含了许多PE程序解释器用到的重要信息。可执行文件在支持PE文件结构的操作系统中执行时,PE程序加载器将从DOS MZ header中找到PE header的起始偏移量,从而跳过DOS stub直接定位到真正的文件头PE header开始执行。PE文件的真正内容划分成块,这些块称为section(节)。每个节是一块拥有共同属性的数据,比如代码/数据、读/写等。

4.3.5 典型的文件型病毒——WIN95.CIH病毒解剖

CIH病毒是我们通常所说的Win32病毒的一种,该病毒利用Windows 9x针对系统区内存保护不利的弱点进行攻击传染。它的特点是传播快,破坏力极强。一个典型的病毒由三部分组成:初始化部分、传染部分和破坏部分。下面我们通过对部分代码的分析分别说明该病毒的三个组成部分,并以此说明它的流程。在解剖该病毒前,我们先对Windows 9x系统进行一些简单描述。

Intel IA-32系统对代码实行分级保护。代码特权级一共有4级,但Windows系统只使用了其中的2级。Ring 0是系统级,操作系统代码和驱动程序代码就运行在该级别。在该级上运行的代码可以执行任意的Intel指令而不被限制,Ring 3是用户级,一般的用户程序所运行的级别属于这一级,一些特权指令的执行将被限制。因为操作系统出于对自身的保护往往不允许用户级的代码去改写系统的数据区。

1.初始化部分

通常,病毒在该部分做一些初始化操作,例如,在Win32病毒中普遍存在调用Win32 Api函数的操作。当然,CIH病毒利用VxD技术编写,它并不调用系统提供的用户级API,所以也就不存在定位API的问题。它的初始化部分主要是为了突破系统的保护,从而把自己的代码执行特权级别提高,并把自己嵌入系统中以安装相应的感染模块。

因为普通的应用程序代码被限制在Ring 3上运行,而病毒要攻入系统并进行传播就存在一个突破系统限制以提高自己的特权级的问题。接下来我们看看CIH病毒是如何实现的。

      SIDT  DWORD PTR [ESP-2]
      POP   EBX                 获得系统中断表的基址
      ADD  EBX,1CH              计算INT3的中断描述符地址
      MOV  EBP,[EBX]
      MOV  BP,[EBX-4]
      LEA   ESI,[ECX+12]        获得系统的Ring 0代码的地址
      PUSH  ESI
      MOV  [EBX-4],SI
      SHR   ESI,10H
      MOV  [EBX+2],ESI          写入到INT3中断描述符中
      POP   ESI

这样的代码在WinNT、Win2k、WinXp上如果被执行,将会发生异常。原因是它尝试改写系统的数据区,而在以上的系统中,系统的数据是不能被用户读写的。但Win9x中因为系统对自己的关键数据区没有进行保护(这里主要是因为内存页的属性为用户页,并且可读写),从而使得Ring 3级的代码可以任意改写操作系统的很多数据区。

CIH成功改写中断3的描述符之后,让该中断处理代码指向病毒的Ring 0代码。当然,还需要指定这个中断的可被调用级。(因为系统中断3是允许Ring 3代码触发的,所以这里没有改,如果病毒要利用其他中断的话,就需要做这一步。因为到目前为止,我们的代码还只是运行在Ring 3级,因此有很多有关特权方面的限制)接下来病毒触发中断。执行Ring 0代码进行初始化。

      INT   3
      Ring 0初始化代码:
      JZ       SHORT病毒初始化2
      MOV      ECX, DR0
      JECXZ    SHORT病毒初始化1
      中断恢复:
      MOV      [EBX-4], BP          恢复原来的中断3描述符
      SHR      EBP, 10H
      MOV      [EBX+2], BP
      IRET
      病毒初始化2:
      LEA      EAX, [EDI-30AH]
      PUSH     EAX             计算病毒的文件操作钩子函数的地址
      VXDCALL IFSMGR_INSTALLFILESYSTEMAPIHOOK
      ...
      ...
      JMP      中断恢复
      病毒初始化1:
      MOV      DR0, EBX            设病毒内存驻留标记
      PUSH     0FH
      PUSH     ECX
      PUSH     0FFFFFFFFH
      PUSH     ECX
      PUSH     ECX
      PUSH     ECX
      PUSH     1
      PUSH     2
      VMMCALL _PAGEALLOCATE        病毒分配2页的系统内存
      ADD      ESP, 20H
      XCHG     EAX, EDI
      LEA      EAX, [ESI-6FH]
      IRET

病毒两次调用INT3以两步完成整个病毒的Ring 0初始化。第一次调用时,病毒分配一块系统内存区,以便可以把病毒代码复制到该区以达到驻留系统的目的。第二次调用时,病毒利用VXD调用,把自己的传染部分挂接到操作系统的文件操作部分。所以当系统每次操作文件时,病毒的传染代码都会被执行,病毒则趁机进行文件感染。

病毒传染部分:(病毒挂接的文件系统HOOK函数)

                      PUSHA
                      CALL   $+5
                      POP    ESI
                      ADD    ESI, 248H
                      TEST   BYTE PTR [ESI], 1       ;病毒为了防止自己的代码重入设置的忙标记
                      JNZ    NEAR PTR 4005A0H
                      LEA    EBX, [ESP+28H]
                      CMP    DWORD PTR [EBX], 24H    ;表示系统对文件的操作是打开的
                      JNZ    NEAR PTR 40059AH
                      INC    BYTE PTR [ESI]
                      ADD    ESI, 5
                      PUSH   ESI
                      MOV    AL, [EBX+4]
                      CMP    AL, 0FFH
                      JZ     SHORT LOC_0_4003BA
                      ADD    AL, 40H
                      MOV    AH, 3AH
                      MOV    [ESI], EAX
                      INC    ESI
                      INC    ESI
        LOC_0_4003BA:
                      PUSH   0
                      PUSH   7FH
                      MOV    EBX, [EBX+10H]
                      MOV    EAX, [EBX+0CH]
                      ADD    EAX, 4
                      PUSH   EAX
                      PUSH   ESI
                      VXDCALL UNITOBCSPATH
                      ADD    ESP, 10H
                      CMP    DWORD PTR [ESI+EAX-4], 'EXE.'    ;感染扩展名为EXE的文件
                      POP    ESI
                      JNZ    NEAR PTR NOTEXEFILE              ;病毒不对非EXE文件进行感染
                      CMP    Word PTR [EBX+18H], 1
                      JNZ    NEAR PTR 400597H
                      MOV    AX, 4300H
                      VXDCALL IFSMGR_RING0_FILEIO             ;病毒尝试打开该文件
                      ...
                      病毒将尝试感染该文件

2.病毒感染流程简介

首先,判断该EXE文件是否被加过感染标记“U”,如果标记存在,病毒认为该文件已经被病毒感染过,从而不进行重复感染。病毒还会避开Zip自解压文件,以免被Zip解压代码校验保护发现。

病毒的感染手法比较少见,它把自己分块插入PE文件中的“缝隙”中。当病毒运行时由初始化模块负责加载组装。这样做可以避免因被感染文件大小变大而被发现。病毒也会修改PE文件中插有病毒代码的节的属性,以便病毒在运行时不会产生页异常(主要是因为代码节不可写,而病毒有进行自身代码的改写的操作)。

3.病毒的破坏

病毒直接利用0x70和0x71端口读出RTC的日期并以此作为其发作日期的判别依据。当日期符合病毒要求时,病毒就会用垃圾数据覆盖Bios-EPROM,并直接利用VXD调用向磁盘驱动发送写命令,从头至尾进行磁盘扇区的覆盖操作,直到系统瘫痪。

4.病毒的简要流程图

Win95.CIH病毒的简要流程图如图4-10所示。

图4-10 Win95.CIH病毒的简要流程图

4.3.6 新CIH病毒(WIN32.Yami)剖析

与传统的CIH病毒不同,“新CIH”病毒可以在Windows2000/XP系统下运行(老CIH只能在Win 9x系统下运行),因此破坏范围比老CIH大得多。2003年5月17日,瑞星全球反病毒监测网率先截获该恶性病毒,由于该病毒的破坏能力和当年臭名昭著的CIH病毒几乎完全一样,因此瑞星将该病毒命名“新CIH”病毒。

“新CIH”病毒会驻留在系统内核,它首先判断打开的文件是否为Windows可执行文件(PE)文件,如果不是则不进行感染操作,是则将病毒插入到PE文件各节的空隙中(与传统的CIH一样),所以,感染后文件长度不会增加。由于病毒自身的原因,感染时有些文件会被损坏,导致不能正常运行。它发作时将企图用“YM Kill You”字符串信息覆盖系统硬盘,并且使数据恢复相当困难。它同时通过向主板BIOS中写入垃圾数据来对硬件系统进行永久性破坏。

新CIH病毒行为分析:

1.病毒搜索Kernel32的起始偏移地址

2.取得病毒所用的Api地址

3.进入Ring0

4.通过直接IO的方式写Bios和硬盘

值得庆幸的是,这个新“CIH”发作条件较为特殊,不会定期发作,而且只会通过感染文件来传播,因此不太可能在短期内造成巨大的破坏。各反病毒软件公司以最快的速度研发出查杀此病毒的专杀工具,因此此病毒的大面积破坏在很大程度上被控制住了。

4.4 攻击磁盘扇区的引导型病毒

4.4.1 引导型病毒背景介绍

为了更好地理解引导型病毒的发作过程和原理,我们先来了解一下磁盘的基本结构。

1.磁盘结构初步

当硬盘的容量还非常小的时候,人们采用与软盘类似的结构生产硬盘。也就是说,硬盘盘片的每一条磁道都具有相同的扇区数。因此人们将硬盘参数称为CHS,即磁头数(Heads),柱面数(Cylinders),扇区数(Sectors),以及相应的寻址方式。其中:

磁头数表示硬盘总共有几个磁头,也就是有几面盘片,最大为255(用8个二进制位存储);

柱面数表示硬盘每一面盘片上有几条磁道,最大为1023(用10个二进制位存储);

扇区数表示每一条磁道上有几个扇区,最大为63(用6个二进制位存储);

每个扇区一般是512个字节,理论上讲这不是必须的,但习惯上都取此值。

所以,磁盘最大容量为:

255×1023×63×512/1048576=8024 MB(1MB=1048576 B)

或硬盘厂商常用的单位:

255×1023×63×512/1000000=8414 MB(1MB=1000000 B)

在老式硬盘中,由于每个磁道的扇区数相等,所以外道的记录密度要远低于内道,因此会浪费很多磁盘空间(与软盘一样)。为了解决这一问题,进一步提高硬盘容量,人们改用等密度结构生产硬盘。也就是说,外圈磁道的扇区比内圈磁道多。采用这种结构后,硬盘不再具有实际的3D参数了,寻址方式也改为线性寻址,即以扇区为单位进行寻址。为了与使用3D寻址的老软件兼容,人们在硬盘控制器内部安装了一个地址翻译器,由它负责将老式3D参数翻译成新的线性参数。这也是为什么现在硬盘的3D参数可以有多种选择的原因(不同的工作模式对应不同的3D参数,如LBA,LARGE,NORMAL)。

2.磁盘分区简介

(1)Boot Sector简介

Boot Sector也就是硬盘的第一个扇区,它由MBR(Master Boot Record)、DPT(Disk Partition Table)和Boot Record ID三部分组成。

MBR又称为主引导记录,占用Boot Sector的前446个字节(0到0x1BD),存放系统主引导程序(它负责从活动分区中装载并运行系统引导程序)。

DPT即主分区表,占用64个字节(0x1BE到0x1FD),记录了磁盘的基本分区信息,主分区表分为4个分区项,每项16字节,分别记录了每个主分区的信息(因此最多可以有4个主分区)。

Boot Record ID是引导区标记,占用两个字节(0x1FE和0x1FF),对于合法引导区,它等于0xAA55,这是判别引导区是否合法的标志。

Boot Sector的具体结构如图4-11所示。

图4-11 Boot Sector的结构图

(2)分区表结构

分区表由4个分区项构成,每一项长度为16个字节,分区表结构如图4-12所示。

(3)扩展分区简介

由于主分区表中只能分4个分区,因此无法满足需求,所以人们设计了一种扩展分区格式。基本上说,扩展分区的信息是以链表形式存放的,但也有一些特别之处。

首先,主分区表中要有一个基本扩展分区项,所有扩展分区都隶属于它。也就是说,其他所有扩展分区的空间都必须包括在这个基本扩展分区中。对于DOS/Windows来说,扩展分区的类型为0x05(EXTENDX)。除基本扩展分区以外的其他所有扩展分区则以链表的形式级联存放,后一个扩展分区的数据项记录在前一个扩展分区的分区表中,但两个扩展分区的空间并不重叠。扩展分区类似于一个完整的硬盘,必须进一步分区才能使用。但每个扩展分区中只能存在一个其他分区,该分区在DOS/Windows环境中即为逻辑盘。因此,每一个扩展分区的分区表(同样存储在扩展分区的第一个扇区中)中最多只能有两个分区数据项(包括下一个扩展分区的数据项)。

图4-12 分区表结构图

扩展分区的分区表存放在该分区的第一个扇区中,它的结构与硬盘的Boot Sector基本相同,只是没有主引导记录,即该扇区的0-0X1BD的数据是无效的。另外,它的分区表只有前面两项是有效的。它的最后两个字节也是合法性检测标志,即55AA。

图4-13是扩展分区的结构示意图。

图4-13 扩展分区的结构图

(4)硬盘分区类型

0 未使用分区项;

1 DOS12——一种fat表为12位的分区,主要用于早期的小硬盘和部分软盘;

2 xenix——一种Linux分区;

4 DOS16——早期硬盘分区方法,分区表项为16位,最大支持32MB的分区大小;

5 EXTEND——扩展分区的一种,该分区的起始扇区为前面的第一个EXTENDX分区起始扇区+该分区的相对偏移;

6 BIGDOS,即FAT16分区,分区表为16位,每簇最大为32KB,最大分区为2GB;

7 NTFS分区;

B FAT32分区,分区表为32位;

C FAT32X分区,与FAT32基本相同;

E BIGDOSX,即FAT16分区,扩展分区表为16位,每簇最大可以超过32KB;

F EXTENDX——扩展分区的一种,起始扇区为该分区的相对偏移或者前面的第一个EXTENDX分区起始扇区+该分区的相对偏移。

3.引导型病毒简介

简单来讲,引导型病毒就是改写磁盘上的引导扇区(Boot Sector)信息的病毒。引导型病毒主要感染软盘和硬盘的引导扇区或主引导扇区,在系统启动时,先执行引导扇区上的引导程序,将病毒加载到系统内存上,然后通过监控操作系统磁盘读写中断向量的方式感染其他软盘和硬盘。引导区型病毒通常用汇编语言编写,因此病毒程序很短,执行速度很快。

比较典型的引导区病毒是PolyBoot(也叫WYX.B)。WYX病毒把最初的引导区储存在不同位置,这取决于它是DBR、MBR还是软盘的引导区。病毒一旦发作,将破坏硬盘的主引导区,使所有的硬盘分区及数据丢失。WYX病毒的感染对象可以是任何系统平台,包括Windows、UNIX、Linux、Macintosh等。我们会在后面对WYX病毒进行详细的分析。

4.4.2 引导型病毒的主要特点和分类

(1)引导型病毒是在安装操作系统之前进入内存的,寄生对象又相对固定,因此该类型病毒基本上不得不采用减少操作系统所掌管的内存容量的方法来驻留内存高端。而正常的系统引导过程一般是不减少系统内存的。

(2)引导型病毒需要把病毒传染给软盘,一般是通过修改INT 13H的中断向量,而新INT 13H中断向量段址必定指向内存高端的病毒程序。

(3)引导型病毒感染硬盘时,必定驻留在硬盘的主引导扇区或引导扇区中,并且只驻留一次。因此,引导型病毒一般都是在软盘启动过程中把病毒传染给硬盘的。而正常的引导过程一般是不对硬盘主引导区或引导区进行写盘操作的。

(4)引导型病毒的寄生对象相对固定,所以可以把当前的系统主引导扇区和引导扇区与干净的主引导扇区和引导扇区进行比较,如果内容不一致,可认定系统引导区异常。

引导型病毒按其寄生对象的不同又可分为两类,即“MBR”(主引导区)病毒和“BR”(引导区)病毒。“MBR”病毒也称为分区病毒,将病毒寄生在硬盘分区主引导程序所占据的硬盘0头0柱面的第1个扇区中。典型的病毒有“大麻”(Stoned)、“2708”、“INT60”病毒等。“BR”病毒是将病毒寄生在硬盘逻辑0扇或软盘逻辑0扇(即0面0道的第1个扇区)。典型的病毒有“Brain”、“小球”病毒等。

4.4.3 引导型病毒的发作现象及处理

通常,我们可以利用DOS操作系统所带的DEBUG程序对引导型病毒所感染的硬盘主引导扇区、硬盘BOOT扇区、硬盘FAT表、文件目录进行备份保存,当病毒感染发作时,重新回写硬盘主引导扇区、硬盘BOOT扇区、硬盘FAT表、根目录,这样可以覆盖掉已有的病毒,并且能够恢复硬盘数据。

作为比较典型的引导型病毒,WYX的基本传染条件、感染过程、破坏结果均符合引导型病毒的基本特征,详细情况如图4-14所示。

图4-14 WYX病毒的基本特征

1.感染过程

修改硬盘的启动扇区(Boot Sector —— 0扇区)中的主引导记录(MBR)及引导记录(63扇区),并将原来0扇区的内容和63扇区的内容挪移到60和61两个扇区进行备份。其中,在60扇区中存放引导记录的信息,在61扇区中存放0扇区的信息。然后在62扇区进行病毒标记。由于其中有WYX的明显标记,所以此病毒因此得名。

2.发作过程

通常情况下引发病毒的情况是使用软盘引导计算机启动,因此病毒破坏时会将软盘的引导扇区的内容写入硬盘的Boot Sector(0扇区),这会直接导致硬盘的分区表和引导记录的损坏,从而使硬盘的全部分区和数据丢失。发作后的情况如图4-15所示。

图4-15 病毒感染发作示意图

3.恢复过程

恢复过程如图4-16所示。

图4-16 手动恢复示意图

4.一些特殊情况

通常情况下,针对引导型的病毒进行杀毒后计算机即可正常地引导和使用了,但有时会出现诸如无法正常启动或病毒无法清除的情况,现列举如下(针对Windows 98系统):

(1)杀毒后计算机的系统依旧无法正常启动。

这种情况往往是由于引导记录存在问题导致。可使用Windows 98的启动盘启动计算机,通过使用如下命令恢复系统的启动:

      a:>sys a: c:

(2)杀毒时告知病毒已清除,但重新启动后进行查毒处理依旧发现有病毒。

这种情况又分两种情形:

● 用来启动计算机的杀毒软件本身存在病毒。

处理方法:首先将杀毒软盘中的病毒进行处理后再杀毒。

● 硬盘可能遭到多种引导型病毒的混合攻击,导致杀毒时按照某一引导型病毒处理后出现异常。

处理方法:若反复查杀的病毒存在的位置为“主引导”,则可使用Win 98的启动盘启动计算机,通过使用如下命令安全恢复硬盘的引导记录(MBR)。若同时还伴有“引导”位置也存在病毒反复无法清除的情况,则可配合sys a: c: 共同使用。

        a:>fdisk /mbr

(3)某些品牌计算机的引导记录总是存在引导型的病毒无法清除的情况。

这个问题是因某些品牌计算机的原始分区信息中存在非DOS分区导致。引导型病毒修改后并未修改正常的引导记录,而是修改了非DOS分区的记录(63扇区),从而导致病毒无法清除。

处理方法:可以通过直接磁盘编辑的方法将非DOS分区的应为引导记录的扇区中的数据清空,但这种方法有可能会导致非DOS分区中的部分信息丢失。在使用这种方法之前应先向你的整机供应商咨询相关信息。

4.4.4 典型的引导型病毒——WYX病毒解析

WYX是一个引导区病毒,此病毒感染主引导区、硬盘引导区以及软盘引导区。该病毒感染这些引导区时会对引导区的数据进行备份(将原来引导区的数据写入另外的扇区中),所以被WYX病毒感染的引导区是可以恢复的。但是它感染这三种引导区时对原来的引导区的备份方法均不相同,所以对各个引导区的恢复方法也不相同。

以下是WYX病毒的执行流程:

当系统以被WYX病毒感染的引导区进行引导时,引导扇区的数据被装载到内存0000:7C00起始的地址,并开始执行引导扇区的指令。

病毒跳转到病毒代码的起始处,开始的这段代码只是对偏移0x74开始的代码进行解密。

      0000:7C5A                     push    cs
      0000:7C5B                     pop     ds
      0000:7C5C                     mov     ah, 33h
      0000:7C5E                     mov     al, [7C78]
      0000:7C61                     mov     bh, 45h
      0000:7C63                     mov     si, 7C74h
      0000:7C66                     mov     bl, 67h
      0000:7C68                     mov     cx, 10Bh
      0000:7C6B                     mov     dh, 89h
      0000:7C6D                     sub     [si], al
      0000:7C6F                     inc     si
      0000:7C70                     mov     dl, 0ABh
      0000:7C72                     loop    7C6D

解密完成后病毒先查看INT8(系统时钟)的中断向量是否被修改,如果没有被修改,病毒则认为自身没有被执行,然后病毒将INT8中断向量的值保存到病毒入口偏移0x6的地方。如果INT8中断向量被修改了,病毒则认为自己已经被执行了并跳转到INT8的代码段中去执行。

      0000:7C7A                 mov     ax, [0022]
      0000:7C7D                 cmp     ax, 0C000h
      0000:7C80                 jb      7CAF
      0000:7C82                 mov     [7C08], ax
      0000:7C85                 mov     ax, [0020]
      0000:7C88                 mov     [7C06], ax

为了使自己在内存中的代码不被破坏,病毒修改了内存的大小,将自己的代码复制到内存的高端,并将INT8中断向量的值改为指向病毒入口偏移0x123的地址,使得调用INT8时病毒代码得以执行。

      0000:7C92                 mov     ax, ds:413h;内存的大小
      0000:7C95                 mov     cx, 206h
      0000:7C98                 shl     ax, cl
      0000:7C9A                 mov     es, ax
      0000:7C9C                 xor     di, di
      0000:7C9E                 cld
      0000:7C9F                 repe    movsb
      0000:7CA1                 mov     [0020h], 123h;修改INT8的中断向量
      0000:7CA7                 mov     [0022h], ax;修改INT8的中断向量

在这些准备工作做好后,病毒跳转到其复制在内存高端的代码,执行其感染其他引导区的操作。

WYX病毒感染引导区时,它的另一部分代码放在硬盘的另一个扇区中。对于不同的引导区,病毒的另一部分代码所保存的扇区各不相同。病毒将这部分代码复制到病毒入口偏移0x200开始的地址。

      FF80:00B5                     push    cs
      FF80:00B6                     pop     es
      FF80:00B7                     mov     bx, 200h
      FF80:00BA                     cmp     [7DC0h], 1
      FF80:00BF                     jz      F8F0
      FF80:00C1                     cmp     [7C15h], 0F8h
      FF80:00C6                     jz      F901

病毒感染的是软盘的引导区,它会计算根目录文件分配表(FAT)的大小。如果文件分配表的大小加1大于一个磁道的大小,则将磁头号加1,扇区号为根目录文件分配表的大小减去一个磁道扇区的个数,该扇区为病毒的另一部分代码所在的扇区,病毒将这部分代码复制到病毒入口偏移0x200开始的地址。如果文件分配表的大小加1小于一个磁道的大小,则根目录文件分配表大小加1的扇区为病毒的另一部分代码所在的扇区,病毒将这部分代码复制到病毒入口偏移0x200开始的地址。

      FF80:00C8                 mov     cl, 4
      FF80:00CA                 mov     ax, [7C11h]
      FF80:00CD                 shr     ax, cl
      FF80:00CF                 mov     cx, [7C16h]
      FF80:00D3                 shl     cx, 1
      FF80:00D5                 add     ax, cx
      FF80:00D7                 inc     ax
      FF80:00D8                 mov     cx, [7C18h]
      FF80:00DC                 xor     dx, dx
      FF80:00DE                 cmp     ax, cx
      FF80:00E0                 jbe     F8E6
      FF80:00E2                 sub    ax, cx
      FF80:00E4                 inc     dh
      FF80:00E6                 mov     cx, ax
      FF80:00E8                 mov     ax, 201h
      FF80:00EB                 int     13h
      FF80:00ED                 dec     cx
      FF80:00EE                 jmp     F912

如果病毒在主引导区,则根据病毒入口偏移0x01C6h地址的数据读取病毒的另一部分代码:

      FF80:00F0                 mov     cl, [7DC6h]
      FF80:00F4                 mov     dx, 80h
      FF80:00F7                 mov     ch, 0
      FF80:00F9                 mov     ax, 201h
      FF80:00FC                 int     13h
      FF80:00FE                 dec     cx
      FF80:00FF                 jmp     F912

如果病毒在硬盘引导区,则根据病毒入口偏移0x0018h地址的数据读取病毒的另一部分代码:

      FF80:0101                 mov     cl, [7C18h]
      FF80:0105                 mov     dx, 80h
      FF80:0108                 mov     ch, 0
      FF80:010A                 mov     ax, 201h
      FF80:010D                 int     13h
      FF80:010F                 sub     cx, 2
      FF80:0112                 mov     al, 80h
      FF80:0114                 call    FA00

病毒在感染主引导区前,首先查看主引导区是否被感染。如果没有被感染,则读取引导区数据中偏移0x1C6的地址。这个地址的数据表示第一个分区起点之前已用了的扇区数,通常为0x3F。然后,将原来的主引导区数据写入第一个分区起点之前已用了的扇区,即第0x3E扇区,并将自己的另一部分代码写到0x3F扇区。如果主引导已经被感染,则继续执行以感染其他的引导区:

      FF80:020D                 mov     bx, 400h
      FF80:0210                 mov     dh, 0
      FF80:0212                 mov     cx, 1
      FF80:0215                 mov     ax, 201h
      FF80:0218                 cmp     dl, 80h
      FF80:021B                 jb      FA7D
      FF80:021D                 int     13h
      FF80:021F                 cmp     byte ptr [bx+5Ah], 0Eh;判断主引导是否已感染
      FF80:0223                 jz      FA5C
      FF80:0225                 mov     cl, [bx+1C6h];第一个分区起点之前已用了的扇区
      FF80:0229                 dec     cx
      FF80:022A                 mov     ax, 301h
      FF80:022D                 int     13h
      FF80:022F                 inc     cx
      FF80:0230                 mov     bh, 2
      FF80:0232                 mov     ax, 301h
      FF80:0235                 int     13h

在感染第一个主分区引导区之前也需要判断该引导区是否被感染。如果没有被感染,则读取引导区数据中偏移0x18h的地址,这个地址的数据表示这个分区起点之前已用了的扇区数,通常为0x3F。然后,将原来的引导区数据写入这个分区起点之前已用了的扇区,即第0x3D扇区,并将自己的另一部分代码写到0x3F扇区:

      FF80:025C                 mov     dh, 1
      FF80:025E                 mov     ax, 201h
      FF80:0261                 int     13h
      FF80:0263                 cmp     byte ptr [bx+5Ah], 0Eh;判断引导区是否已被感染
      FF80:0267                 jz      FABF
      FF80:0269                 mov     cl, [bx+18h];第一个分区起点之前已用了的扇区
      FF80:026C                 sub     cx, 2
      FF80:026F                 mov     dh, 0
      FF80:0271                 mov     ax, 301h
      FF80:0274                 int     13h

WYX对原来的引导区进行完备份之后,就开始将自己的病毒代码写入引导扇区。在写入引导扇区之前,病毒还需要将其病毒代码中的部分内容进行加密,在加密完成后才将病毒代码写入引导扇区:

      FF80:02C7                 mov     word ptr [bx], 58Ebh;设置引导区的第一条指令
      FF80:02CB                 mov     si, 5Ah;加密的起始地址
      FF80:02CE                 mov     di, 45Ah
      FF80:02D1                 mov     cx, 125h
      FF80:02D4                 cld
      FF80:02D5                 repe    movsb
      FF80:02D7                 push   ds
      FF80:02D8                 mov     ds, cx
      FF80:02DA                 mov     al, [046Ch]
      FF80:02DD                 pop     ds
      FF80:02DE                 or      al, 0Aah;计算密钥
      FF80:02E0                 mov     si, 474h
      FF80:02E3                 mov     cx, 10Bh
      FF80:02E6                 add    [si], al;加密循环的起始
      FF80:02E8                 inc     si
      FF80:02E9                 loop    FAE6
      FF80:02EB                 mov     si, 45Dh
      FF80:02EE                 mov     cl, 5
      FF80:02F0                 inc     byte ptr [si]
      FF80:02F2                 add    si, 5
      FF80:02F5                 loop    FAF0
      FF80:02F7                 inc     cx
      FF80:02F8                 mov     ax, 301h
      FF80:02FB                 int     13h

病毒对用户电脑上所有的引导区都感染完之后,将原来的引导区的数据复制到内存0000:7C00的地址,并跳转到0000:7C00执行原来的引导区代码。

4.4.5 防范引导区病毒的安全建议

为了防止感染引导区病毒,我们给出以下安全建议:

(1)尽量避免用软盘保存和传递资料。在获得由其他计算机传递的文件时,应先对软盘中的文件进行查毒。

(2)软盘用完后应立即从软驱中取出。

(3)避免在软驱中存有软盘的情况下开机或重新启动操作系统。