文件加载方法和装置的制作方法

文档序号:7865607阅读:143来源:国知局
专利名称:文件加载方法和装置的制作方法
技术领域
本发明涉及信息安全技术,具体涉及一种文件加载方法和装置。
背景技术
LSP (Layered Service Provider,网络套接字工具)是Windows平台的通信架构WinSock (Windows Sockets,分层服务提供商)中特有的一个机制,通过可扩展的LSP机制,使得第三方软件开发商可以在应用程序中插入DLL (Dynamic Link Library,动态链接库)对TCP/IP数据包进行监听、修改,从而开发出丰富的网络应用,如聊天软件通信加密工具、网络代理软件、网游加速器等。LSP既可以用来开发正规的应用,病毒或者木马作者也可以利用LSP在用户的操作系统中插入恶意代码,窃取用户信息等。另外,由于LSP注入到系统的绝大多数进程中,串接在应用程序的网络访问操作中,如果代码考虑不周,就会导致应用程序所在的计算机系统不能上网、程序崩溃或卡死等现象。然而,目前还没有一种有效的措施来及时发现并屏蔽一些有问题的LSTOLL文件。

发明内容
鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的文件加载方法和装置。依据本发明实施例的一个方面,提供了一种文件加载方法,包括加载应用程序的配置信息;根据所加载的配置信息判断加载有问题的LSP DLL文件;将加载有问题的LSPDLL文件的操作替换为加载直通型LSP DLL文件;其中,特定LSP DLL文件为需要被屏蔽的LSP DLL文件,所述预定义的LSTOLL文件是直通型DLL文件,直通型DLL文件为通过特定磁盘文件路径加载的DLL文件,以便于在LSP链上层和下层之间透传数据包。可选地,所述配置列表包括需要屏蔽的LSP DLL文件,以及要屏蔽这些LSP DLL文件的进程。可选地,根据所述配置列表中的LSP DLL文件的特征信息来判断LSP配置列表数据中是否包括需要被屏蔽的LSP DLL文件。可选地,所述特征信息为DLL文件的文件名、DLL文件的公司名、原始文件名或者产品名称,所述特征信息从DLL的版本信息中获得。可选地,替换操作进一步包括应用程序对API函数进行挂钩处理,指向自定义的函数,其中该API函数是用于加载DLL文件的系统功能函数;当应用程序初始化WinSock时,调用该API函数以加载对应的LSP DLL文件,并将该LSP DLL文件的文件路径传递给该自定义的函数;在该自定义的函数中,应用程序根据配置信息判断该传递来的LSP DLL文件是否为需要被屏蔽的LSP DLL文件,如果是则将加载该LSP DLL文件的操作替换为加载直通型LSP DLL文件操作。如果传递来的LSP DLL文件为需要被屏蔽的LSP DLL文件,则替换LSP DLL文件的文件路径为直通型LSP DLL的文件路径,并传递给挂钩处理之前的API函数,执行调用直通型LSP DLL的文件路径。可选地,所述替换操作进一步包括在驱动层挂钩文件操作的系统调用文件打开函数,将其替换为自定义的函数;当应用程序初始化WinSock时,逐个加载LSP链上的LSPDLL文件,打开对应的LSP DLL文件,预先调用自定义函数,在自定义函数中判断要打开的LSP DLL文件是否为待屏蔽LSTOLL文件,如果是,则将该LSP DLL文件的文件路径修替换为直通型LSP DLL文件的文件路径,并将此修改后的文件路径传递给钩挂前的文件打开函数,使系统加载直通型DLL文件。可选地,所述替换操作进一步包括创建文件系统过滤驱动程序,用于对LSP DLL文件的打开操作进行过滤;应用程序初始化WinSock时,逐个加载LSP链上的LSP DLL文件,打开对应的LSP DLL文件,文件系统过滤驱动程序对判断该打开的LSP DLL文件是否为配置列表中需要被屏蔽的LSP DLL文件,是则修改该LSP DLL文件的文件路径为直通型LSP DLL的文件路径,将加载该需要被屏蔽的LSP DLL文件替换为加载直通型DLL文件。可选地,在替换操作步骤中,当拦截到加载需要被屏蔽的LSP DLL文件的的文件操作时,读取Windows的LSP注册表配置,找到该DLL文件对应的LSP编号,加载直通型DLL文件,并将LSP编号传递给该直通型DLL文件。可选地,当加载直通型DLL文件后,获取传递的LSP编号,读取操作系统的LSP注册表配置,从而在配置中找到该直通型DLL文件本次在LSP链中的位置,并加载下层LSPDLL文件。依据本发明实施例的另一方面,提出一种文件加载装置,包括配置文件加载装置,用于加载应用程序的配置列表;加载转换装置,根据所加载的配置列表中的配置信息判断需要加载的LSP DLL文件是否为特定LSP DLL文件,并将加载该特定LSP DLL文件的操作替换为加载预定义的LSP DLL文件;其中,所述特定LSP DLL文件为需要被屏蔽的LSP DLL文件,所述预定义的LSP DLL文件是直通型DLL文件,直通型DLL文件为通过特定磁盘文件路径加载的DLL文件,以便于通过所述直通型DLL文件在LSP链上层和下层之间透传数据包。本发明实施例通过文件重定向技术,使得应用程序不会加载有问题的LSTOLL文件,而是加载直通型LSP DLL文件,并保证正常的网络通信。本发明实施例不需要携带微软默认的任何LSP配置,既可以针对系统中的单个LSP DLL文件进行屏蔽,也可以将全部LSP DLL文件都屏蔽,既可以针对单个进程所对应的文件进行LSP DLL文件屏蔽,也可以针对多个进程所对应的文件进行LSP DLL文件屏蔽。上述说明仅是本发明实施例技术方案的概述,为了能够更清楚了解本发明实施例的技术手段,而可依照说明书的内容予以实施,并且为了让本发明实施例的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明实施例的具体实施方式



