一种拦截动态库注入的方法技术

技术编号:14760381 阅读:174 留言:0更新日期:2017-03-03 10:39
本发明专利技术提供一种拦截动态库注入的方法,包括监测本程序进程中的目标函数;以及,前置处理如下步骤:若所述目标函数被系统动态库调用、且传入外部动态库的文件名与预置文件名匹配,则拒绝调用所述目标函数。通过本发明专利技术提供的技术方案,可以防止外部程序将含有可执行代码的外部动态库注入至本程序进程中。

【技术实现步骤摘要】

本专利技术涉及计算机
,特别涉及一种拦截动态库注入的方法
技术介绍
动态库注入是windows操作系统提供的一种编程机制,允许一个应用程序A把一段代码注入到另外一个应用程序B中去执行,用来实现一定的功能。但是这样可能会造成应用程序B运行不稳定,甚至出现崩溃。例如,一些杀毒软件程序会向操作系统中其他进程注入动态库,执行一些代码,其中就包含kswebshield.dll这个动态库,这个库中包含一些代码,会导致被注入的应用程序程序运行不稳定,经常崩溃。拦截动态库注入的目的就是为了防止自身程序遭到其它程序的注入而导致的一系列不稳定问题。当动态库尝试加载到当前进程的时候,主动取消操作。现有技术中并没有提供一种实现拦截动态库注入的方法。
技术实现思路
本专利技术技术方案解决的技术问题为,如何有效拦截动态库注入。为了解决上述技术问题,本专利技术提供了一种实现拦截动态库注入的方法,适于防止外部程序将含有可执行代码的外部动态库注入至本程序进程,包括;监测本程序进程中的目标函数;以及,前置处理如下步骤;若所述目标函数被系统动态库调用、且传入外部动态库的文件名与预置文件名匹配,则拒绝调用所述目标函数。优选地,还包括对所述目标函数进行挂钩,或者,在所述本程序进程中对所述目标函数进行挂钩;所述监测本程序进程中的目标函数包括若所述目标函数被调用,则当调用消息到达后、在调用所述目标函数前,优先执行所述前置处理。优选地,还包括若所述目标函数的调用位置位于所述系统动态库的地址,则所述目标函数被系统动态库调用。优选地,还包括获取所述系统动态库在本程序中的地址范围及所述目标函数的返回地址。优选地,所述获取所述系统动态库在本程序中的地址范围包括:使用GetModuleHandle系列函数获取;获取所述目标函数的返回地址包括:使用ReturnAddress函数获取。优选地,还包括写入所需要拦截的动态库文件名作为所述预置文件名。优选地,所述目标函数是在本程序进程中被所述系统动态库调用函数主动调用、并适于加载所述外部动态库的。优选地,所述调用函数为ClientLoadLibrary,所述目标函数为LoadLibraryExW。优选地,还包括在拒绝调用所述目标函数后继续运行本程序。优选地,还包括若所述目标函数并非被系统动态库调用和/或传入外部动态库的文件名与预置文件名不一致,则将调用所述目标函数的请求传递至操作系统。本专利技术技术方案的有益效果至少包括:本专利技术技术方案通过对目标函数挂钩(APIHook技术),从本程序进程中识别出需要拦截的动态库,然后通过拒绝调用目标函数来实现对外部动态库的拦截。本专利技术通过预置需要拦截的动态库的方式,使拦截方案更有目的性,在有效拦截有害动库态的基础上,并不阻碍对系统正常运行所需的动态库的加载,保持本程序的正常运行。附图说明通过阅读参照以下附图对非限制性实施例所作的详细描述,本专利技术的其他特征、目的和优点将会变得更明显:图1示出根据本专利技术的第一实施例的,一种拦截动态库注入的方法流程图;图2示出根据本专利技术的动态库注入的流程概要图;图3示出根据本专利技术的第一实施例的一个变化例的,一种拦截动态库注入的方法流程图;图4示出根据本专利技术的第二实施例的,一种拦截动态库注入的方法流程图;图5示出根据本专利技术的第三实施例的,一种拦截动态库注入的方法流程图;图6示出根据本专利技术的第四实施例的,一种拦截动态库注入的方法流程图。具体实施方式为了更好的使本专利技术的技术方案清晰的表示出来,下面结合附图对本专利技术作进一步说明。图1示出根据本专利技术的第一实施例的,一种拦截动态库注入的方法流程图。如上所述,本专利技术主要应用于Windows操作系统上,但不排除适用在其他操作系统上,如AndroidOS、MacOS等,本领域技术人员理解这样的控制过程具有重要意义,以杀毒软件和浏览器举例说明,杀毒软件会向Windows操作系统中其他进程注入动态库,执行一些代码。本领域技术人员理解,这个库中包含一些代码,会导致被注入的应用程序程序运行不稳定,经常崩溃。在实际运行过程中,所述杀毒软件程序向所述浏览器注入动态库,为了让描述具有通用性,在下文中我们以程序A.exe代表杀毒软件(也可代表任意其他程序),动态库C.dll代表需要注入的动态库(也可以是其他任意.dll文件),函数xyz()是所述动态库C.dll中的一段代码,程序B.exe代表浏览器(也可以是其他任意程序,如浏览器、视屏播放器等)。Windows操作系统提供了一种动态库注入的机制,使用WindowsAPI:SetWindowsHook或SetWindowsHookEx两个函数,可以使所述程序A.exe把所述动态库C.dll载入到所述程序B.exe中,并且执行所述动态库C.dll中包含的所述函数xyz()(这种情况下是被动的,非自愿的),如图2示出的动态库注入的流程概要图,具体如下:1.所述程序A.exe提供一个所述动态库C.dll,其中所述C.dll中包含一个需要注入的所述函数xyz();2.所述程序A.exe获得所述程序B.exe的一个线程ID(可以理解为所述程序B.exe的一个资源的标识符),然后调用所述WindowsAPI,并传入参数线程ID和函数xyz()的地址;3.所述程序B.exe执行到特定过程时,即需要实现某项功能时,Windows操作系统就会在当前程序中加载所述动态库C.dll,并且调用所述函数xyz()。本专利技术技术方案就是为了解决如何阻止所述程序A.exe将所述函数xyz()注入到需要保护的程序B.exe中的技术问题。具体地,如图1示出的具体步骤如下:首先进入步骤S101,本程序运行,本程序就是本专利技术技术方案所需要保护程序。然后进入步骤S102,监测本程序进程中的目标函数。所述目标函数即用来调取外部动态库的函数。进一步地,所述目标函数是在本程序进程中被所述系统动态库调用函数主动调用、并适于加载所述外部动态库的。在实际操作过程中,当应用程序要加载一个动态库并使用其中的功能时,首先要把动态库加载到程序的内存空间中,而完成这一步调取任务所使用的工具即为所述目标函数。例如,本领域技术人员理解,在Windows操作系统下,所述目标函数由Kernel32.dll提供的LoadLibraryExW或LoadLibraryExA函数。然后执行步骤S103,系统动态库调用所述目标函数。在本程序进程中,当需要加载动态库时,所述目标函数就会被所述系统动态库调用,所述系统动态库即为含有调取所述目标函数的工具的动态数据库,例如,本领域技术人员理解,在Windows操作系统下,所述系统动态库即为User32.dll,所述包含一个功能函数ClientLoadLibrary,所述功能函数ClientLoadLibrary用来实现Windows本身提供的动态库注入机制,但只能由所述User32.dll使用,不提供给外面的第三方动态库使用。然后进入步骤S104,判断所述外部动态库的文件名与所述预置文件名是否匹配。所述外部动态库即为不属于所述系统提供的动态库,所述外部动态库是即将为所述目标函数调取的目标动态库,所述调取过程如图2示出的动态库注入的流程。所文件名即以.dll为后缀的动态库名,所述预置文件名即预先写入的、需要拦截的动态库文件本文档来自技高网...
一种拦截动态库注入的方法

