著录项信息
专利名称 | 计算机内存病毒监控和带毒运行方法 |
申请号 | CN01142156.8 | 申请日期 | 2001-09-14 |
法律状态 | 权利终止 | 申报国家 | 中国 |
公开/公告日 | 2003-04-09 | 公开/公告号 | CN1409222 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F11/30 | IPC分类号 | G;0;6;F;1;1;/;3;0;;;G;0;6;F;9;/;4;4;5查看分类表>
|
申请人 | 北京瑞星科技股份有限公司 | 申请人地址 | 北京市海淀区中关村大街22号13层A1305
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京瑞星网安技术股份有限公司 | 当前权利人 | 北京瑞星网安技术股份有限公司 |
发明人 | 王耀华 |
代理机构 | 北京市柳沈律师事务所 | 代理人 | 黄小临 |
摘要
本发明涉及一种计算机内存查杀毒方法,包括以下步骤病毒分析,找到病毒调用的与病毒感染或破坏相关的操作系统功能,建立病毒库;拦截对操作系统功能的调用;保存当前的调用环境;保存调用函数的函数标识和调用者代码;查毒,当所述拦截的操作系统功能被调用时,将调用者代码与所述病毒库进行比较,识别出病毒;判断病毒是初始运行还是已经运行;杀毒,对于病毒的处理,如果是病毒,并且病毒是初始运行,则根据病毒的类型并结合用户的选择,决定是将病毒杀掉,还是让病毒失败,从而使染毒文件继续运行;如果病毒已经运行,则执行终止操作;以及恢复,如果没有发现病毒,恢复原来的调用环境,调用原来的系统功能。
技术领域\n本发明涉及计算机系统的带毒运行技术,更具体地说,涉及一种监控在 计算机平台上已运行(在内存中)的病毒(包括蠕虫、木马、恶意程序等) 和让带毒文件运行而不激活病毒的方法。该方法可以阻止带毒的应用程序中 的病毒部分运行,而不影响宿主应用程序的功能。\n 背景技术\n随着计算机的广泛使用,计算机病毒的数量和种类也越来越多,它能清 除用户的重要数据,甚至破坏计算机硬件,给计算机用户带来极大的危害。\n清除和防治病毒的方法目前主要有两种,一种是静态扫描,通常就是启 动杀毒软件,对本计算机或整个网络进行查杀毒;另一种方法是实时监控, 它的基本原理是,当用户要操作某个文件时,该操作被杀毒软件捕获,杀毒 软件对这个文件进行查杀毒。但是这两种方法都是基于对文件的扫描来进行 查杀毒的,已经越来越难以满足查杀毒的需要,这主要有两点原因:首先, 现在有很多压缩工具、文件捆绑工具,这些工具改变了文件应有的结构,同 时也将病毒隐藏起来,所以基于对文件的查杀就无法进行;其次,如果在杀 毒软件运行之前病毒已经运行,现有的杀毒软件将无法找到病毒源,无法阻 止病毒的运行。\n另外,目前有一种内存查毒的方法,但是也属于静态扫描。也就是说, 它是在用户启动杀毒软件并要求扫描内存时,才对内存进行查杀。它存在两 个问题:一是扫描时间较长,杀掉了一个病毒,可能另一个又运行起来了; 二是它可能无法杀毒,因为系统出于安全性考虑,将不会允许对某些进程的 操作。\n但是,无论病毒在文件中存在的位置或形式如何,它要运行则必然需 要装入到计算机的内存中,而且它要传染或破坏,总要调用操作系统的一些 功能。如果我们能够拦截住这些功能调用,在病毒调用这些功能时查找病毒 将非常准确,而且非常快。此时,我们将可以有两种选择,使病毒终止或者 使病毒失败,从而让宿主程序继续运行,也就是让程序带毒运行。\n 发明内容\n针对上述目前杀毒软件中存在的问题,本发明的目的在于提供一种在病 毒已经运行但尚未进行下次传染或破坏之前能够查到病毒并将其杀掉、以及 允许染毒文件带毒运行而不激活病毒的计算机内存查杀毒方法。\n按照本发明的计算机内存查杀毒方法,包括以下步骤:病毒分析,找到 病毒调用的与病毒感染或破坏相关的操作系统功能,建立病毒库;拦截对操 作系统功能的调用;保存当前的调用环境;保存调用函数的函数标识和调用 者代码;查毒,当所述拦截的操作系统功能被调用时,将调用者代码与所述 病毒库进行比较,识别出病毒;判断病毒是初始运行还是已经运行;杀毒, 对于病毒的处理,如果是病毒,并且病毒是初始运行,则根据病毒的类型并 结合用户的选择,决定是将病毒杀掉,还是让病毒失败,从而使染毒文件继 续运行;如果病毒已经运行,则执行终止操作;以及恢复,如果没有发现病 毒,恢复原来的调用环境,调用原来的系统功能。\n根据本发明的内存查杀毒方法,无论病毒在文件中存在的位置或形式如 何,在其运行装入到计算机的内存时,以及在其调用操作系统的一些功能传 染或破坏时,都能够拦截住这些功能调用,非常准确而且非常快地将病毒查 杀,使病毒终止或者使病毒失败,从而让宿主程序继续运行,也就是让程序 带毒运行。\n 附图说明\n通过以下借助附图的详细描述,将会更容易地理解本发明,其中:\n图1是根据本发明优选实施例的计算机内存查杀毒方法的监控过程建立 的流程图;和\n图2是根据本发明优选实施例的病毒监控处理过程的流程图。\n 具体实施方式\n下面将结合附图详细描述本发明的优选实施例。\n在此应该指出的是,根据本发明的内存查杀毒方法不仅适用于 WINDOWS 9X(包括WINDOWS95、WINDOWS98、WINDOWS ME)操作 系统,而且适用于其它的诸如WINDOWS NT(包括WINDOWS NT、 WINDOWS2000)之类的操作系统。该方法能够在各种平台上实现内存病毒 的实时查杀,并能让染毒文件带毒运行,而不激活病毒。\n下面将以WINDOWS 9X平台为例具体说明本发明的计算机内存查杀毒 方法的各操作步骤。对于WINDOWS系统而言,它的系统功能调用通过API 函数实现,所以下面的叙述中将使用API函数代替系统功能调用。\n图1是根据本发明优选实施例的计算机内存查杀毒方法的监控过程建立 的流程图。\n首先,在步骤S11,对病毒进行分析。在该步骤中,对各种能在WINDOWS 平台上运行的病毒分析进行,找到它们要调用的两类函数,一类是在第一次 运行时判断其是否能够初始化时所要调用的函数,如果让该函数返回病毒不 希望的结果,则病毒将不再运行,而是运行宿主,从而做到带毒运行;另一 类是在它正常运行时必须要调用的函数,通过拦截这个函数,能够在病毒进 行下次传染或破坏之前将其查到并杀掉。这两类函数对于某个病毒而言,可 能各需一个,也可能需要几个。将这些信息组合在一起,建立一个数据库, 称为病毒库。它包括调用的函数名称、病毒的特征描述、病毒的处理方法等。\n例如,对于CODERED病毒,它要启动,就必须调用GetProcAddressA 这个API函数,如果在它调用这个API函数失败时,也就说,函数返回空时, 它将放弃运行,也就不会感染其它计算机系统或对本计算机系统进行破坏。 另外,在正常运行过程中,它要传染其它计算机系统和文件,则必然要调用 socket函数。\n然后,在步骤S12,运行病毒监控程序,准备好所有的要拦截API函数。 这些函数是在步骤S11中分析得到的病毒启动时和正常运行期间所需要调用 的系统功能。\n接着,在步骤S13,拦截上述分析得到的函数,使系统功能调用函数指 向实时病毒监控处理过程。\n对于WINDOWS来说,它的每一个进程的地址空间是独立的。而要查杀 所有进程中的病毒,则需要拦截所有进程的函数调用。为此,需要启动一个 特意编写的设备驱动程序,该设备驱动程序的作用是使对API的拦截对所有 的进程起作用,包括现有的和将来要产生的。通过对这个设备驱动程序的调 用,拦载所有上述分析过程中得到的函数,并为这些函数调用提供一个统一 的处理程序,将函数标识和调用者代码传给处理程序,以备查杀毒用。在完 成所有的拦截操作后,该设备驱动程序就不再起任何作用。\n具体地说,是先将要拦截API函数的处理程序初始化,以准备接收API 函数的调用,然后将要拦截的API函数的入口代码一一加以修改,使其指向 预定的代码,这段代码的作用是将API的标识和调用者的代码地址压入栈中, 然后调用API函数处理程序,待API函数处理程序返回后,再运行原来的被 取代的指令,然后转到该API函数的后续指令执行。例如:\n某个API的入口代码为\n PUSH EBP\n MOV EBP,ESP\n ADD ESP,200\n 后续指令\n这是非常常见的API入口指令,我们将这段指令保存到别处,然后将它 修改为\n JMP XXXX\nXXXX处是一段处理程序,它的代码如下:\n PUSH API标识\n CALL API处理程序\n ADD ESP,4\n PUSH EBP\n MOV EBP,ESP\n ADD ESP,200\n JMP后续指令\n到此,已经建立了对病毒进行实时监控的环境。也就是说,当一个染毒 文件运行时,将会调用某个上述已经拦截的函数,这时,通过在步骤S13中 的处理,将会进入到预定的处理程序,即,进入病毒监控过程。\n下面,将参照图2所示的病毒监控过程详细描述对系统功能调用的处理, 即,对带毒程序所调用的函数的处理。\n首先,当在步骤S21一段代码调用被拦截的系统调用时,则在步骤S22 保存当前的调用环境。\n接着,在步骤S23,将函数的调用者与病毒库进行比较,从而知道是什 么病毒在运行,并标识这是病毒初始运行,也就是说宿主还未运行。\n另外一种情况是,如果一个病毒在根据本发明的预定的处理程序运行之 前已经运行,也就是说宿主已运行,并且病毒驻留在系统中,那么,这时它 要感染其它文件或要进行破坏,也要调用某个函数,该函数也属于在上一步 中已经拦截的函数,此时同样又进入所述预定的处理程序,将函数调用者与 病毒进行比较,找到是什么病毒在运行,并标识这是运行过程中的调用。\n比如某个病毒在启动时执行下面的代码:\n向系统申请12K内存\n如果申请到了,转M处执行 C:\n否则,取一个数A\n对A取反,为B\n转到B处的地址执行。 M:\n将自己复制到申请的内存中。\n创建一个线程,运行自己的拷贝\n转C处执行\n以上代码就基本构成了该病毒的特征,当然为安全起见,通常不止取一 处特征。\n对于它的感染或破坏过程,它必然执行以下列代码:\n保存文件属性,保存到F处\n修改文件属性为可读写\n打开文件\n将文件40字节读到G处\n转3C所指示的偏移读200字节\n取程序入口B,对B取反后保存到A处,\n以上代码也基本构成了该病毒的特征,为安全起见,可以取更多的特征。\n如果在调用者代码中查到了这些特征,则认为查到了病毒。\n然后,在步骤S24中判断是否发现病毒。根据在步骤S23中的比较结果 进行判断,如果没有查到病毒,则执行步骤S28和S29,恢复原来的调用环 境,调用原来的系统函数,然后前进到步骤S30,功能调用返回。否则,如 果确定发现了病毒,则前进到步骤S25。\n在步骤S25中,根据在步骤S23中得到的病毒库的数据和标识,如果是 病毒初始运行,则执行步骤S26;如果病毒已经运行,则执行步骤S27。\n在步骤S26,让目前系统的这个函数返回给定结果,该结果将会让病毒 失败。如果该函数结果不足以让病毒失败,此时可以修改病毒下一步要运行 的代码,从而让它失败。\n具体到上面的例子,就是让申请内存的函数返回0,这样这个病毒就不 会执行,因为B是宿主程序的入口。也就是说,病毒的感染或破坏代码根本 没有机会执行。这样系统就可以带毒运行,不会影响宿主的的正常执行,病 毒也不会被激活。\n如果在步骤S25中判断病毒已经运行,则执行步骤S27。在步骤S27中, 根据病毒库中的数据,决定是终止当前线程,还是终目当前进程。对于上面 的例子,我们可以终止当前线程。\n如上所述,采用本发明的内存查杀毒方法,无论病毒在文件中存在的位 置或形式如何,都能够拦截病毒对系统功能的调用,非常准确而且非常快地 实时将病毒查杀,使病毒终止或者使病毒失败,从而让宿主程序继续运行, 也就是让程序带毒运行。\n虽然本发明已以前述优选实施例说明,然其并非用于限制本发明,任何 本领域的普通技术人员,在不脱离本发明的精神和范围的情况下,可作各种 的更动与修改。因此本发明的保护范围以后附的权利要求为准。
法律信息
- 2021-10-01
专利权有效期届满
IPC(主分类): G06F 11/30
专利号: ZL 01142156.8
申请日: 2001.09.14
授权公告日: 2006.10.25
- 2018-03-27
专利权人的姓名或者名称、地址的变更
专利权人由北京瑞星信息技术股份有限公司变更为北京瑞星网安技术股份有限公司
地址由100190 北京市海淀区中关村大街22号中科大厦1301室变更为100190 北京市海淀区中关村大街22号13层A1305
- 2016-06-29
专利权人的姓名或者名称、地址的变更
专利权人由北京瑞星信息技术有限公司变更为北京瑞星信息技术股份有限公司
地址由100190 北京市海淀区中关村大街22号中科大厦1301室变更为100190 北京市海淀区中关村大街22号中科大厦1301室
- 2011-01-19
专利权的转移
登记生效日: 2010.12.14
专利权人由北京瑞星国际软件有限公司变更为北京瑞星信息技术有限公司
地址由100080 北京市海淀区中关村大街22号中科大厦A408室变更为100190 北京市海淀区中关村大街22号中科大厦1301室
- 2008-02-06
专利申请权、专利权的转移(专利权的转移)
专利申请权、专利权的转移(专利权的转移)变更项目:专利权人变更前权利人:北京瑞星科技股份有限公司 地址: 北京市海淀区中关村大街22号中科大厦1305室 邮编: 100080变更后权利人:北京瑞星国际软件有限公司 地址: 北京市海淀区中关村大街22号中科大厦A408室 邮编: 100080登记生效日:2008.1.4
- 2006-10-25
- 2004-10-27
- 2003-04-09
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |