计算机内存病毒监控和带毒运行方法

文档序号:6572196阅读:376来源:国知局
专利名称:计算机内存病毒监控和带毒运行方法
技术领域
本发明涉及计算机系统的带毒运行技术,更具体地说,涉及一种监控在计算机平台上已运行(在内存中)的病毒(包括蠕虫、木马、恶意程序等)和让带毒文件运行而不激活病毒的方法。该方法可以阻止带毒的应用程序中的病毒部分运行,而不影响宿主应用程序的功能。
背景技术
随着计算机的广泛使用,计算机病毒的数量和种类也越来越多,它能清除用户的重要数据,甚至破坏计算机硬件,给计算机用户带来极大的危害。
清除和防治病毒的方法目前主要有两种,一种是静态扫描,通常就是启动杀毒软件,对本计算机或整个网络进行查杀毒;另一种方法是实时监控,它的基本原理是,当用户要操作某个文件时,该操作被杀毒软件捕获,杀毒软件对这个文件进行查杀毒。但是这两种方法都是基于对文件的扫描来进行查杀毒的,已经越来越难以满足查杀毒的需要,这主要有两点原因首先,现在有很多压缩工具、文件捆绑工具,这些工具改变了文件应有的结构,同时也将病毒隐藏起来,所以基于对文件的查杀就无法进行;其次,如果在杀毒软件运行之前病毒已经运行,现有的杀毒软件将无法找到病毒源,无法阻止病毒的运行。
另外,目前有一种内存查毒的方法,但是也属于静态扫描。也就是说,它是在用户启动杀毒软件并要求扫描内存时,才对内存进行查杀。它存在两个问题一是扫描时间较长,杀掉了一个病毒,可能另一个又运行起来了;二是它可能无法杀毒,因为系统出于安全性考虑,将不会允许对某些进程的操作。
但是,无论病毒在文件中存在的位置或形式如何,它要运行则必然需要装入到计算机的内存中,而且它要传染或破坏,总要调用操作系统的一些功能。如果我们能够拦截住这些功能调用,在病毒调用这些功能时查找病毒将非常准确,而且非常快。此时,我们将可以有两种选择,使病毒终止或者使病毒失败,从而让宿主程序继续运行,也就是让程序带毒运行。

发明内容
针对上述目前杀毒软件中存在的问题,本发明的目的在于提供一种在病毒已经运行但尚未进行下次传染或破坏之前能够查到病毒并将其杀掉、以及允许染毒文件带毒运行而不激活病毒的计算机内存查杀毒方法。
按照本发明的计算机内存查杀毒方法包括以下步骤病毒分析,找到病毒调用的关键的操作系统功能;拦截对操作系统功能的调用;查毒,当所述拦截的操作系统功能被调用时,对调用这个功能的代码进行分析,识别出病毒;杀毒,对于病毒的处理,如果是病毒,则根据病毒的类型并结合用户的选择,决定是将病毒杀掉,还是让病毒失败,从而使染毒文件继续运行;恢复,如果需要,恢复原来的调用环境,调用原来的系统功能。
根据本发明的内存查杀毒方法,无论病毒在文件中存在的位置或形式如何,在其运行装入到计算机的内存时,以及在其调用操作系统的一些功能传染或破坏时,都能够拦截住这些功能调用,非常准确而且非常快地将病毒查杀,使病毒终止或者使病毒失败,从而让宿主程序继续运行,也就是让程序带毒运行。