【技术保护点】
一种拦截动态库注入的方法,适于防止外部程序将含有可执行代码的外部动态库注入至本程序进程,其特征在于,包括:监测本程序进程中的目标函数;以及,前置处理如下步骤:若所述目标函数被系统动态库调用、且传入外部动态库的文件名与预置文件名匹配,则拒绝调用所述目标函数。

【技术特征摘要】
1.一种拦截动态库注入的方法,适于防止外部程序将含有可执行代码的外部动态库注入至本程序进程,其特征在于,包括:监测本程序进程中的目标函数;以及,前置处理如下步骤:若所述目标函数被系统动态库调用、且传入外部动态库的文件名与预置文件名匹配,则拒绝调用所述目标函数。2.如权利要求1所述拦截动态库注入的方法,其特征在于,还包括:对所述目标函数进行挂钩,或者,在所述本程序进程中对所述目标函数进行挂钩;所述监测本程序进程中的目标函数包括:若所述目标函数被调用,则当调用消息到达后、在调用所述目标函数前,优先执行所述前置处理。3.如权利要求1所述拦截动态库注入的方法,其特征在于,还包括:若所述目标函数的调用位置位于所述系统动态库的地址,则所述目标函数被系统动态库调用。4.如权利要求1所述拦截动态库注入的方法,其特征在于,还包括:获取所述系统动态库在本程序中的地址范围及所述目标函数的返回地址。5.如权利要求4所述拦截动态库注入的方法,其特征在于,所述获取所...

【专利技术属性】
技术研发人员:潘巍
申请(专利权)人:上海二三四五网络科技有限公司
类型:发明
国别省市:上海;31

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1