应用程序的防护方法及装置与流程

文档序号:12467702阅读:354来源:国知局
应用程序的防护方法及装置与流程

本发明涉及安全防护技术领域,尤其涉及一种应用程序的防护方法及装置。



背景技术:

在Windows操作系统中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL(Dynamic Link Library)文件,放置于系统中。当执行某一个应用程序时,相应的DLL文件就会被调用。一个应用程序可有多个DLL文件,一个DLL文件也可能被几个应用程序所共用,这样的DLL文件被称为共享DLL文件。

在一个应用程序的自保护生效前,恶意软件可以通过DLL注入文件的方式,把一个DLL文件注入到应用程序的进程中,这样恶意软件就可以在应用程序的进程空间内为所欲为,破应用程序的功能,比如结束应用程序的进程。



技术实现要素:

有鉴于此,本发明实施例提供一种应用程序的防护方法及装置,能够有效避免应用程序被恶意DLL文件所破坏。

第一方面,本发明实施例提供一种应用程序的防护方法,包括:

对DLL文件的加载函数的调用进行监视;

判断调用所述加载函数的进程是否是要防护的应用程序的进程;

若所述进程是要防护的应用程序的进程,则判断所述进程当前要加载的DLL文件是否是恶意的DLL文件;

若所述要加载的DLL文件是恶意的DLL文件,则返回拒绝加载消息。

结合第一方面,在第一方面的第一种可实施方式中,所述要防护的应用程序为安全防护类应用程序;所述对DLL文件的加载函数的调用进行监视,包括:

在windows操作系统开机过程中,通过钩子函数对DLL文件的加载函数的调用进行监视;其中,所述钩子函数包含在所述安全防护类应用程序的防御驱动中。

结合第一方面的第一种可实施方式中,在第一方面的第二种可实施方式中,所述判断调用所述加载函数的进程是否是要防护的应用程序的进程,包括:通过所述钩子函数获取所述进程的路径信息,根据所述进程的路径信息,判断所述进程是否是要防护的应用程序目录下的进程。

结合第一方面的第二种可实施方式中,在第一方面的第三种可实施方式中,所述若所述进程是要防护的应用程序的进程,则判断所述进程当前要加载的DLL文件是否是恶意的DLL文件,包括:

若所述进程是要防护的应用程序的进程,则通过所述钩子函数获取所述进程当前要加载的DLL文件的路径信息;

所述钩子函数根据获取的所述DLL文件的路径信息,在拦截规则库中进行匹配查询,判断所述要加载的DLL文件是否是恶意的DLL文件;其中,所述拦截规则库中保存有恶意的DLL文件的路径信息。

结合第一方面的第三种可实施方式中,在第一方面的第四种可实施方式中,所述调用所述加载函数,通过所述加载函数完成对所述DLL文件的加载,包括:

所述钩子函数根据预先保存的所述加载函数的原始入口地址,调用所述加载函数,通过所述加载函数完成对所述DLL文件的加载。

第二方面,本发明实施例提供一种应用程序的防护装置,包括:监视模块,用于对DLL文件的加载函数的调用进行监视;第一判断模块,用于判断调用所述加载函数的进程是否是要防护的应用程序的进程;第二判断模块,用于若所述进程是要防护的应用程序的进程,则判断所述进程当前要加载的DLL文件是否是恶意的DLL文件;拒绝加载模块,用于若所述要加载的DLL文件是恶意的DLL文件,则返回拒绝加载消息。

结合第二方面,在第二方面的第一种可实施方式中,所述要防护的应用程序为安全防护类应用程序;所述安全防护类应用程序包括防御驱动模块,所述监视模块设于所述安全防护类应用程序的防御驱动模块中;所述监视模块,用于在windows操作系统开机过程中,对DLL文件的加载函数的调用进行监视。

结合第二方面的第一种可实施方式,在第二方面的第二种可实施方式中,所述第一判断模块,包括:第一获取子模块,用于获取所述进程的路径信息;第一判断子模块,用于根据所述进程的路径信息,判断所述进程是否是要防护的应用程序目录下的进程;第一通知子模块,用于若所述进程是要防护的应用程序的进程,则通知所述第二判断模块。

结合第二方面的第二种可实施方式,在第二方面的第三种可实施方式中,所述第二判断模块,包括:第二获取子模块,用于若所述进程是要防护的应用程序的进程,则获取所述进程当前要加载的DLL文件的路径信息;第二判断子模块,用于根据所述要加载的DLL文件的路径信息,在拦截规则库中进行匹配查询,判断所述要加载的DLL文件是否是恶意的DLL文件;其中,所述拦截规则库中保存有恶意的DLL文件的路径信息;第二通知子模块,用于若所述要加载的DLL文件是恶意的DLL文件,则通知所述拒绝加载模块。

