杀毒软件是如何工作的?电脑杀毒的几种方式介绍( 三 )


⑵、驱动程序的编写有问题,与HAL层有冲突 。
因此,片面地认为微软的操作系统将会影响Norton的稳定性是不合理的 。
业界有人认为,先进杀毒软件的引擎设计已经日趋复杂,类如Norton这一类的厂商其产品的引擎应该已经覆盖了操作系统的各个层级,以提高防护能力 。在一篇文档中有程序员提出有足够的信息认为Norton,Mcafee,趋势的产品自己修改了标准的系统相关协议,比如TCP/IP等,以达到所谓的完整防护的目的 。NOD32的一篇官方文档,就指出,反病毒厂商有必要全面更新系统的诸多协议,以达到最快的速度和杀毒效果 。
二、病毒技术浅析
要讨论怎样反病毒,就必须从病毒技术本身的讨论开始 。正是所谓“知己知彼,百战不殆” 。很难想象一个毫无病毒写作经验的人会成为杀毒高手 。目前国内一些著名反病毒软件公司的研发队伍中不乏病毒写作高手 。只不过他们将同样的技术用到了正道上,以毒攻毒 。当今的病毒与DOS和Win 3.x时代下的从技术角度上看有很多不同 。最大的转变是:引导区病毒减少了,而脚本型病毒开始泛滥 。原因是在当今的操作系统下直接改写磁盘的引导区会有一定的难度(DOS则没有保护,允许调用INT13直接写盘),而且引导区的改动很容易被发现,并且微软在设计操作系统时加强了对引导区的程序行为管理,写一个完美的引导区病毒难度很大,所以很少有人再写了;而脚本病毒以其传播效率高且容易编写而深得病毒作者的青睐 。但是最最落后的杀毒引擎也就是只基于静态代码的杀毒引擎都能干掉该种病毒(病毒库搞好就行) 。
要讨论的技术主要来自于二进制外壳型病毒(感染文件的病毒),并且这些技术大都和操作系统底层机制或386以上CPU的保护模式相关,值得研究 。DOS下的外壳型病毒主要感染 16位的COM或EXE文件,由于DOS没有(文件和引导区)保护,它们能够轻松地进行驻留,减少可用内存(通过修改MCB链),修改系统代码,拦截系统服务或中断 。而到了WIN9X和WINNT/2000时代,搞个运行其上的32位Windows病毒变得难了点 。由于存在页面保护,你不可能修改系统的代码页(如果你强到连操作系统代码都能改,偶无话可说) 。由于I/O许可位图中的规定,你也不能进行直接端口访问 。在Windows中,你不可能像在 DOS里那样通过截获INT21H来拦截所有文件操作 。总之,当你以一个用户态权限运行,你的行为就会受到操作系统严格的控制(在Win XP中,这种权限管理极为严格,分成了好几个等级) 。Windows下采用的可执行文件格式和DOS下的EXE文件截然不同(普通程序采用PE,驱动程序采用LE格式),所以病毒的感染文件的难度增大了(PE和LE比较复杂,中间分了若干个节,如果感染错了,将导致文件不能继续执行) 。当今病毒的新技术太多,随便介绍几个 。
1、系统核心病毒
386及以上的X86 CPU实现了4个特权级模式(Windows只用到了其中两个),其中特权级0(Ring0)是留给操作系统代码,设备驱动程序代码使用的,它们工作于系统核心态;而特权极3(Ring3)则给普通的用户程序使用,它们工作在用户态 。运行于处理器核心态的代码,不受任何的限制,可以自由地访问任何有效地址,进行直接端口访问 。而运行于用户态的代码则要受到处理器的诸多限制,它们只能访问映射其地址空间的页表项中规定的在用户态下可访问页面的虚拟地址,且只能对任务状态段(TSS)中I/O许可位图(I/O Permission Bitmap)中规定的可访问端口进行直接访问(此时处理器状态和控制标志寄存器EFLAGS中的IOPL通常为0,指明当前可以进行直接I/O的最低特权级别是Ring0) 。以上的讨论只限于保护模式操作系统,像在DOS这种实模式操作系统里,则没有这些概念,其中的所有代码都可被看作运行在核心态 。既然运行在核心态有如此之多的优势,那么病毒当然没有理由不想得到Ring0 。处理器模式从Ring3向Ring0的切换发生在控制权转移时,有以下两种情况:访问调用门的长转移指令CALL,访问中断门或陷阱门的INT指令 。现代操作系统通常使用中断门来提供系统服务,通过执行一条陷入指令完成模式切换 。在X86处理器上,这条指令是INT;在Win 9X下是INT30(保护模式回调);在Linux下则是INT80;在Win NT/2000下是INT2E 。用户模式的服务程序(如系统DLL)通过执行一个INTXX来请求系统服务,然后处理器模式将切换到核心态,工作于核心态的相应的系统代码将服务于此次请求,并将结果传给用户程序 。

推荐阅读