通过以下借助附图的详细描述,将会更容易地理解本发明,其中图1是根据本发明优选实施例的计算机内存查杀毒方法的监控过程建立的流程图;和图2是根据本发明优选实施例的病毒监控处理过程的流程图。
具体实施例方式
下面将结合附图详细描述本发明的优选实施例。
在此应该指出的是,根据本发明的内存查杀毒方法不仅适用于WInDOWS 9X(包括WINDOWS95、WINDOWS98、WINDOWS ME)操作系统,而且适用于其它的诸如WINDOWS NT(包括WINDOWS NT、WINDOWS2000)之类的操作系统。该方法能够在各种平台上实现内存病毒的实时查杀,并能让染毒文件带毒运行,而不激活病毒。
下面将以WINDOWS 9X平台为例具体说明本发明的计算机内存查杀毒方法的各操作步骤。对于WINDOWS系统而言,它的系统功能调用通过API函数实现,所以下面的叙述中将使用API函数代替系统功能调用。
图1是根据本发明优选实施例的计算机内存查杀毒方法的监控过程建立的流程图。
首先,在步骤S11,对病毒进行分析。在该步骤中,对各种能在WINDOWS平台上运行的病毒分析进行,找到它们要调用的两类函数,一类是在第一次运行时判断其是否能够初始化时所要调用的函数,如果让该函数返回病毒不希望的结果,则病毒将不再运行,而是运行宿主,从而做到带毒运行;另一类是在它正常运行时必须要调用的函数,通过拦截这个函数,能够在病毒进行下次传染或破坏之前将其查到并杀掉。这两类函数对于某个病毒而言,可能各需一个,也可能需要几个。将这些信息组合在一起,建立一个数据库,称为病毒库。它包括调用的函数名称、病毒的特征描述、病毒的处理方法等。
例如,对于CODERED病毒,它要启动,就必须调用GetProcAddressA这个API函数,如果在它调用这个API函数失败时,也就说,函数返回空时,它将放弃运行,也就不会感染其它计算机系统或对本计算机系统进行破坏。另外,在正常运行过程中,它要传染其它计算机系统和文件,则必然要调用socket函数。
然后,在步骤S12,运行病毒监控程序,准备好所有的要拦截API函数。这些函数是在步骤S11中分析得到的病毒启动时和正常运行期间所需要调用的系统功能。
接着,在步骤S13,拦截上述分析得到的函数,使系统功能调用函数指向实时病毒监控处理过程。
对于WINDOWS来说,它的每一个进程的地址空间是独立的。而要查杀所有进程中的病毒,则需要拦截所有进程的函数调用。为此,需要启动一个特意编写的设备驱动程序,该设备驱动程序的作用是使对API的拦截对所有的进程起作用,包括现有的和将来要产生的。通过对这个设备驱动程序的调用,拦载所有上述分析过程中得到的函数,并为这些函数调用提供一个统一的处理程序,将函数标识和调用者代码传给处理程序,以备查杀毒用。在完成所有的拦截操作后,该设备驱动程序就不再起任何作用。
具体地说,是先将要拦截API函数的处理程序初始化,以准备接收API函数的调用,然后将要拦截的API函数的入口代码一一加以修改,使其指向预定的代码,这段代码的作用是将API的标识和调用者的代码地址压入栈中,然后调用API函数处理程序,待API函数处理程序返回后,再运行原来的被取代的指令,然后转到该API函数的后续指令执行。例如某个API的入口代码为PUSH EBPMOV EBP,ESPADD ESP,200后续指令这是非常常见的API入口指令,我们将这段指令保存到别处,然后将它修改为JMP XXXXXXXX处是一段处理程序,它的代码如下PUSH API标识CALL API处理程序ADD ESP,4PUSH EBPMOV EBP,ESPADD ESP,200JMP 后续指令到此,已经建立了对病毒进行实时监控的环境。也就是说,当一个染毒文件运行时,将会调用某个上述已经拦截的函数,这时,通过在步骤S13中的处理,将会进入到预定的处理程序,即,进入病毒监控过程。
下面,将参照图2所示的病毒监控过程详细描述对系统功能调用的处理,即,对带毒程序所调用的函数的处理。
首先,当在步骤S21一段代码调用被拦截的系统调用时,则在步骤S22保存当前的调用环境。
接着,在步骤S23,将函数的调用者与病毒库进行比较,从而知道是什么病毒在运行,并标识这是病毒初始运行,也就是说宿主还未运行。
另外一种情况是,如果一个病毒在根据本发明的预定的处理程序运行之前已经运行,也就是说宿主已运行,并且病毒驻留在系统中,那么,这时它要感染其它文件或要进行破坏,也要调用某个函数,该函数也属于在上一步中已经拦截的函数,此时同样又进入所述预定的处理程序,将函数调用者与病毒进行比较,找到是什么病毒在运行,并标识这是运行过程中的调用。
比如某个病毒在启动时执行下面的代码向系统申请12K内存如果申请到了,转M处执行C否则,取一个数A对A取反,为B转到B处的地址执行。M将自己复制到申请的内存中。
…创建一个线程,运行自己的拷贝转C处执行以上代码就基本构成了该病毒的特征,当然为安全起见,通常不止取一处特征。
对于它的感染或破坏过程,它必然执行以下列代码保存文件属性,保存到F处修改文件属性为可读写打开文件将文件40字节读到G处转3C所指示的偏移读200字节取程序入口B,对B取反后保存到A处,以上代码也基本构成了该病毒的特征,为安全起见,可以取更多的特征。
如果在调用者代码中查到了这些特征,则认为查到了病毒。
然后,在步骤S24中判断是否发现病毒。根据在步骤S23中的比较结果进行判断,如果没有查到病毒,则执行步骤S28和S29,恢复原来的调用环境,调用原来的系统函数,然后前进到步骤S30,功能调用返回。否则,如果确定发现了病毒,则前进到步骤S25。
在步骤S25中,根据在步骤S23中得到的病毒库的数据和标识,如果是病毒初始运行,则执行步骤S26;如果病毒已经运行,则执行步骤S27。
在步骤S26,让目前系统的这个函数返回给定结果,该结果将会让病毒失败。如果该函数结果不足以让病毒失败,此时可以修改病毒下一步要运行的代码,从而让它失败。
具体到上面的例子,就是让申请内存的函数返回0,这样这个病毒就不会执行,因为B是宿主程序的入口。也就是说,病毒的感染或破坏代码根本没有机会执行。这样系统就可以带毒运行,不会影响宿主的的正常执行,病毒也不会被激活。
如果在步骤S25中判断病毒已经运行,则执行步骤S27。在步骤S27中,根据病毒库中的数据,决定是终止当前线程,还是终目当前进程。对于上面的例子,我们可以终止当前线程。
如上所述,采用本发明的内存查杀毒方法,无论病毒在文件中存在的位置或形式如何,都能够拦截病毒对系统功能的调用,非常准确而且非常快地实时将病毒查杀,使病毒终止或者使病毒失败,从而让宿主程序继续运行,也就是让程序带毒运行。
虽然本发明已以前述优选实施例说明,然其并非用于限制本发明,任何本领域的普通技术人员,在不脱离本发明的精神和范围的情况下,可作各种的更动与修改。因此本发明的保护范围以后附的权利要求为准。
权利要求
1.一种计算机内存查杀毒方法,包括以下步骤病毒分析,找到病毒调用的关键的操作系统功能,建立病毒库;拦截对操作系统功能的调用;查毒,当所述拦截的操作系统功能被调用时,对调用这个功能的代码进行分析,识别出病毒;杀毒,对于病毒的处理,如果是病毒,则根据病毒的类型并结合用户的选择,决定是将病毒杀掉,还是让病毒失败,从而使染毒文件继续运行;以及恢复,如果需要,恢复原来的调用环境,调用原来的系统功能。
2.如权利要求1所述的计算机内存查杀毒方法,其中所述系统指包括WINDOWS95、WINDOWS98、WINDOWS ME的WINDOWS操作系统,以及包括WINDOWS NT、WINDOWS2000的WINDOWS NT操作系统。
3.如权利要求1所述的计算机内存查杀毒方法,其中所述病毒库包括病毒所调用的两类函数,一类是在第一次运行时判断病毒是否能够初始化时所要调用的函数,通过让该函数返回病毒不希望的结果,使病毒将不再运行,而是运行宿主,从而做到带毒运行;另一类是病毒正常运行时必须要调用的函数,通过拦截这个函数,能够在病毒进行下次传染或破坏之前将其查到并杀掉。
4.如权利要求3所述的计算机内存查杀毒方法,其中所述病毒库还包括调用的函数名称、病毒的特征描述、病毒的处理方法等。
5.如权利要求2所述的计算机内存查杀毒方法,其中对于WINDOWS操作系统,所述系统功能调用通过API函数实现。
6.如权利要求1所述的计算机内存查杀毒方法,其中在拦截对操作系统功能的调用步骤中进一步包括下述步骤启动一个设备驱动程序,通过调用该设备驱动程序,拦截所有分析过程中得到的函数,并为这些函数调用提供一个统一的处理程序,将函数标识和调用者代码传给处理程序,以备查杀毒用;并且在完成所有的拦截操作后,该设备驱动程序就不再起任何作用。
7.如权利要求1所述的计算机内存查杀毒方法,其中在查毒步骤中,进一步判断病毒初始运行还是已经驻留在系统中;如果是初始运行,则让当前的系统函数返回使病毒失败的给定结果;如果判断病毒已经运行,则根据病毒库中的数据,决定是终止当前线程,还是终止当前进程。
8.如权利要求7所述的计算机内存查杀毒方法,其中如果在病毒是初始运行时返回的函数结果不足以让病毒失败,则修改病毒下一步要运行的代码,从而让它失败。
9.如权利要求1所述的计算机内存查杀毒方法,其中为安全起见,获取病毒的多种特征。
全文摘要
本发明涉及一种计算机内存查杀毒方法,包括以下步骤病毒分析,找到病毒调用的关键的操作系统功能;拦截对操作系统功能的调用;查毒,当所述拦截的操作系统功能被调用时,对调用这个功能的代码进行分析,识别出病毒;杀毒,对于病毒的处理,如果是病毒,则根据病毒的类型并结合用户的选择,决定是将病毒杀掉,还是让病毒失败,从而使染毒文件继续运行;恢复,如果需要,恢复原来的调用环境,调用原来的系统功能。
文档编号G06F11/30GK1409222SQ0114215
公开日2003年4月9日 申请日期2001年9月14日 优先权日2001年9月14日
发明者王耀华 申请人:北京瑞星科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1