本发明实施例提供的应用程序的防护方法及装置,通过对DLL文件的加载函数的调用进行监视,判断调用所述加载函数的进程是否是要防护的应用程序的进程,若所述进程是要防护的应用程序的进程,则进一步判断当前要加载的DLL文件是否是恶意的DLL文件,若是,则返回拒绝加载消息,这样能够避免恶意的DLL文件注入到要防护的应用程序的进程中,从而能够使要防护的应用程序免于被恶意的DLL文件所破坏。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付 出创造性劳动的前提下,还可以根据这些附图获得其它的附图。

图1为本发明应用程序的防护方法实施例一的流程示意图;

图2为本发明应用程序的防护方法实施例二的流程示意图;

图3为本发明应用程序的防护装置实施例一的结构示意图;

图4为本发明应用程序的防护装置实施例二的结构示意图。

具体实施方式

下面结合附图对本发明实施例一种应用程序的防护方法及装置进行详细描述。

应当明确,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明防护的范围。

图1为本发明应用程序的防护方法实施例一的流程示意图。参看图1,本发明应用程序的防护方法实施例,包括如下步骤:

S101、对DLL文件的加载函数的调用进行监视。

本实施例中,所述要防护的应用程可以是金山毒霸、金山卫士等安全防护类应用程序,也可以是非安全防护类的普通应用程序,如即时通讯类应用程序、游戏类应用程序等等。

安全防护类应用程序通常具有自我防护功能,然而,在安全防护类应用程序的自我防护功能生效之前,一些恶意的DLL文件,如病毒、蠕虫或特洛伊马程序等,会注入到安全防护类应用程序的进程中,通过破坏安全防护类应用程序的进程来实施控制,从而破坏安全防护类应用程序的防御功能。将一个DLL文件的注入某个进程,是指将一个DLL文件放进到该某个进程的地址空间里,使所述DLL文件称为该某个进程的一部分。

windows操作系统中,DLL文件的加载函数为NtCreateSection函数, windows操作系统内核中通过调用NtCreateSection函数来加载DLL文件。本实施例中,通过对NtCreateSection函数的调用进行监视,能够捕获到恶意的DLL文件,从而便于阻止其注入到要防护的应用程序的进程中。

S102、判断调用所述加载函数的进程是否是要防护的应用程序的进程。

本实施例中,可通过获取所述进程的路径信息,根据所述进程的路径信息,判断所述进程是否是要防护的应用程序的进程。

根据所述判断,若所述进程是要防护的应用程序的进程,则执行步骤S103,若所述进程不是要防护的应用程序的进程,则执行步骤S105。

S103、判断所述进程当前要加载的DLL文件是否是恶意的DLL文件。

根据步骤S102的判断,若所述进程是要防护的应用程序的进程,则进一步判断所述进程当前要加载的DLL文件是否是恶意的DLL文件。

可预先将恶意的DLL文件建立黑名单,若所述应用程序的进程当前要加载的DLL文件在黑名单当中,即可判断所述应用程序的进程当前要加载的DLL文件是恶意的DLL文件。

也可预先将要保护的应用程序正常运行所需要的DLL文件建立白名单。若所述应用程序的进程当前要加载的DLL文件不在白名单当中,即可判断所述应用程序的进程当前要加载的DLL文件是恶意的DLL文件。

根据所述判断,若所述要加载的DLL文件是恶意的DLL文件,则执行步骤S104,若所述要加载的DLL文件不是恶意的DLL文件,则执行步骤S105。

S104、返回拒绝加载消息。

根据步骤S103的判断,若所述要加载的DLL文件是恶意的DLL文件,则可向windows操作系统或向要保护的应用程序的进程返回拒绝加载消息,从而阻止将恶意的DLL文件注入到要保护的应用程序的进程中。

S105、调用所述加载函数,通过所述加载函数完成对所述DLL文件的加载。

本发明实施例提供的应用程序的防护方法,通过对DLL文件的加载函数的调用进行监视,判断调用所述加载函数的进程是否是要防护的应用程序的进程,若所述进程是要防护的应用程序的进程,则进一步判断当前要加载的DLL文件是否是恶意的DLL文件,若是,则返回拒绝加载消息,这样能够避免恶意的DLL文件注入到要防护的应用程序的进程中,从而能够使要防护的应用程序免于被恶意的DLL文件所破坏。

