具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1为WinSock框架示意图,参照图1,transport provider有两个链:TCP链、UDP链。还可以有其它类型的LSP链。
TCP链中,从上到下共4层(其中底层的mswsock.dll是操作系统本身所具有的功能)。UDP链包括3层。
右边的3个是namespace provider,其中最右边的winrnr.dll是操作系统提供的。
其中,LSP属于应用层,所有LSP DLL都运行在环3特权级别下,但LSP的行为可以从环3或者环0来进行一定的控制,比如对其文件或注册表操作进行控制。LSP既可以用来开发正规的应用,病毒木马作者也可以利用LSP在用户的系统中插入恶意代码,窃取用户信息等。另外,由于LSP注入到系统的绝大多数进程中,串接在应用程序的网络访问操作中,如果代码考虑不周,就会导致不能上网、程序崩溃或卡死等现象。所以需要有一定的手段来屏蔽LSP机制,防止对应用程序无实际作用的第三方的LSP DLL加载到应用程序进程中产生干扰,这对安全软件尤其重要。
常见的屏蔽(或者跳过)LSP DLL的方法包括:
1、利用Windows系统提供的策略,指定哪些进程加载或者不加载特定类型的LSP DLL,这种技术存在的缺点是:只有Vista及其以上的Windows平台才支持这个特性;只能根据LSP所属的分类来排除,策略太粗放。
2、彻底抛弃WinSock,越过应用层的WinSock架构,直接向网络驱动发控制码、数据包进行网络通信。这种方法的缺点是:需要了解和驱动层通信的任何细节,这细节一般是非文档化的;在有proxy的环境下,需要自行实现proxy协议才能正常访问网络;这种方法不会加载第三方的任何LSP DLL,在必须要加载某些proxy类型的LSP DLL才能正常访问网络的环境中,无法上网。
3、自带一份Windows默认的LSP配置,这个配置中不包括操作系统提供的之外的任何LSP DLL,通过注册表重定向让应用程序访问这个默认LSP配置,从而不加载第三方的任何LSP DLL。这种方法的缺点是:不会加载第三方的任何LSP DLL,在必须要加载某些proxy类型的LSP DLL才能正常访问网络的环境中,无法上网;要针对不同的Windows版本带一份不同的默认LSP配置,比如32位XP带一份,32位Win7带另一份。
WinSock中包括transport provider DLL和namespace provider DLL两种可扩展的DLL,transport provider用于网络数据收发,是分层的,理论上支持无限多层,所有的各层上下串在一起形成一个链;namespace provider用于网络名称解析,不分层。一般所说的LSP是指transport provider。本发明既支持transport provider,也支持namespace provider。
本发明实施中,可以基于Windows的LSP注册表配置,删除其中要屏蔽的LSP DLL信息后,构造新的LSP注册表配置。将应用程序初始化WinSock时读取LSP配置的注册表操作重定向到这份新的LSP注册表配置上,从而使得应用程序不会加载要屏蔽的LSP DLL。
图2为本发明的注册表重定向方法流程图。该方法通过构造新的LSP配置注册表数据、重定向LSP注册表配置注册表数据的读写操作来向应用程序屏蔽特定或全部LSP DLL的存在。
通常需要屏蔽的LSP DLL包括:木马病毒的LSP DLL、对安全软件基本无用的网络加速器的LSP DLL(这些网络加速器主要是对网络游戏、WEB浏览等应用进行加速的)等。木马病毒的LSP DLL在WinSock初始化时加载到安全应用软件的进程中后,会对其安全功能造成干扰和破坏,比如阻断安全软件的计算机处理系统和其云安全中心服务器建立网络连接、直接终止安全软件的进程等;网络加速器的LSP DLL可能导致安全软件崩溃、卡死、无法联网等,比如“99宿舍加速器”的LSP DLL曾经导致很多用户无法正常上网。
参照图2,在步骤S200,加载应用程序的配置列表。配置列表中的配置信息包括需要屏蔽哪些LSP DLL、需要在哪些进程中屏蔽这些LSP DLL。通常,选择哪些进程来屏蔽这些LSP DLL是由用户根据实际需要来确定的,例如如果360用户需要在卫士主程序、木马查杀中屏蔽迅雷网络游戏加速器的LSP,则相应的配置为:进程列表为:360safe.exe(360卫士主程序)、dsmain.exe(360卫士的木马查杀)LSP列表为XLAccLSP.dll(迅雷网络游戏加速器的LSP DLL)。
在步骤210,读取系统的LSP配置注册表数据。
Windows的LSP配置注册表包括transport provider、namespace provider的信息,保存在注册表分支HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters下。
Transport provider(“数据传输提供者”或者“传输提供者”)的配置信息包括:1)每个LSP DLL的数字编号和全球唯一标识GUID编号、文件路径、支持的网络协议类型如TCP/UDP等;2)每个LSP链的数字编号和GUID编号、处在该链中的每个DLL的数字编号和GUID编号。
transport provider主要是针对namespace provider(名字空间提供者)而言。通常说的LSP DLL主要是指前者,本发明对传输提供者、名字空间提供者DLL都适用,下面所有的例子都是用transport provider为例来说明的,因为实际环境中遇到的导致应用程序故障的主要都是transport provider。
所述配置注册表中还包括:DLL/EXE的文件名,也可以包括DLL/EXE的公司名、原始文件名、产品名称等,这些信息一般可以从DLL/EXE的版本信息中获得。根据这些特征信息确定哪些是需要屏蔽的LSP DLL。
步骤220,根据所加载的应用程序的配置信息,判断在所读取的LSP配置注册表数据中是否包括需要屏蔽的LSP DLL。
在该步骤,判断所读取的LSP配置注册表数据中LSP DLL的特征信息与所加载的应用程序的配置信息中需要屏蔽的LSP DLL的特征信息是否匹配,特征信息例如是文件名等,如果和配置信息中要屏蔽的LSP DLL的特征符合(特征比如是文件名字符串特征,也可以是产品名称字符串/公司名字符串等特征),例如如果LSP DLL的文件名符合指定的字符串特征,就认为相匹配,也就是特征符合。
步骤230,根据判断结果,如果在所读取的LSP配置注册表数据中包括需要屏蔽的LSP DLL,则将该LSP DLL的信息从LSP配置注册表数据中删除,从而构造出新的LSP配置注册表数据,将此新的注册表数据另存在注册表的其它位置。系统原有的LSP配置注册表数据是保持不变的。
保持原有的LSP配置注册表数据是为了让其它的应用程序仍然能读取到原有的配置注册表数据,从而不影响其它程序的正常工作,例如网络游戏计算机处理系统需要能读取到原始的LSP配置注册表数据才会去加载网络游戏加速器的LSP DLL从而得到游戏的网络加速功能。只有指定的应用程序才会读取到新构造的LSP配置注册表数据,例如安全软件读取到的是不包括网络游戏加速器的LSP DLL的新的LSP配置注册表数据,从而使得安全软件不会加载网络游戏加速器的LSP DLL,避免受到不稳定的网络游戏加速器的LSP DLL的影响出现崩溃或卡死。
步骤240,采用如下方式之一进行注册表重定向,将程序操作Windows的LSP配置注册表数据的操作重定向到新建的LSP注册表配置注册表数据上。本实施例中,在应用层(ring 3)对指定或者全部进程进行注册表操作API函数的挂钩,和/或在驱动层(ring 0)通过挂钩挂钩注册表操作的系统调用或者使用系统提供的CmCallback注册表回调例程。
环0的注册表相关的系统调用包括:系统服务NtOpenKey、NtCreateKey、NtQueryValueKey、NtQueryInfoKey等,是一整套和注册表操作相关的调用。通过挂钩这些系统调用,可以实现对应用程序的注册表操作的监视、修改,包括完成注册表操作的重定向功能。对于LSP屏蔽的需求来说,可以选择挂钩挂钩NtOpenKey()系统调用。
环0的注册表操作回调可以包括一种,即通过注册表回调函数CmRegisterCallback()系统注册自定义的注册表操作过滤函数,当应用程序进行任何注册表操作时,自定义函数都会被调用,从而可以对应用程序的注册表操作进行监视、修改,包括完成注册表操作的重定向功能。
环3主要就是挂钩注册表的打开API函数RegOpenKeyEx()即可。
图3为根据本发明一实施例的通过文件重定向屏蔽特定LSP DLL的装置结构框图。仍以transport provider为例,该装置包括:
配置信息加载模块300,用于加载应用程序的配置信息。配置信息包括应用程序的基本信息,在本发明,配置信息另外还包括:需要屏蔽哪些LSP DLL、需要在哪些进程中屏蔽这些LSP DLL。
数据读取模块310,用于读取系统的LSP配置注册表数据。
判断模块320,用于根据所加载的应用程序的配置信息,判断在所读取的LSP配置注册表数据中是否包括需要屏蔽的LSP DLL,如果包括,则将该LSPDLL的信息从LSP配置注册表数据中删除,从而构造出新的LSP配置注册表数据,将此新的注册表数据另存在注册表的其它位置。系统原有的LSP配置注册表数据是保持不变的。
重定向执行模块330,将程序操作Windows的LSP配置注册表数据的操作重定向到新建的LSP注册表配置注册表数据上进行注册表重定向:第一种方式:在应用层(ring 3)对指定或者全部进程进行注册表操作API函数的挂钩;第二种方式:在驱动层(ring 0)通过挂钩注册表操作的系统调用或者使用系统提供的CmCallback注册表回调例程。
另外本发明还提供了一种包括上述注册表重定向装置的计算机处理系统,该计算机处理系统还包括有WinSock初始化启动装置,用于启动应用程序初始化WinSock。
下面是本发明方案的一个具体应用举例,仍以transport provider为例。
参照图4,
首先,在步骤S400,应用程序启动,从所在的Windows系统的LSP注册表中读取例如编号为1020、1021、1022、1017、1018的5个LSP链,在此仅以举例的方式列举了5个LSP链,LSP链的名称及数量可根据实际应用进行变化。在步骤S410,根据应用程序的配置信息判断所读取的5个LSP链是否包括要被屏蔽的链,如果在该步骤判断出未包括要被屏蔽的链,则在步骤S420,指定应用程序读取原始的LSP注册表。如果在步骤S410判断出LSP注册表中包括需要被屏蔽的DLL,例如,判断出要屏蔽TSFilter.dll这个容易导致程序崩溃的DLL,则在步骤S430从上述5个链中删除了TSFilter.dll这个LSP后,变为4个链。
其中1022这个链,因为删除了动态链接库TSFilter.dll后,链中只剩下操作系统提供的mswsock.dll,故将此链全部抹掉。然后在步骤S440,将新的LSP链数据存入新的注册表位置HKEY_LOCAL_MACHINE\Software\360\WinSock2\Parameters\Protocol_Catalog9。在此仅以举例的方式描述了删除动态链接库TSFilter.dll及其所在的链1022,当然在实际应用中,在删除DLL的同时,可根据实际情况来删除其所在的链或者也可保留其所在的链。
在步骤S450,在应用层挂钩RegOpenKeyEx()API函数,或者在驱动层NtOpenKey()系统调用。当指定的应用程序即将读取原有注册表HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WinSock2\Parameters\Protocol_Catalog9时,让其读取新的注册表HKEY_LOCAL_MACHINE\Sofiware\360\WinSock2\Parameters\Protocol_Catalog9。
从而使得指定的应用程序不会加载TSFilter.dll,并且网络通信正常。
本发明实施例中,由于既可以屏蔽指定的LSP DLL,也可以屏蔽Windows系统中的全部LSP DLL,既可以屏蔽指定进程中的LSP DLL,也可以屏蔽所有进程中的LSP DLL,对于采用哪种屏蔽方式,主要取决于应用程序的开发商的屏蔽策略,屏蔽策略通过应用程序的LSP屏蔽配置注册表数据来实现。具有很大的灵活性,从而允许应用程序在保证网络通信功能正常的前提下提高自身的稳定性和安全性,带来好的用户体验。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的通过注册表重定向屏蔽特定LSP DLL的装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序应用程序)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包括”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。