CSK.Blog--个人原创Weblog

« 谁需要gmail邀请已实现CSK.blog与MSN Space同步更新 »

连载:《windows亲手灭毒宝典》之二

前沿:作为对曾经我提过的要写些教程的兑现,这里先把我在交大计算机协会作的讲座《windows亲手灭毒宝典》放上来。当然其中的内容比我实际讲的要多,且要难。 由于第一次写教程,加上自己水平有限,文中出现的问题希望各位及时指正,谢谢! 文章为CSK原创,转载请保留原作者和引用作者的版权信息。 CSK版权所有 --------------------------------------------------------------------------------- 呵呵,上次第一篇还是很久前写的了~~ 第一回的地址:[url]http://www.csksoft.net/blog/post/7.html[/url] 第二回:进入正题 windows下亲手灭毒之完全解决方案 本文不需要你具有诸如程序开发等方面的专业技能,但如果有一定的经验可以帮助你更好的理解 1.感性认识的建立-病毒的文件形式和各自特征 所谓病毒,一般都是指可以执行的数据体,说白了就是那些exe,dll等程序文件,当然情况也许更复杂,程序这个概念是脱离与具体的文件形式的,他们只是一段数据而以,应该所谓的病毒可能包括与诸如txt文件中,但很少见(.txt就算包含病毒也是无法自我加载的)。 目前在win32环境下,常见的病毒是以exe;com;dll;scr等扩展名存在的。同时也能见到cmd;bat;vbs这类脚本性病毒(你可以了解些脚本script的知识)。 一般情况下,我们把.exe的文件叫做应用程序,这样说的原因一方面是因为他是可执行的,也就是无需借助其他程序而自我启动(严格的说都无法做到自我启动,这里就不涉及了)。对于病毒体,为了能在复制后马上感染侵占系统,它需要这方面的特征。 所以在下面的文章中,你会发现给出的病毒例子都是.exe文件 dll文件叫做“动态链接库”(dynamic link library),它的名字含义这里不再深究,不过你需要明白他是无法自我启动,也就是不可直接执行的。dll文件中同样也包含程序的代码,但他们是需要被其他可执行程序,如exe加载以后才能执行其中的代码部分的。
图:作为系统核心之一的user32.dll,正因为是dll文件,它能结合到每个程序进程,提供必要的系统支持
所以我们就知道,以dll格式存在的病毒无法直接运行,他们需要另一个如exe的程序事先加载后才能工作(有3种可供参考的方式,一是另一个exe程序也是病毒体,它直接加载dll文件作为自身一部分,第二种方式采用系统自带的rundll32.exe加载,第三种是比较讨厌的情况,dll文件开始又另一个exe文件主动加载后,利用被称为钩子hook技术将dll注入到其他的程序进程中。这用的病毒是最难清除的)。
图:在任务管理器中看到的rundll32.exe的进程实际起作用是加载了的dll文件
如果病毒主体以dll文件存在以后,他必须指明加载它的程序,这可能给其传播造成一定障碍,但有带来了很多优势。比如: 1.由于windows自带的进程管理器(WindowNT)只能以主进程文件为单位察看进程,可以认为是只能看到正在运行的exe文件,而一般看不到正在执行的dll文件(因为dll是exe加载的,它映射到了exe为进程的地址空间了)。所以一般在没有第3放工具的情况下,是无法通过任务管理器找到正在运行的dll文件病毒的。 2.无法直接将正在运行的dll文件病毒关闭,这样说是因为dll文件都映射到了加载它的exe文件中了,利用进程管理器只能将它属于的进程程序一起关闭。比如word因中毒而加载了virus.dll病毒的文件体,那么想从内存中清除病毒只能把word也关闭了 3.利用上面的特点,可以做到病毒体永远驻留内存而无法清除。其实方法很简单,利用钩子技术,将dll注入到系统所有的进程中,同时这些dll监控着每个进程是否被自己注入,如果没有则重新注入。这样除非关闭所有程序,否则永远无法关闭运行中的病毒。
图:采用PEid自带的任务察看器,可以发现实际上所有进程都加载了其他的dll文件。而且无法把其中莫一个dll关闭
当然还有更极端的情况,那就是利用驱动程序来编写病毒(几乎没有这种情况,所以你可以跳过)。 首先这里说一下x86保护模式的事情。你应该知道目前你正在运行windows的CPU工作在成为32位保护模式的环境下。你不用被这个神秘的名词吓倒,他其实就是一种等级管理机制:程序在运行时有ring0和ring3的2种权限,ring0程序拥有很高的权利,它能操作计算机所有的硬件设备,而ring3程序则十分可怜,他只能乖乖受ring0程序管理,同时基本上无法直接对硬件进行操作,而必须通过ring0的程序中转。 这就是windows中各类程序的现状:操作系统的内核、一些服务程序、驱动程序都是ring0级别的,他们能对你的电脑做任何能做的事情,而一般意义上的程序,如exe文件的程序都是ring3的。 这样做一方面是为了实现多任务环境,同时更重要的是能使系统运行的非常稳定:ring3程序无法直接控制硬件,必须通过ring0程序,这样如果有个设计有缺陷或者不怀好意的程序企图进行破坏性操作时,他就能被ring0程序截获并强行中止。 所以可以知道,如果病毒写成了一个驱动程序(ring0级别),那是很危险的,最好的例子就是CIH! 这类病毒的名字往往以wdm和drv为主(后者是win9x的标准,在最新的windows内核中以被淘汰)。不果他们和dll文件一样,无法自我加载。 上面以程序文件的角度分析了几类病毒格式的工作方式,当然大家不用被提到的极端例子吓怕了。下回将告诉你这些病毒是如何感染并永久的在系统中存活下去的 CSK版权所有,演讲ppt在ftp.csksoft.net中下载。

发表评论:

注意:为了有效防止SPAM,任何含有http://字样的消息会被阻止发布同时,本站仅供技术交流,请不要讨论任何政治敏感话题或者低级趣味问题。

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

日历

最新评论及回复

最近发表

Copyright Shikai Chen 2000-2012. Powered By Z-Blog(CSK Modified)