图2为本发明应用程序的防护方法实施例二的流程示意图。本实施例适用于金山毒霸或金山卫士等安全防护类应用程序的自我防护。参看图2,本发明应用程序的防护方法实施例,包括如下步骤:

S201、在windows操作系统开机过程中,通过钩子函数对DLL文件的加载函数的调用进行监视;其中,所述钩子函数建立在安全防护类应用程序的防御驱动中。

安全防护类应用程序的防御驱动和防御进程在windows操作系统开机后开始运行。其中,防御驱动运行在系统的内核层,防御进程运行在应用层,防御驱动的运行先于防御进程的运行。

在本步骤之前,可由编程人员在所述防御驱动中建立钩子(HOOK)函数。钩子函数实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子函数就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

本实施例中,将NtCreateSection函数的原始入口地址修改为本实施例中的钩子函数的入口地址。安全防护类应用程序的进程在调用NtCreateSection函数时,由于NtCreateSection函数的原始入口地址已被修改为本实施例的钩子函数的入口地址,通过对NtCreateSection函数的调用,即可跳至本实施例的钩子函数的执行,由此实现对NtCreateSection函数的监视。

为了实现对NtCreateSection函数的回调,在将NtCreateSection函数的原始入口地址修改为本实施例中的钩子函数的入口地址之前,需要对NtCreateSection函数的原始入口地址进行保存。

本实施例中,应用程序的进程对NtCreateSection函数的调用,可通过windows操作系统对NtCreateSection函数的调用来实现。具体来讲,可以是应用程序的进程向windows操作系统发出调用NtCreateSection函数的消息,windows操作系统根据该消息调用NtCreateSection函数。

S202、通过所述钩子函数获取调用NtCreateSection函数的进程的路径信息。

S203、判断所述进程是否是要防护的安全防护类应用程序目录下的进程。

本实施例中,根据步骤S202获取的所述进程的路径信息,判断所述进程是否是要防护的安全防护类应用程序目录下的进程,若所述进程是要所述安全防护类应用程序的进程,则执行步骤S204;若所述进程不是所述安全防护类应用程序的进程,则执行步骤S207。

S204、通过所述钩子函数获取所述进程当前要加载的DLL文件的路径信息。

S205、判断所述要加载的DLL文件是否是恶意的DLL文件。

本实施例中,所述钩子函数根据获取的所述DLL文件的路径信息,在拦截规则库中进行匹配查询,判断所述要加载的DLL文件是否是恶意的DLL文件。其中,所述拦截规则库中保存有恶意的DLL文件的路径信息;经过所述判断,若所述要加载的DLL文件是恶意的DLL文件,则执行步骤S206;若所述要加载的DLL文件不是恶意的DLL文件,则执行步骤S207。

本实施例中,可预先将恶意的DLL文件建立黑名单,若所述应用程序的进程当前要加载的DLL文件在黑名单当中,即可判断所述应用程序的进程当前要加载的DLL文件是恶意的DLL文件。

作为一种可选方式,也可预先将要保护的应用程序正常运行所需要的DLL文件建立白名单。若所述应用程序的进程当前要加载的DLL文件不在白名单当中,即可判断所述应用程序的进程当前要加载的DLL文件是恶意的DLL文件。

S206、返回拒绝加载消息。

本实施例中,所述钩子函数可向windows操作系统或向要保护的应用程序的进程返回拒绝加载消息,从而阻止将恶意的DLL文件注入到要保护的应用程序的进程中。

S207、调用所述加载函数,通过所述加载函数完成对所述DLL文件的加载。

本实施例中,所述钩子函数根据预先保存的NtCreateSection函数的原始入口地址,调用NtCreateSection函数,通过NtCreateSection函数完成对待加载的DLL文件的加载。

本发明实施例提供的应用程序的防护方法,通过建立在安全防护类应用程序的防御驱动中的钩子函数,对NtCreateSection函数的调用进行监视,能够在windows操作系统的内核层对NtCreateSection函数的调用进行监视,能够在安全防护类应用程序的自防护生效前,快速准确地捕获到恶意的DLL文件,阻止恶意的DLL文件注入到安全防护类应用程序的进程中,从而能够使安全防护类应用程序免于被恶意的DLL文件所破坏。

本实施例主要是以安全防护类应用程序的防护为例进行说明的,对于非安全防护类应用程序的防护方法与本实施例相似,不同之处在于在非安全防护类应用程序的防护方法中,主要是在windows操作系统开机完成后,通过钩子函数对DLL文件的加载函数的调用进行监视。

图3为本发明应用程序的防护装置实施例一的结构示意图。