通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明实施例的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中
图1为WinSock框架示意图;图2为本发明实施例的文件加载方法流程图;图3为本发明实施例的文件加载装置的流程图。图4示出了本发明实施例通过文件加载屏蔽特定LSP DLL文件的方法的一具体应用场景实现流程图。
具体实施例方式下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本 公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。图1 为 WinSock 框架不意图。WinSock 中包含 transport provider DLL 和namespace provider DLL两种可扩展的DLL, transport provider用于网络数据收发,是分层的,理论上支持无限多层,所有的各层上下串在一起形成一个链;namespace provider用于网络名称解析,不分层。一般所说的LSP是指transport provider。本发明实施例既支持 transport provider,也支持 namespace provider 参照图1, transport provider有两个链TCP链、UDP链。还可以有其它类型的LSP 链。TCP链中,从上到下共4层(其中底层的mswsock. dll是操作系统本身所具有的功能)。UDP链包括3层。右边的3个是namespace provider,其中最右边的winrnr. dll是操作系统提供的。虽然现有技术中也有一些能够屏蔽(或者跳过)LSP DLL的机制,例如,Windows系统提供的策略,指定哪些进程加载或者不加载特定类型的LSPDLL,这种技术存在的缺点是只有Vista及其以上的Windows平台才支持这个特性;只能根据LSP所属的分类来排除,策略太粗放。另外一种机制是彻底抛弃WinSock,越过应用层的WinSock架构,直接向网络驱动发控制码、数据包进行网络通信。这种方法的缺点是需要了解和驱动层通信的任何细节,这细节一般是非文档化的;在有代理服务器的环境下,需要自行实现代理服务器协议才能正常访问网络;这种方法不会加载第三方的任何LSP DLL文件,在必须要加载某些代理服务器类型的LSP DLL文件才能正常访问网络的环境中,无法正常访问网络。本发明实施例是利用文件重定向机制,针对Windows系统中的特定或全部进程屏蔽特定或者全部的LSP DLL文件,避免有问题的LSP DLL文件加载到进程中,提高应用程序的稳定性和安全性。本发明实施例的原理主要是通过携带高稳定性、高兼容性的直通型的LSTOLL文件,利用该直通型的LSP DLL文件替换有问题的LSP DLL文件,从而将该直通型的DLL文件加载到应用程序的进程中。直通型LSP DLL文件用于网络数据的收发,就是发送数据包时直接转发给下层,接收数据包时直接转发给上层,不修改数据包的任何内容。对于数据收发来说,直通型LSP DLL文件就是发送数据包时直接转发给下层,接收数据包时直接转发给上层,不修改数据包的任何内容;对于名字解析来说,不做任何解析。直通型DLL文件可以通过特定磁盘文件路径加载的DLL文件,以便于在LSP链上层和下层之间透传数据包。LSP属于应用层,所有LSP DLL文件都运行在环3特权级别下,但LSP的行为可以从环3或者环O来进行一定的控制,比如对其文件或注册表操作进行控制。环3 (ring 3)、环O (ring 0)是Intel处理器架构的专用术语,环3是低特权级别,一般是由应用程序使用;环0是最高特权级别,由操作系统内核使用。由于LSP文件是分层结构,发送网络数据时,网络数据从最上层依次传递至最下层;接收网络数据时,网络数据从最下层依次传递至最上层。每层对应一个DLL文件,从上至下串接成一个链。链是按网络协议类型来划分的,比如TCP链、UDP链等。普通LSP DLL文件在收到应用程序或者上层LSP下达的网络数据发送请求后,会将相应的网络数据进行修改(比如加密类型的LSP会将网络数据进行加密,代理服务器转发类型的LSP会修改数据包的目的地址甚至重新进行网络数据包封装,防火墙类型的LSP会根据防火墙策略丢弃数据和阻止某些网络数据),然后将修改后的网络数据传递给下层LSP进行发送;普通LSTOLL在接收到下层LSP收到的网络数据后,会进行修改(比如解密等操作),然后将修改后的网络数据返回给上层LSP或应用程序。图2为本发明实施例的文件加载方法流程图。以transport provider为例参照图2,该方法包括以下步骤步骤S200,加载应用程序的配置列表。配置列表中的配置信息包括应用程序的基本信息,例如应用程序的安装目录、当前版本等。在本发明实施例中,配置信息另外还包括需要屏蔽哪些LSP DLL文件、需要在哪些进程中屏蔽这些LSP DLL文件。通常需要屏蔽的LSP DLL文件包括木马或者病毒等恶意程序的LSTOLL文件、网络加速器的LSP DLL文件(这些网络加速器主要是对网游、WEB浏览等应用进行加速的)等。木马或者病毒等恶意程序的LSP DLL文件在WinSock初始化时加载到安全应用软件的进程中后,会对其安全功能造成干扰和破坏,比如阻断安全软件和其云安全中心建立网络连接、直接终止安全软件的进程等;网络加速器的LSP DLL文件则可能导致安全软件崩溃、卡死、无法进行网络访问等,比如“99宿舍加速器”的LSP DLL文件曾经导致很多用户无法正常上网。步骤S210,根据所加载的配置列表中的配置信息判断需要加载的LSTOLL文件是否为特定LSP DLL文件。上述特定LSP DLL文件为需要被屏蔽的LSP DLL文件,预定义的LSTOLL文件是直通型DLL文件,直通型DLL文件为通过特定磁盘文件路径加载的DLL文件,用于在LSP链上层和下层之间透传数据包。根据配置列表中的LSP DLL文件的特征信息来判断LSP配置列表数据中是否包括需要被屏蔽的LSP DLL文件。特征信息为DLL文件的文件名、DLL文件的公司名、原始文件名或者产品名称,所述特征信息从DLL文件的版本信息中获得。步骤S220,将加载该特定LSP DLL文件的操作替换为加载预定义的LSTOLL文件的操作。操作系统中用于加载DLL文件的系统功能函数在加载LSI3DLL文件时如遇到有问题的LSP DLL文件,则将加载该有问题的LSP DLL文件的操作替换为加载直通型LSP DLL文件的操作。当本发明实施例拦截到加载需要被屏蔽的LSP DLL文件的文件操作时,所述的操作系统中用于加载DLL文件的系统功能函数读取Windows的LSP注册表配置,找到该DLL文件对应的LSP编号,加载直通型DLL文件,并将LSP编号传递给该直通型DLL文件。
WinSock初始化时会读取系统注册表中配置的LSP DLL链,如果操作系统中用于加载DLL文件的系统功能函数加载链中的某个LSP DLL文件失败,则WinSock初始化就失败了,就会导致对应的应用程序或者其所在的计算机系统无法正常访问网络。所以本发明实施例采用了一个稳定、简单的直通型LSP DLL文件来替代存在问题的LSP DLL文件,使得WinSock可以初始化成功,同时又可以避免加载有问题的LSP DLL文件到应用程序的进程中。根据本发明该方法的一个实施例,步骤S220进一步包括应用程序利用内嵌挂钩等方式对API函数进行挂钩处理,指向自定义的函数,其中该API函数是用于加载DLL文件的系统功能函数;当应用程序初始化WinSock时,调用该API函数以加载对应的LSP DLL文件,并将该LSP DLL的文件路径传递给该自定义的函数;在该自定义的函数中,应用程序根据配置信息判断该传递来的LSP DLL文件是否为需要被屏蔽的LSP DLL,如果是则将加载该LSP DLL文件的操作替换为加载直通型LSP DLL文件。如果传递来的LSTOLL文件为需要被屏蔽的LSP DLL文件,则替换LSP DLL文件的文件路径为直通型LSP DLL文件的文件路径,并传递给挂钩处理之前的API函数,执行调用直通型LSP DLL文件的文件路径。该实施例的一具体举例为在应用层(ring 3)对指定或者全部进程进行文件操作API函数(LoadLibrary/CreateFile等)的挂钩处理,具体包括a、应用程序首先使用inline hook(内嵌挂钩)等方式对LoadLibraryExWO这个API函数进行挂钩处理,指向应用程序自定义的函数My LoadLibraryExff (),LoadLibraryExff ()是Windows系统用来加载DLL文件的系统功能函数。b、当应用程序初始化WinSock时,会调用LoadLibraryExWOAPI函数加载对应的LSP DLL文件,并将LSP DLL文件的文件路径传递给该函数。C、由于应用程序对LoadLibraryExWO进行了挂钩处理,于是自定义的函数MyLoadLibraryExffO被该应用程序调用。在该自定义的函数中,应用程序根据配置信息检查传递进来的LSP DLL的特征信息例如,文件名等,如果和配置信息中要屏蔽的LSP DLL文件的特征符合(特征比如是文件名字符串特征(也可以是产品名称字符串/公司名字符串等特征),如果LSP DLL的文件名符合指定的字符串特征,就认为相匹配,也就是特征符合,文件名字符串特征是人工配置的。),则根据所述的文件名获知文件路径,替换LSP DLL文件的文件路径为直通型LSP DLL文件的文件路径如c Aprogram f iles\360\lsp. dll,并传递给挂钩处理之前的LoadLibraryExWO,即执行调用LoadLibraryExW( " c Aprogramfiles\360\lsp. dll"),同时,查询Windows系统的LSP注册表配置,从中获取到该需要替换的LSP DLL文件的编号,将该编号通过进程环境变量等方式传递给即将加载的直通型LSPDLL文件。d、如果LSP DLL文件的特征和配置信息中的特征不符合,就不替换LSTOLL文件的文件路径。根据本发明该方法的另一实施例,步骤S220进一步包括在驱动层挂钩文件操作的系统调用文件打开函数,将其替换为自定义的函数;当应用程序初始化WinSock时,逐个加载LSP链上的LSP DLL文件,打开对应的LSP DLL文件文件,预先调用自定义函数,在自定义函数中判断要打开的LSP DLL文件是否为待屏蔽LSPDLL文件,如果是,则将该LSP DLL文件的文件路径修替换为直通型LSP DLL文件的文件路径,并将此修改后的路径传递给挂钩前的文件打开函数,使系统加载直通型DLL。
本实施例中,以在驱动层挂钩文件操作的系统调用ZwOpenFile (仅以ZwOpenFile为例,如果挂钩ZwCreateFile、ZwMapViewOfSection,流程是类似的),将其替换为自行实现的函数My_ZwOpenFile ()。ZwOpenFile是一个内核函数,执行写驱动操作时使用,用于打开一个现有的文件、目录、设备、或卷。当应用程序初始化WinSock时,会调用动态链接库LoadLibrary ()逐个加载LSP链上的LSP DLL文件。LoadLibraryO会触发系统调用ZwOpenFile来打开对应的LSP DLL文件。由于ZwOpenFile已被挂钩,所以My_ZwOpenFile ()先被调用。在My_ZwOpenFile ()中,对要打开的LSP DLL文件进行特征判断(比如检测文件名字符串是否符合人工配置的正则表达式特征),如果和预先配置好的特征相匹配,则通过LSP DLL文件名获知文件路径,修为直通型LSP DLL文件的文件路径,并将此修改后的文件路径传递给钩挂前的ZwOpenFile (),从而让系统加载直通型DLL文件。如果要打开的LSP DLL文件不符合预先配置的特征,则不修改LSP DLL文件的文件名,直接传递给钩挂前的ZwOpenFile,以完成该LSP DLL文件的加载。根据本发明该方法的又一实施例,步骤S220进一步包括创建文件系统过滤驱动程序,用于对LSP DLL文件的打开操作进行过滤;应用程序初始化WinSock时,逐个加载LSP链上的LSP DLL文件,打开对应的LSP DLL文件,文件系统过滤驱动程序判断该打开的LSPDLL文件是否为配置列表中需要被屏蔽的LSP DLL文件,是则修改该LSP DLL文件的文件路径为直通型LSP DLL的文件路径,将加载该需要被屏蔽的LSP DLL文件替换为加载直通型DLL文件。本发明实施例可以使用文件系统过滤驱动进行DLL文件重定向。其中,Windows的文件系统过滤驱动程序也是分层结构,首先,编写一个文件系统过滤驱动(file systemfilter driver)程序,对NTFS、FAT等文件系统的操作进行监控。任何文件操作都会经由此文件系统过滤驱动程序,包括LSP DLL文件的打开操作等。当应用程序初始化WinSock时,会调用LoadLibraryO逐个加载LSP链上的LSPDLL文件。LoadLibraryO会触发系统调用ZwOpenFile来打开对应的LSP DLL文件,这个打开文件的系统调用会替换为对文件系统的操作,操作类型为IRP_MJ_CREATE,操作参数包含LSP DLL文件的文件名。对文件系统的所有操作会到达文件系统过滤驱动程序。在该过滤驱动程序的IRP_MJ_CREATE消息的处理函数中,对要打开的LSP DLL文件进行特征判断(比如检测文件名字符串是否符合人工配置的正则表达式特征),如果和预先配置好的特征相匹配,则修改LSPDLL文件的文件名为直通。当应用程序初始化WinSock时,会调用LoadLibraryO逐个加载LSP链上的LSPDLL文件。LoadLibraryO会触发系统调用ZwOpenFile来打开对应的LSP DLL文件,这个打开文件的系统调用会替换为对文件系统的操作,操作类型为IRP_MJ_CREATE,操作参数包含LSP DLL文件的的文件名。对文件系统的所有操作会到达文件系统过滤驱动程序。在该过滤驱动程序的IRP_MJ_CREATE消息的处理函数中,对要打开的LSP DLL文件进行特征判断(比如检测文件名字符串是否符合人工配置的正则表达式特征),如果和预先配置好的特征相匹配,则修改LSPDLL文件的文件名为直通型LSI3DLL的路径,并将此修改后的路径传递给文件系统驱动程序或者下层的文件系统过滤驱动程序,从而替换为加载直通型DLL。如果要打开的LSP DLL不符合预先配置的特征,则不修改LSP DLL文件名,直接传递给文件系统驱动程序或者下层的文件系统过滤驱动程序,以完成该LSP DLL的加载。在步骤220,当拦截到加载有问题的LSP DLL的文件操作时,读取Windows的LSP注册表配置,找到该DLL文件对应的唯一 LSP编号(编号一般是个整数或者一个⑶ID串如{5B2272D4-EAC0-4FFB-A2EB-B9EAA78DAEEF})。不加载有问题的LSTOLL文件,而是替换为加载直通型DLL文件,并将LSP编号传递给该直通型DLL文件。在步骤230,当加载直通型DLL文件后,获取传递的LSP编号,读取操作系统的LSP注册表配置,从而在配置中找到该直通型DLL文件本次在LSP链中的位置,并加载下层LSPDLL文件。通过上述步骤可以完成进程中整个WinSock的初始化,并且不会加载有问题的LSP DLL 文件。LSP链中的各个LSP DLL文件的加载是WinSock初始化中很重要的一个环节。基于WinSock实现的所有网络通信应用程序都要初始化WinSock才能进行后续的网络数据收发等操作。如果初始化WinSock失败,就无法进行网络通信。所以本发明实施例,可以完成进程中整个WinSock的初始化,并且不会加载有问题的LSP DLL文件,可以保证网络通信功能正常,从而使得应用程序可以正常的进行网络访问。图3为本发明一实施例的的文件加载装置结构框图。本发明实施例以DLL为例来说明,因为实际环境中遇到的导致应用程序故障的主要都是DLL。参照图3,本发明实施例的文件加载装置包括配置列表加载装置300,用于加载应用程序的配置列表。配置列表中包括需要屏蔽哪些LSP DLL文件以及需要在哪些进程中屏蔽这些LSPDLL文件。加载替换装置310,用于将程序加载有问题的LSP DLL文件的操作替换为加载直通型LSP DLL文件的操作。加载转换装置310,用于根据所加载的配置列表中的配置信息判断需要加载的LSPDLL文件是否为特定LSP DLL文件,并将加载该特定LSP DLL文件的操作替换为加载预定义的LSP DLL文件。即加载转换装置310用于实现文件重定向,也就是将程序加载有问题的LSP DLL文件的操作替换为加载直通型LSP DLL文件的操作。上述特定LSP DLL文件是指需要被屏蔽的LSP DLL文件,预定义的LSTOLL文件是直通型DLL文件,直通型DLL文件为通过特定磁盘文件路径加载的DLL文件,以便于通过所述直通型DLL文件为在LSP链上层和下层之间透传数据包。加载转换装置310根据所述配置列表中的LSP DLL文件的特征信息来判断LSP配置列表数据中是否包括需要被屏蔽的LSP DLL文件。特征信息为DLL文件的文件名、DLL文件的公司名、原始文件名或者产品名称,所述特征信息可以从DLL的版本信息中获得。加载转换装置310进一步包括程序创建单元311、挂钩处理单元312以及加载执行单元313。在其中一实施例中,挂钩处理单元312用于通过应用程序对API函数进行挂钩处理,指向自定义的函数,其中该API函数是用于加载DLL文件的系统功能函数。加载执行单元313,用于当应用程序初始化WinSock时,调用该API函数以加载对应的LSP DLL文件,并将该LSP DLL文件的文件路径传递给该自定义的函数,在该自定义的函数中,利用应用程序根据配置信息判断该传递来的LSP DLL文件是否为需要被屏蔽的LSPDLL文件,如果是则将加载该LSP DLL文件的操作替换为加载直通型LSP DLL文件。加载执行单元313,判断如果传递来的LSP DLL文件为需要被屏蔽的LSTOLL文件,则替换LSP DLL文件的文件路径为直通型LSP DLL文件的文件路径,并传递给挂钩处理之前的API函数,执行调用直通型LSP DLL文件的文件路径。在另一实施例中,挂钩处理单元312,用于在驱动层挂钩文件操作的系统调用文件打开函数,将其替换为自定义的函数;加载执行单元313,用于当应用程序初始化WinSock时,逐个加载LSP链上的LSPDLL文件,打开对应的LSP DLL文件,预先调用自定义函数,在自定义函数中判断要打开的LSP DLL文件是否为待屏蔽LSP DLL文件,如果是,则将该LSP DLL文件的文件路径替换为直通型LSP DLL文件的文件路径,并将此修改后的路径传递给钩挂前的文件打开函数,使系统加载直通型DLL文件。在再一实施例中,程序创建单元311用于创建文件系统过滤驱动程序,用于对LSPDLL文件的打开操作进行过滤;加载执行单元313,用于在应用程序初始化WinSock时,逐个加载LSP链上的LSPDLL文件,打开对应的LSP DLL文件,文件系统过滤驱动程序对判断该打开的LSP DLL文件是否为配置列表中需要被屏蔽的LSP DLL文件,是则修改该LSP DLL文件名或文件路径为直通型LSP DLL的文件名或文件路径,将加载该需要被屏蔽的LSP DLL文件替换为加载直通型DLL文件。加载转换装置在当拦截到加载有问题的LSP DLL文件的文件操作时,读取Windows的LSP注册表配置,找到该DLL文件对应的唯一 LSP编号(编号一般是个整数或者一个⑶ID 串如{5B2272D4-EAC0-4FFB-A2EB-B9EAA78DAEEF}),不加载有问题的 LSPDLL 文件,而是替换为加载直通型DLL文件,并将LSP编号传递给该直通型DLL文件。直通型DLL文件被加载后,获取传递过来的直通型DLL文件的LSP编号,读取Windows的LSP注册表配置,从而在配置中找到本次在LSP链中的位置,并加载下层LSP DLL文件。本发明的文件加载装置可以应用于计算机系统安全软件或者是其他任何计算机系统软件。下面是本发明实施例方案的一个具体应用举例,仍以transport provider为例。图4为该具体应用的流程图。参照图4,在步骤S410,应用程序启动,从所在的Windows系统的LSP注册表中读取到例如4个特定编号的DLL。DLL加载时,上层LSP DLL文件负责加载下层LSP DLL文件;发送网络数据时,上层LSP DLL文件将要发送的网络数据传递给下层LSP DLL文件;接收网络数据时,下层LSP DLL文件将接收到的网络数据传递给上层DLL文件。在步骤S420,根据应用程序的配置信息判断所读取的若干个LSP链是否包含了要被屏蔽的链,其中判断出要屏蔽TSFilter. dll这个容易导致程序崩溃的DLL文件,应用程序自带的直通型DLL文件的文件路径是c Aprogram files\360\lsp.dll。通常需要屏蔽的LSP DLL文件包括破坏安全软件功能的木马或者病毒等恶意程序的LSP DLL文件、导致应用程序崩溃/卡死/无法连网的LSP DLL文件。在步骤S430,应用程序启动文件操作的API挂钩或者内核挂钩/过滤。在步骤S440,当应用程序进行TCP网络通信,首先会触发TCP链的初始化。ws232.dll会加载该链顶部的LSP,即TSFilter. dll,这个DLL文件加载操作被挂钩所拦截。文件操作拦截函数检测到需要替换TSFi I ter. dl I,替换为加载直通型DLL c \programfiles\360\lsp. dll,并将TSFilter. dll在此链中的编号1019传递给该加载的直通型DLL。C \program f iles\360\lsp. dll被加载后,获取到LSP顶部的编号,查找Windows的LSP注册表配置,发现自己本次所在的链的下层是Engine, dll,开始加载Engine, dll,而Engine,dll又会加载其下层的mswsock. dll。至此完成整个TCP链的初始化。UDP链的初始化也是是类似的。最终所有的TSFilter. dll都被替换成了 c Aprogram files\360\lsp.dll。应用程序不会加载TSFilter. dll,并且网络通信正常。本发明实施例还公开了一种计算机系统,其中,包括计算机可读介质,中央处理单元,计算机驱动程序,操作系统,其中,配置列表加载装置300,用于响应在中央处理单元的指令操作,通过计算机可读介质加载应用程序的配置列表;加载转换装置310,用于在操作系统中,根据所加载的配置列表中的配置信息判断需要加载的LSP DLL文件是否为特定LSP DLL文件,并将加载该特定LSP DLL文件的操作替换为加载预定义的LSP DLL文件本发明实施例由于既可以屏蔽指定的LSP DLL文件,也可以屏蔽Windows系统中的全部LSP DLL文件,既可以屏蔽指定进程中的LSP DLL文件,也可以屏蔽所有进程中的LSP DLL文件,也可以实现对于需要屏蔽DLL的进程显示的是直通型DLL的路径,而其他进程显示的是LSP DLL的原始路径。,从而允许应用程序在保证网络通信功能正常的前提下提高自身的稳定性和安全性,带来好的用户体验。在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明实施例也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明实施例的内容,并且上面对特定语言所做的描述是为了披露本发明实施例的最佳实施方式。在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明实施例的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明实施例的示例性实施例的描述中,本发明实施例的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图即所要求保护的本发明实施例要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式
的权利要求书由此明确地并入该具体实施方式
,其中每个权利要求本身都作为本发明实施例的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明实施例的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。本发明实施例的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的通过文件重定向屏蔽特定LSP DLL的装置中的一些或者全部部件的一些或者全部功能。本发明实施例还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序应用程序)。这样的实现本发明实施例的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得至IJ,或者在载体信号上提供,或者以任何其他形式提供。应该注意的是上述实施例对本发明实施例进行说明而不是对本发明实施例进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明实施例可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
权利要求
1.一种文件加载方法,包括加载应用程序的配置列表;根据所加载的配置列表中的配置信息判断需要加载的LSP DLL文件是否为特定LSP DLL文件;若是,则将加载该特定LSP DLL文件的操作替换为加载预定义的LSP DLL文件操作;其中,所述特定LSP DLL文件为需要被屏蔽的LSP DLL文件,所述预定义的LSP DLL文件是直通型DLL文件,直通型DLL文件为通过特定磁盘文件路径加载的DLL文件,用于在 LSP链上层和下层之间透传数据包。
2.如权利要求1所述的方法,其特征在于,所述配置列表包括需要屏蔽的LSPDLL,以及所述需要屏蔽的LSP DLL所对应的进程信息。
3.根据权利要求2所述的方法,包括根据所述配置列表中的LSPDLL文件的特征信息来判断LSP配置列表数据中是否包括需要被屏蔽的LSP DLL文件。
4.根据权利要求3所述的方法,其特征在于,所述特征信息为DLL文件的文件名、DLL 文件的公司名、原始文件名或者产品名称,所述特征信息从DLL文件的版本信息中获得。
5.如权利要求2所述的方法,其特征在于,替换操作进一步包括在应用层对执行文件操作的API函数进行挂钩处理,当应用程序初始化WinSock时,调用该API函数以加载对应的LSP DLL文件,并将该LSP DLL文件的文件路径传递给该自定义的函数;在该自定义的函数中,应用程序根据配置信息判断该传递来的LSP DLL文件是否为需要被屏蔽的LSP DLL文件,如果是则将加载该LSP DLL文件的操作替换为加载直通型LSP DLL文件。
6.如权利要求5所述的方法,其特征在于,替换操作进一步包括如果传递来的LSP DLL文件为需要被屏蔽的LSP DLL文件,则替换LSP DLL文件的文件路径为直通型LSP DLL 文件的文件路径,并传递给挂钩处理之前的API函数,执行调用直通型LSP DLL文件的文件路径。
7.如权利要求2所述的方法,其特征在于,所述替换操作进一步包括在驱动层用于在驱动层挂钩文件操作的系统调用文件打开函数,将其替换为自定义的函数;将该LSP DLL文件路径修替换为直通型LSP DLL文件的文件路径,并将此修改后的路径传递给钩挂前的文件打开函数,使系统加载直通型DLL文件。
8.如权利要求2所述的方法,其特征在于,所述替换操作进一步包括创建文件系统过滤驱动程序,用于对LSP DLL文件的打开操作进行过滤; 文件系统过滤驱动程序对判断该打开的LSP DLL文件是否为配置列表中需要被屏蔽的 LSP DLL文件,是则修改该LSP DLL文件的文件路径为直通型LSP DLL文件的文件路径,将加载该需要被屏蔽的LSP DLL文件替换为加载直通型DLL文件。
9.如权利要求5-8任一项所述的方法,其特征在于,在替换操作步骤中,当拦截到加载需要被屏蔽的LSP DLL文件的文件操作时,读取Windows的LSP注册表配置,获取该DLL文件对应的LSP编号,加载直通型DLL文件,并将LSP编号传递给该直通型DLL文件。
10.如权利要求9所述的方法,其特征在于,该方法进一步包括当加载直通型DLL文件后,获取传递的LSP编号,读取操作系统的LSP注册表配置,从而在配置中找到该直通型DLL文件本次在LSP链中的位置,并加载下层LSP DLL文件。
11.一种文件加载装置,包括配置文件加载装置,用于加载应用程序的配置列表;加载转换装置,根据所加载的配置列表中的配置信息判断需要加载的LSTOLL文件是否为特定LSP DLL文件,并将加载该特定LSP DLL文件的操作替换为加载预定义的LSP DLL 文件;其中,所述特定LSP DLL文件为需要被屏蔽的LSP DLL文件,所述预定义的LSP DLL文件是直通型DLL文件,直通型DLL文件为通过特定磁盘文件路径加载的DLL文件,以便于通过所述直通型DLL文件在LSP链上层和下层之间透传数据包。
12.如权利要求11所述的文件加载装置,其特征在于,所述配置列表包括需要屏蔽的 LSP DLL文件,以及要屏蔽这些LSP DLL文件的进程。
13.根据权利要求12所述的文件加载装置,包括根据所述配置列表中的LSPDLL文件的特征信息来判断LSP配置列表数据中是否包括需要被屏蔽的LSP DLL文件。
14.根据权利要求13所述的文件加载装置,其特征在于,所述特征信息为DLL文件的文件名、DLL文件的公司名、原始文件名或者产品名称,所述特征信息从DLL文件的版本信息中获得。
15.如权利要求12所述的文件加载装置,其特征在于,加载转换装置进一步包括 挂钩处理单元,用于对执行文件操作的API函数进行挂钩处理,指向自定义的函数,其中该API函数是用于加载DLL文件的系统功能函数;加载执行单元,用于当应用程序初始化WinSock时,调用该API函数以加载对应的LSP DLL文件,并将该LSP DLL文件的文件路径传递给该自定义的函数,根据配置信息判断该传递来的LSP DLL文件是否为需要被屏蔽的LSP DLL文件,如果是则将加载该LSP DLL文件的操作替换为加载直通型LSP DLL文件。
16.如权利要求15所述的文件加载装置,其特征在于,加载转换装置判断如果传递来的LSP DLL文件为需要被屏蔽的LSP DLL文件,则替换LSTOLL文件的文件路径为直通型 LSP DLL文件的文件路径,并传递给挂钩处理之前的API函数,执行调用直通型LSP DLL文件的文件路径。
17.如权利要求12所述的文件加载装置,其特征在于,加载转换装置进一步包括 挂钩处理单元,用于在驱动层挂钩文件操作的系统调用文件打开函数,将其替换为自定义的函数;加载执行单元,当应用程序初始化WinSock时,加载LSP链上的LSP DLL文件,打开对应的LSP DLL文件,预先调用自定义函数,判断要打开的LSTOLL文件是否为待屏蔽LSP DLL 文件,如果是,则将该LSP DLL文件路径修替换为直通型LSP DLL文件的文件路径,并将此修改后的路径传递给钩挂前的文件打开函数,使系统加载直通型DLL。
18.如权利要求12所述的文件加载装置,其特征在于,加载转换装置进一步包括 程序创建单元,用于创建文件系统过滤驱动程序,用于对LSP DLL文件的打开操作进行过滤;加载执行单元,用于在应用程序初始化WinSock时,加载LSP链上的LSTOLL文件,打开对应的LSP DLL文件,如果该打开的LSP DLL文件是配置列表中需要被屏蔽的LSP DLL文件,则修改该LSP DLL文件的文件名或文件路径为直通型LSP DLL文件的文件名或文件路径,将加载该需要被屏蔽的LSP DLL文件替换为加载直通型DLL。
19.如权利要求15-18任一项所述的文件加载装置,其特征在于,当拦截到加载需要被屏蔽的LSP DLL文件的文件操作时,加载转换装置读取Windows的LSP注册表配置,找到该 DLL文件对应的LSP编号,加载直通型DLL文件,并将LSP编号传递给该直通型DLL文件。
20.如权利要求19所述的文件加载装置,其特征在于,加载转换装置在当加载直通型 DLL文件后,获取传递的LSP编号,读取操作系统的LSP注册表配置,从而在配置中找到该直通型DLL文件在LSP链中的位置,并加载下层LSP DLL文件。
全文摘要
本发明实施例公开了一种文件加载方法和装置,该装置包括配置文件加载装置,用于加载应用程序的配置列表;加载转换装置,根据所加载的配置列表中的配置信息判断需要加载的LSP DLL文件是否为特定LSP DLL文件,并将加载该特定LSP DLL文件的操作替换为加载预定义的LSP DLL文件;其中,所述特定LSP DLL文件为需要被屏蔽的LSP DLL文件,所述预定义的LSP DLL文件是直通型DLL文件,直通型DLL文件为通过特定磁盘文件路径加载的DLL文件,以便于通过所述直通型DLL文件在LSP链上层和下层之间透传数据包。本发明实施例的方案通过文件加载技术,使得应用程序避免加载需要被屏蔽的LSP DLL文件,而是加载直通型LSP DLL文件,并保证正常的网络通信。
文档编号H04L29/06GK102999354SQ20121046051
公开日2013年3月27日 申请日期2012年11月15日 优先权日2012年11月15日
发明者张波, 谭合力 申请人:北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1