按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
随机的移动指令,然后利用跳转(JMP)或者调用(CALL)指令使病毒代码仍然能够实现原来的功能。另外一种“TMC”病毒没有在运行过程中改变代码,但是在感染的时候,整个代码的分段、偏移量和填充代码的分布都是可以随机变化的,这样虽然病毒没有对自己进行加密/解密,仍然可以看成一种多态病毒,使用传统的特征代码比较法很难准确的查到病毒并且安全的清除。
第五节 看不见的战斗——病毒的隐藏技术
病毒在进入你的系统之后,会采取种种方法隐藏自己的行踪,让你无法感觉到病毒的存在,在引导型病毒、文件型病毒、宏病毒以及视窗环境下的病毒采用了不同的技术达到这个目的。
引导型病毒的隐藏技术
引导病毒的隐藏有两种基本的方法:
一种是改变基本输入输出系统(BIOS)中断13H(十六进制)的入口地址使其指向病毒代码之后,发现调用INT13H读被感染扇区的请求的时候,将原来的没有被感染过的内容返回给调用的程序,这样,任何DOS程序都无法觉察到病毒的存在,如果反病毒软件无法首先将内存中的病毒清除的话(也就是说首先恢复被替换的IN13H中断服务程序),同样无法清除这种病毒。
另外一种更高明的方法是直接针对杀毒软件的,为了对付上面所说的病毒隐藏手段,一些杀毒软件采用直接对磁盘控制器进行操作的方法读写磁盘扇区。病毒的制造者们当然不会甘心束手就擒,他们使用了在加载程序的时候制造假象的方法,当启动任何程序的时候(包括反病毒程序),修改DOS执行程序的中断功能,首先把被病毒感染的扇区恢复原样,这样即使反病毒程序采用直接磁盘访问也只能看到正常的磁盘扇区,当程序执行完成后再重新感染。对付这种病毒的唯一方法是在进行病毒检测之前首先清除内存中的所有病毒。
引导型病毒为了隐藏自己,经常采用更改活动引导记录、使病毒代码看起来非常类似于正常启动代码等方法,尽可能减少被杀毒软件发现的可能性。
文件型病毒的隐藏技术
文件型病毒的隐藏技术和引导型病毒使用的技术非常类似,同样是替换DOS或者基本输入输出系统(BIOS)的文件系统相关调用,在打开文件的时候将文件的内容恢复未感染的状态,在关闭文件的时候重新进行感染。
由于访问文件型病毒的方式、方法非常多,所以实现完全的文件型病毒隐藏是一件非常困难的任务,一个完整的隐藏技术应该改包括对下面几个方面的处理:
一般的文件型病毒仅仅使用其中的一部分隐藏技术,最常见的是对列目录进行隐藏,这样在使用DIR命令列目录的时候,看到的文件大小是病毒提供的,从实际大小减去病毒大小的数值,这样你就不会感觉到病毒的存在。但是如果使用诺顿磁盘工具或者“PCTools”等工具查看磁盘的时候,由于这些工具使用了直接磁盘存取技术,不通过DOS中断获得文件的大小,所以你可以看到感染病毒后文件的实际大小,这种方法经常被推荐用来检查是否有病毒的存在。在没有合适的工具情况下,不失为一种简单有效的方法。
宏病毒的隐藏技术
宏病毒的隐藏技术和引导型病毒以及文件型病毒比起来要简单很多,只要在WORD/EXCEL中禁止菜单:文件-》模板 或者 工具-》宏就可以隐藏病毒了,可以通过宏病毒代码删除菜单项以及宏病毒用自己的FileTemplates和ToolsMacro宏替代系统缺省的宏就可以了。
第六节 病毒是如何进入内存的
大部分病毒都包括了内存驻留的部分,当被感染的文件执行之后,一部分病毒进入内存,并且一直呆在那儿,即使程序执行完毕。这部分内存中的代码会执行感染文件或者引导区的操作,因此,如果内存中仍然存在病毒的话,即使将硬盘上所有感染病毒的文件都彻底清除,病毒仍然会在进行任何文件访问后重新感染。
对于不包括内存驻留部分的病毒,清除就简单得多,因为病毒只有在执行之后才进行短暂的感染,所以执行杀毒程序,彻底检测和清除硬盘上的文件就可以完全清除病毒了。
DOS环境下的内存驻留
对于标准的DOS中止并且驻留程序(TSR)程序来说,有两种方法可以使用,一种是通过在CONFIG。SYS中作为设备驱动程序加载。另外一种是调用DOS中断INT21H(或者INT27H)的退出但仍然驻留功能。但是病毒不是常规的TSR程序,病毒通常会使用更加巧妙的方法驻留内存,下面是一些病毒经常隐身所在的地方:
DOS环境下的内存驻留病毒会修改大量的DOS INT21H功能,根据调用所处理的文件后缀名或者文件类型决定是否进行感染。主要修改的INT21H功能包括:
* 执行文件 (EXEC; AX=4B00)。
* 装入内存 (LOADAH=4BH);。
* 搜索(列目录功能)(FindFirst 和 FindNext; AH=11h;21h;4Eh;4Fh)。
* 创建文件(CREATE; AH=3Ch)。
* 打开文件(OPEN; AH=3Dh)。
* 关闭文件(CLOSE; AH=3Eh)。
* 改变文件属性(CHMMODE; AH=43h)。
* 文件改名(RENAME; AH=56h)
内存驻留病毒在装入内存中之后,需要使用一种方式告诉随后执行的被感染文件,内存中已经加载了病毒代码,不需要再把病毒放到内存中了。有下面几种简单的方式可以达到这个目的:
* 修改某些中断,增加一个功能号,比如说中断21H,增加一个AX=FFFFH的调用,如果返回1表示病毒存在,病毒不存在的话,DOS会返回0。
* 在一些很少使用的内存区域中,放置病毒存在的标志。
有一些内存驻留病毒,比如说使用病毒制造库生成的病毒,由于不正确的实现了防止重新加载的算法,会造成病毒反复加载,这样会造成其中的一个不能正常工作,如果加载的次数过多会使系统内存耗尽,造成死机。
引导区病毒的内存驻留
引导区内存驻留程序使用类似的方法将病毒代码放入系统内存中,这样会造成系统可用内存减少,由于引导病毒通常都比较小,所以一般减少的内存都只有1K或者几K。
为了避免用户可以很容易的觉察到系统可用内存的减少,一些病毒会等待DOS完全启动成功,然后使用DOS自己的功能分配内存,这样不会显示整个可用内存减少,而是在DOS可用的内存中增加了一小个常驻的程序,这样往往不会引起用户的警觉。
引导区内存驻留程序往往不包括重入检测部分,因为引导区病毒只会在系统启动的时候加载一次。
视窗环境下病毒的内存驻留
视窗环境下病毒可以通过三种方法驻留内存,由于视窗操作系统本身就是多任务的,所以最简单的方法是将病毒作为一个视窗环境下的应用程序,拥有自己的窗口(可能是隐藏的)、拥有自己的消息处理函数;另外一种方法是使用DPMI申请一块系统内存,然后将病毒代码放到这块内存中;第三种方法是将病毒作为一个VXD(视窗3。x或者视窗9x环境下的设备驱动程序)或者在视窗NT/视窗2000下的设备驱动程序VDD加载到内存中运行。
在视窗环境下,进行一次文件系统调用可以有几种途径,一种是通过传统的21H号中断,这和通常的DOS环境下病毒的感染方法是一样的,另外一种是通过视窗环境的应用程序编程接口(API)进行,这种方式最后都会归结到VXD调用,所以通过VXD形式的内存驻留病毒可以拦截这些调用并进行感染。
传统的防止病毒重新加载的方法基本上在视窗环境下也是可用的,对于VXD病毒,静态加载的会在“SYSTEM。INI”中包含加载设备驱动程序的一行,动态加载的可能使用某些英特尔CPU的一些特殊状态位来表示病毒是否存在于内存中(CIH病毒就采用了这种方法)。
宏病毒的内存驻留方法
宏病毒是一类特殊的病毒,它主要存在于WORD和EXCEL环境中,一旦WORD和EXCEL运行起来,病毒就会被加载并且一直存在于系统中,所以从某种意义上,宏病毒都是内存驻留病毒。
宏病毒通常也会进行重入检测,发现一个文档中已经包含了病毒的特征就不会再对这个文档进行感染,这样可以防止反复感染造成文档不断增大甚至损坏。
重入检测和病毒免疫
由上面的叙述可以知道,大部分驻留内存的病毒会在加载病毒代码之前,检查系统的内存状态(判断内存中是否有病毒),感染文件之前,查看文件的状态,看看该文件是否已经被感染了,如果被感染了则不再重复感染。这种机制导致了一种反病毒技术的出现,也就是形形色色的免疫程序,使用一个程序设置内存的状态,设置CPU的状态或者设置文件的一些特征,从而防止某种特定的病毒进入系统。
从实际的作用来看,这种免疫程序的作用是有限的,因为只有对病毒进行了详细的分析才能够编写出这样的免疫程序,而如果已经对病毒进行了详细的分析,应该可以很方便的编写出检查和清除病毒的程序,所以与其使用这种免疫程序防止病毒的感染,不如在执行文件之前进行彻底的病毒检测以防止执行带有病毒的程序。
第七节 浏览就可以传染—可怕的脚本病毒
随着因特网的广泛使用,电脑病毒也出现了新的发展趋势,脚本病毒在1999年以后已经成为最主要的病毒类型之一。脚本病毒类似于前面所描述的宏病毒,但是它的执行环境不再局限于WORD、EXCEL等微软OFFICE应用程序,而是随着微软将脚本语言和视窗操作系统日益紧密的结合,扩展到网页、HTA(基于HTML的应用程序),甚至文本文件中。
脚本语言:脚本语言是介于 HTML 和 Java、C++ 和 Visual Basic 之类的编程语言之间的语言。HTML 通常用于格式化文本和链接网页,基本上没有什么处理功能,编程语言通常用于表示一系列复杂指令和逻辑。脚本语言也可用来向计算机发送指令,但它们的语法和规则没有可编译的编程语言那样严格和复杂,而且脚本语言是解释执行的,直接可以执行脚本语言的文本而不需要使用一个庞大的编译器将脚本语言编译成机器语言。执行脚本语言需要一个脚本语言引擎解释执行脚本语言编写的程序。主要的脚本语言包括下面几种:
* 活动服务器页面(Active Server Pages),在因特网服务器端执行的脚本,构造变化多端的页面供浏览。
* 微软可视化BASIC脚本语言(Microsoft Visual Basic Scripting Edition),使用微软视窗操作系统内置的脚本引擎。
* 爪哇脚本语言(Java Script)使用浏览器内置的脚本引擎执行。
其他的脚本语言还有PHP、REXX、PERL等。由于能自我复制、扩散的程序就可以成为病毒了,脚本语言的功能越来越强大,现代的脚本语言基本上可以完成所有的文件系统操作,所以使用脚本语言的病毒的出现也就成为必然。
脚本语言病毒的基本原理
脚本语言存在的一个最重要的基础和前提是,如何满足病毒的基本前提,复制自身?
使用VBScript可以很容易的完成这个任务。下面是一个普通的VBscript脚本程序(由于众所周知的原因,我们在这里使用的是伪代码而不是实际的VBScript语言代码):
设置 对象1 = 创建对象(“Scripting。FileSystemObject”) //创建一个文件操作对象对象1。创建文本文件( 〃virus。txt〃; 1) //通过这个文件对象的方法创建一个TXT文件
如果我们把这两句话保存成为后缀名为。vbs的VBS脚本文件,点击就会在当前目录创建一个文本文件。
如果把第二句改为:
对象1。获取文件(WScript。ScriptFullName)。拷贝(〃virus。vbs〃)
就可以将自身复制到当前目录的virus。vbs文件中。它的意思是把程序本身的内容拷贝到目的位置。这么简单的两行代码就实现了自我复制的功能,已经具备病毒的基本特征。
下面的一些伪代码,可以实现对微软邮件系统的感染,具有一个脚本病毒的基本功能:
伪代码 代码的说明
上面的代码就可以通过Outllok的邮件系统把自己以附件的方式扩散出去。
从这些简单的伪代码中,我们可以看出,仅仅这么简单的几行代码,就能成为具有自我复制、繁殖、骚扰网络的病毒了。当然,我们可以为它添加更多的本领,比如:修改注册表、删除文件、发送被感染者的文件、隐藏自己,感染其他文件。其实,以目前视窗系统的编程开放特性,以及脚本语言和视窗操作系统的紧密集成,上面的功能都很容易实现。一个中级的VB程序员,没有任何的汇编知识,很容易就能制作类似的蠕虫病毒。
计算机世界的不断