参看图3,本发明应用程序的防护装置实施例,包括:监视模块31、第一判断模块32、第二判断模块33、拒绝加载模块34和调用模块35;其中,

监视模块31,用于对DLL文件的加载函数的调用进行监视。

本实施例中,所述要防护的应用程可以是金山毒霸、金山卫士等安全防护类应用程序,也可以是非安全防护类的普通应用程序,如即时通讯类应用程序、游戏类应用程序等等。

安全防护类应用程序通常具有自我防护功能,然而,在安全防护类应用程序的自我防护功能生效之前,一些恶意的DLL文件,如病毒、蠕虫或特洛伊马程序等,会注入到安全防护类应用程序的进程中,通过破坏安全防护类应用程序的进程来实施控制,从而破坏安全防护类应用程序的防御功能。将一个DLL文件的注入某个进程,是指将一个DLL文件放进到该某个进程的地址空间里,使所述DLL文件称为该某个进程的一部分。

windows操作系统中,DLL文件的加载函数为NtCreateSection函数,windows操作系统内核中通过调用NtCreateSection函数来加载DLL文件。本实施例中,通过对NtCreateSection函数的调用进行监视,能够捕获到恶意的DLL文件,从而便于阻止其注入到要防护的应用程序的进程中。

第一判断模块32,用于判断调用所述加载函数的进程是否是要防护的应用程序的进程。

本实施例中,可通过获取所述进程的路径信息,根据所述进程的路径信息,判断所述进程是否是要防护的应用程序的进程。

根据所述判断,若所述进程是要防护的应用程序的进程,则通知第二判断模块33,若所述进程不是要防护的应用程序的进程,则通知调用模块35。

第二判断模块33,用于若所述进程是要防护的应用程序的进程,则判断所述进程当前要加载的DLL文件是否是恶意的DLL文件。

可预先将恶意的DLL文件建立黑名单,若所述应用程序的进程当前要加载的DLL文件在黑名单当中,即可判断所述应用程序的进程当前要加载的DLL文件是恶意的DLL文件。

也可预先将要保护的应用程序正常运行所需要的DLL文件建立白名单。若 所述应用程序的进程当前要加载的DLL文件不在白名单当中,即可判断所述应用程序的进程当前要加载的DLL文件是恶意的DLL文件。

根据所述判断,若所述要加载的DLL文件是恶意的DLL文件,则通知拒绝加载模块34,若所述要加载的DLL文件不是恶意的DLL文件,则通知调用模块35。

拒绝加载模块34,用于若所述要加载的DLL文件是恶意的DLL文件,则返回拒绝加载消息。

本实施例中,若所述要加载的DLL文件是恶意的DLL文件,则可向windows操作系统或向要保护的应用程序的进程返回拒绝加载消息,从而阻止将恶意的DLL文件注入到要保护的应用程序的进程中。

调用模块35,用于若所述进程不是要防护的应用程序的进程,或者若所述进程是要防护的应用程序的进程,但所述要加载的DLL文件不是恶意的DLL文件,则调用加载函数,通过所述加载函数完成对所述DLL文件的加载。

本发明实施例提供的应用程序的防护装置,通过对DLL文件的加载函数的调用进行监视,判断调用所述加载函数的进程是否是要防护的应用程序的进程,若所述进程是要防护的应用程序的进程,则进一步判断当前要加载的DLL文件是否是恶意的DLL文件,若是,则返回拒绝加载消息,这样能够避免恶意的DLL文件注入到要防护的应用程序的进程中,从而能够使要防护的应用程序免于被恶意的DLL文件所破坏。

本实施例的装置,可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

图4为本发明应用程序的防护装置实施例二的结构示意图。本实施例中,所述要防护的应用程序为安全防护类应用程序;所述安全防护类应用程序包括防御驱动模块,所述监视模块31设于所述安全防护类应用程序的防御驱动模块中;所述监视模块31,用于在windows操作系统开机过程中,通过钩子函数对 DLL文件的加载函数的调用进行监视;其中,所述钩子函数建立在安全防护类应用程序的防御驱动中。

安全防护类应用程序的防御驱动和防御进程在windows操作系统开机后开始运行。其中,防御驱动运行在系统的内核层,防御进程运行在应用层,防御驱动的运行先于防御进程的运行。

本实施例中,可由编程人员在所述防御驱动中建立钩子(HOOK)函数。钩子函数实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子函数就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

本实施例中,将NtCreateSection函数的原始入口地址修改为本实施例中的钩子函数的入口地址。安全防护类应用程序的进程在调用NtCreateSection函数时,由于NtCreateSection函数的原始入口地址已被修改为本实施例的钩子函数的入口地址,通过对NtCreateSection函数的调用,即可跳至本实施例的钩子函数的执行,由此实现对NtCreateSection函数的监视。

为了实现对NtCreateSection函数的回调,在将NtCreateSection函数的原始入口地址修改为本实施例中的钩子函数的入口地址之前,需要对NtCreateSection函数的原始入口地址进行保存。

本实施例中,应用程序的进程对NtCreateSection函数的调用,可通过windows操作系统对NtCreateSection函数的调用来实现。具体来讲,可以是应用程序的进程向windows操作系统发出调用NtCreateSection函数的消息,windows操作系统根据该消息调用NtCreateSection函数。

参看图4,本实施例的装置在图3所示装置结构的基础上,进一步地,所述 第一判断模块32,可以包括:第一获取子模块321、第一判断子模块322以及第一通知子模块323;其中,

第一获取子模块321,用于获取所述进程的路径信息。

第一判断子模块322,用于根据所述进程的路径信息,判断所述进程是否是要防护的应用程序目录下的进程。

本实施例中,根据第一获取子模块321获取的所述进程的路径信息,判断所述进程是否是要防护的安全防护类应用程序目录下的进程。

第一通知子模块323,用于若所述进程是要防护的应用程序的进程,则通知所述第二判断模块33,若所述进程不是要防护的应用程序的进程,则通知所述调用模块35。

本实施例中,进一步地,所述第二判断模块33,可以包括:第二获取子模块331、第二判断子模块332和第二通知子模块333;其中,

第二获取子模块331,用于若所述进程是要防护的应用程序的进程,则获取所述进程当前要加载的DLL文件的路径信息。

第二判断子模块332,用于根据所述要加载的DLL文件的路径信息,在拦截规则库中进行匹配查询,判断所述要加载的DLL文件是否是恶意的DLL文件;其中,所述拦截规则库中保存有恶意的DLL文件的路径信息。

本实施例中,根据获取的所述DLL文件的路径信息,在拦截规则库中进行匹配查询,判断所述要加载的DLL文件是否是恶意的DLL文件。

本实施例中,可预先将恶意的DLL文件建立黑名单,若所述应用程序的进程当前要加载的DLL文件在黑名单当中,即可判断所述应用程序的进程当前要加载的DLL文件是恶意的DLL文件。

作为一种可选方式,也可预先将要保护的应用程序正常运行所需要的DLL文件建立白名单。若所述应用程序的进程当前要加载的DLL文件不在白名单当 中,即可判断所述应用程序的进程当前要加载的DLL文件是恶意的DLL文件。

第二通知子模块333,用于若所述要加载的DLL文件是恶意的DLL文件,则通知所述拒绝加载模块34,若所述要加载的DLL文件不是恶意的DLL文件,则通知所述调用模块35。

本实施例中,所述拒绝加载模块34可向windows操作系统或向要保护的应用程序的进程返回拒绝加载消息,从而阻止将恶意的DLL文件注入到要保护的应用程序的进程中。

所述调用模块35,用于若所述进程不是要防护的应用程序的进程,或者若所述进程是要防护的应用程序的进程,但所述要加载的DLL文件不是恶意的DLL文件,则根据预先保存的所述加载函数的原始入口地址调用所述加载函数,通过所述加载函数完成对所述DLL文件的加载。

本实施例中,可根据预先保存的NtCreateSection函数的原始入口地址,调用NtCreateSection函数,通过NtCreateSection函数完成对待加载的DLL文件的加载。

本发明实施例提供的应用程序的防护装置,通过建立在安全防护类应用程序的防御驱动中的监视模块31,对NtCreateSection函数的调用进行监视,能够在windows操作系统的内核层对NtCreateSection函数的调用进行监视,能够在安全防护类应用程序的自防护生效前,快速准确地捕获到恶意的DLL文件,阻止恶意的DLL文件注入到安全防护类应用程序的进程中,从而能够使安全防护类应用程序免于被恶意的DLL文件所破坏。

本实施例的装置,可以用于执行图2所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

本实施例主要是以安全防护类应用程序的防护为例进行说明的,对于非安全防护类应用程序的防护方法与本实施例相似,不同之处在于在非安全防护类应用程序的防护方法中,主要是在windows操作系统开机完成后,通过钩子函 数对DLL文件的加载函数的调用进行监视。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。

以上所述,仅为本发明的具体实施方式,但本发明的防护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的防护范围之内。因此,本发明的防护范围应以权利要求的防护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1