《一种文件重定向方法、装置和计算机系统.pdf》由会员分享,可在线阅读,更多相关《一种文件重定向方法、装置和计算机系统.pdf(18页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103019765 A (43)申请公布日 2013.04.03 CN 103019765 A *CN103019765A* (21)申请号 201210461020.X (22)申请日 2012.11.15 G06F 9/445(2006.01) (71)申请人 北京奇虎科技有限公司 地址 100088 北京市西城区新街口外大街 28 号 D 座 112 室 (德胜园区) 申请人 奇智软件 (北京) 有限公司 (72)发明人 张波 谭合力 (74)专利代理机构 中科专利商标代理有限责任 公司 11021 代理人 宋焰琴 (54) 发明名称 一种文件重定向方法、 装置。
2、和计算机系统 (57) 摘要 本发明实施例公开了一种文件重定向方法、 装置和计算机系统, 该方法包括 : 加载应用程序 的配置列表 ; 根据所加载的配置列表的配置信息 判断需要加载的 LSP DLL 文件是否为特定 LSP DLL文件 ; 将加载该特定LSP DLL文件的操作替换 为加载预定义的 LSP DLL 文件操作。本发明实施 例的方案通过文件重定向技术, 使得应用程序避 免加载需要被屏蔽的 LSP DLL 文件, 而是加载直 通型 LSP DLL 文件, 并保证正常的网络通信。 (51)Int.Cl. 权利要求书 3 页 说明书 12 页 附图 2 页 (19)中华人民共和国国家知识产。
3、权局 (12)发明专利申请 权利要求书 3 页 说明书 12 页 附图 2 页 1/3 页 2 1. 一种文件重定向方法, 其特征在于, 包括 : 加载应用程序的配置列表 ; 根据所加载的配置列表中的配置信息判断需要加载的 LSP DLL 文件是否为特定 LSP DLL 文件 ; 若是, 则将加载该特定 LSP DLL 文件的操作替换为加载预定义的 LSP DLL 文件操 作。 2. 如权利要求 1 所述的方法, 其特征在于, 所述特定 LSP DLL 文件为需要被屏蔽的 LSP DLL 文件, 所述预定义的 LSP DLL 文件是直通型 DLL 文件, 直通型 DLL 文件为通过特定磁盘 文。
4、件路径加载的 DLL 文件, 用于在 LSP 链上层和下层之间透传数据包。 3. 如权利要求 2 所述的方法, 其特征在于, 所述配置列表包括需要屏蔽的 LSP DLL, 以 及所述需要屏蔽的 LSP DLL 所对应的进程信息。 4. 根据权利要求 3 所述的方法, 包括 : 根据所述配置列表中的 LSP DLL 文件的特征信 息来判断 LSP 配置列表数据中是否包括需要被屏蔽的 LSP DLL 文件。 5. 根据权利要求 4 所述的方法, 其特征在于, 所述特征信息为 DLL 文件的文件名、 DLL 文件的公司名、 原始文件名或者产品名称, 所述特征信息从 DLL 文件的版本信息中获得。 6。
5、. 如权利要求 3 所述的方法, 其特征在于, 替换操作进一步包括 : 在应用层对执行文件操作的API函数进行挂钩处理, 当应用程序初始化WinSock时, 调 用该 API 函数以加载对应的 LSP DLL 文件, 并将该 LSP DLL 文件的文件路径传递给该自定 义的函数 ; 在该自定义的函数中, 应用程序根据配置信息判断该传递来的 LSP DLL 文件是否为需 要被屏蔽的 LSP DLL 文件, 如果是则将加载该 LSP DLL 文件的操作替换为加载直通型 LSP DLL 文件。 7. 如权利要求 6 所述的方法, 其特征在于, 替换操作进一步包括 : 如果传递来的 LSP DLL 文。
6、件为需要被屏蔽的 LSP DLL 文件, 则替换 LSP DLL 文件的文件路径为直通型 LSP DLL 文件的文件路径, 并传递给挂钩处理之前的API函数, 执行调用直通型LSP DLL文件的文件 路径。 8. 如权利要求 3 所述的方法, 其特征在于, 所述替换操作进一步包括 : 在驱动层用于在驱动层挂钩文件操作的系统调用文件打开函数, 将其替换为自定义的 函数 ; 将该LSP DLL文件路径修替换为直通型LSP DLL文件的文件路径, 并将此修改后的路 径传递给钩挂前的文件打开函数, 使系统加载直通型 DLL 文件。 9. 如权利要求 3 所述的方法, 其特征在于, 所述替换操作进一步包。
7、括 : 创建文件系统过滤驱动程序, 用于对 LSP DLL 文件的打开操作进行过滤 ; 文件系统过滤驱动程序对判断该打开的LSP DLL文件是否为配置列表中需要被屏蔽的 LSP DLL 文件, 是则修改该 LSP DLL 文件的文件路径为直通型 LSP DLL 文件的文件路径, 将 加载该需要被屏蔽的 LSP DLL 文件替换为加载直通型 DLL 文件。 10. 如权利要求 6-9 任一项所述的方法, 其特征在于, 在替换操作步骤中, 当拦截到加 载需要被屏蔽的 LSP DLL 文件的文件操作时, 读取 Windows 的 LSP 注册表配置, 获取该 DLL 文件对应的 LSP 编号, 加载。
8、直通型 DLL 文件, 并将 LSP 编号传递给该直通型 DLL 文件。 11. 如权利要求 10 所述的方法, 其特征在于, 该方法进一步包括 : 当加载直通型 DLL 文 件后, 获取传递的 LSP 编号, 读取操作系统的 LSP 注册表配置, 从而在配置中找到该直通型 权 利 要 求 书 CN 103019765 A 2 2/3 页 3 DLL 文件本次在 LSP 链中的位置, 并加载下层 LSP DLL 文件。 12. 一种文件重定向装置, 其特征在于, 包括 : 配置文件加载装置, 用于加载应用程序的配置列表 ; 加载转换装置, 根据所加载的配置列表中的配置信息判断需要加载的 LSP。
9、DLL 文件是 否为特定LSP DLL文件, 并将加载该特定LSP DLL文件的操作替换为加载预定义的LSP DLL 文件。 13. 如权利要求 12 所述的文件重定向装置, 其特征在于, 所述特定 LSPDLL 文件为需要 被屏蔽的 LSP DLL 文件, 所述预定义的 LSP DLL 文件是直通型 DLL 文件, 直通型 DLL 文件为 通过特定磁盘文件路径加载的 DLL 文件, 以便于通过所述直通型 DLL 文件在 LSP 链上层和 下层之间透传数据包。 14. 如权利要求 13 所述的文件重定向装置, 其特征在于, 所述配置列表包括需要屏蔽 的 LSP DLL 文件, 以及要屏蔽这些 。
10、LSP DLL 文件的进程。 15.根据权利要求14所述的文件重定向装置, 包括 : 根据所述配置列表中的LSP DLL文 件的特征信息来判断 LSP 配置列表数据中是否包括需要被屏蔽的 LSP DLL 文件。 16.根据权利要求15所述的文件重定向装置, 其特征在于, 所述特征信息为DLL文件的 文件名、 DLL 文件的公司名、 原始文件名或者产品名称, 所述特征信息从 DLL 文件的版本信 息中获得。 17. 如权利要求 14 所述的文件重定向装置, 其特征在于, 加载转换装置进一步包括 : 挂钩处理单元, 用于对执行文件操作的 API 函数进行挂钩处理, 指向自定义的函数, 其 中该 A。
11、PI 函数是用于加载 DLL 文件的系统功能函数 ; 加载执行单元, 用于当应用程序初始化 WinSock 时, 调用该 API 函数以加载对应的 LSP DLL 文件, 并将该 LSP DLL 文件的文件路径传递给该自定义的函数, 根据配置信息判断该传 递来的 LSP DLL 文件是否为需要被屏蔽的 LSP DLL 文件, 如果是则将加载该 LSP DLL 文件 的操作替换为加载直通型 LSP DLL 文件。 18. 如权利要求 17 所述的文件重定向装置, 其特征在于, 加载转换装置判断如果传递 来的 LSP DLL 文件为需要被屏蔽的 LSP DLL 文件, 则替换 LSPDLL 文件的。
12、文件路径为直通型 LSP DLL 文件的文件路径, 并传递给挂钩处理之前的 API 函数, 执行调用直通型 LSP DLL 文 件的文件路径。 19. 如权利要求 14 所述的文件重定向装置, 其特征在于, 加载转换装置进一步包括 : 挂钩处理单元, 用于在驱动层挂钩文件操作的系统调用文件打开函数, 将其替换为自 定义的函数 ; 加载执行单元, 当应用程序初始化 WinSock 时, 加载 LSP 链上的 LSP DLL 文件, 打开对 应的LSP DLL文件, 预先调用自定义函数, 判断要打开的LSPDLL文件是否为待屏蔽LSP DLL 文件, 如果是, 则将该 LSP DLL 文件路径修替。
13、换为直通型 LSP DLL 文件的文件路径, 并将此 修改后的路径传递给钩挂前的文件打开函数, 使系统加载直通型 DLL。 20. 一种计算机系统, 其中, 包括 : 计算机可读介质, 中央处理单元, 计算机驱动程序, 操作系统, 其中, 配置列表加载装置, 用于加载应用程序的配置列表 ; 加载转换装置, 根据所加载的配置列表中的配置信息判断需要加载的 LSPDLL 文件是 权 利 要 求 书 CN 103019765 A 3 3/3 页 4 否为特定LSP DLL文件, 并将加载该特定LSP DLL文件的操作替换为加载预定义的LSP DLL 文件。 权 利 要 求 书 CN 10301976。
14、5 A 4 1/12 页 5 一种文件重定向方法、 装置和计算机系统 技术领域 0001 本发明涉及信息安全技术, 具体涉及一种文件重定向方法、 装置及计算机系统。 背景技术 0002 LSP(Layered Service Provider, 网络套接字工具 ) 是 Windows 平台的通信架构 WinSock(Windows Sockets, 分层服务提供商)中特有的一个机制, 通过可扩展的LSP机制, 使得第三方软件开发商可以在应用程序中插入 DLL(Dynamic Link Library, 动态链接库 ) 对 TCP/IP 数据包进行监听、 修改, 从而开发出丰富的网络应用, 如聊。
15、天软件通信加密工具、 网络代理软件、 网游加速器等。 0003 LSP 既可以用来开发正规的应用, 病毒或者木马作者也可以利用 LSP 在用户的操 作系统中插入恶意代码, 窃取用户信息等。另外, 由于 LSP 注入到系统的绝大多数进程中, 串接在应用程序的网络访问操作中, 如果代码考虑不周, 就会导致应用程序所在的计算机 系统不能上网、 程序崩溃或卡死等现象。 0004 然而, 目前还没有一种有效的措施来及时发现并屏蔽一些有问题的 LSPDLL 文件。 发明内容 0005 鉴于上述问题, 提出了本发明实施例以便提供一种克服上述问题或者至少部分地 解决上述问题的文件重定向方法和装置。 0006 。
16、依据本发明实施例的一个方面, 提供了一种文件重定向方法, 包括 : 加载应用程序 的配置信息 ; 根据所加载的配置信息判断加载有问题的LSP DLL文件 ; 将加载有问题的LSP DLL 文件的操作替换为加载直通型 LSP DLL 文件。 0007 可选地, 特定 LSP DLL 文件为需要被屏蔽的 LSP DLL 文件, 所述预定义的 LSP DLL 文件是直通型 DLL 文件, 直通型 DLL 文件为通过特定磁盘文件路径加载的 DLL 文件, 以便于 在 LSP 链上层和下层之间透传数据包。 0008 可选地, 所述配置列表包括需要屏蔽的LSP DLL文件, 以及要屏蔽这些LSP DLL文。
17、 件的进程。 0009 可选地, 根据所述配置列表中的 LSP DLL 文件的特征信息来判断 LSP 配置列表数 据中是否包括需要被屏蔽的 LSP DLL 文件。 0010 可选地, 所述特征信息为 DLL 文件的文件名、 DLL 文件的公司名、 原始文件名或者 产品名称, 所述特征信息从 DLL 的版本信息中获得。 0011 可选地, 替换操作进一步包括 : 应用程序对 API 函数进行挂钩处理, 指向自定义的 函数, 其中该 API 函数是用于加载 DLL 文件的系统功能函数 ; 当应用程序初始化 WinSock 时, 调用该 API 函数以加载对应的 LSP DLL 文件, 并将该 LS。
18、P DLL 文件的文件路径传递给该 自定义的函数 ; 在该自定义的函数中, 应用程序根据配置信息判断该传递来的 LSP DLL 文 件是否为需要被屏蔽的 LSP DLL 文件, 如果是则将加载该 LSP DLL 文件的操作替换为加载 直通型 LSP DLL 文件操作。如果传递来的 LSP DLL 文件为需要被屏蔽的 LSP DLL 文件, 则 说 明 书 CN 103019765 A 5 2/12 页 6 替换LSP DLL文件的文件路径为直通型LSP DLL的文件路径, 并传递给挂钩处理之前的API 函数, 执行调用直通型 LSP DLL 的文件路径。 0012 可选地, 所述替换操作进一步。
19、包括 : 在驱动层挂钩文件操作的系统调用文件打开 函数, 将其替换为自定义的函数 ; 当应用程序初始化 WinSock 时, 逐个加载 LSP 链上的 LSP DLL 文件, 打开对应的 LSP DLL 文件, 预先调用自定义函数, 在自定义函数中判断要打开的 LSP DLL文件是否为待屏蔽LSPDLL文件, 如果是, 则将该LSP DLL文件的文件路径修替换为 直通型LSP DLL文件的文件路径, 并将此修改后的文件路径传递给钩挂前的文件打开函数, 使系统加载直通型 DLL 文件。 0013 可选地, 所述替换操作进一步包括 : 0014 创建文件系统过滤驱动程序, 用于对 LSP DLL 。
20、文件的打开操作进行过滤 ; 应用程 序初始化 WinSock 时, 逐个加载 LSP 链上的 LSP DLL 文件, 打开对应的 LSP DLL 文件, 文件 系统过滤驱动程序对判断该打开的 LSP DLL 文件是否为配置列表中需要被屏蔽的 LSP DLL 文件, 是则修改该LSP DLL文件的文件路径为直通型LSP DLL的文件路径, 将加载该需要被 屏蔽的 LSP DLL 文件替换为加载直通型 DLL 文件。 0015 可选地, 在替换操作步骤中, 当拦截到加载需要被屏蔽的LSP DLL文件的的文件操 作时, 读取 Windows 的 LSP 注册表配置, 找到该 DLL 文件对应的 LS。
21、P 编号, 加载直通型 DLL 文件, 并将 LSP 编号传递给该直通型 DLL 文件。 0016 可选地, 当加载直通型 DLL 文件后, 获取传递的 LSP 编号, 读取操作系统的 LSP 注 册表配置, 从而在配置中找到该直通型 DLL 文件本次在 LSP 链中的位置, 并加载下层 LSP DLL 文件。 0017 依据本发明实施例的另一方面, 提出一种文件重定向装置, 包括 : 配置文件加载装 置, 用于加载应用程序的配置列表 ; 加载转换装置, 根据所加载的配置列表中的配置信息判 断需要加载的 LSP DLL 文件是否为特定 LSP DLL 文件, 并将加载该特定 LSP DLL 文。
22、件的操 作替换为加载预定义的 LSP DLL 文件。 0018 依据本发明实施例的再一方面, 提出一种计算机系统, 包括 : 配置文件加载装置, 用于加载应用程序的配置列表 ; 加载替换装置, 根据所加载的配置列表中的配置信息判断 需要加载的 LSP DLL 文件是否为特定 LSP DLL 文件, 并将加载该特定 LSP DLL 文件的操作 替换为加载预定义的 LSP DLL 文件。 0019 本发明实施例通过文件重定向技术, 使得应用程序不会加载有问题的 LSPDLL 文 件, 而是加载直通型 LSP DLL 文件, 并保证正常的网络通信。 0020 本发明实施例不需要携带微软默认的任何 L。
23、SP 配置, 既可以针对系统中的单个 LSP DLL 文件进行屏蔽, 也可以将全部 LSP DLL 文件都屏蔽, 既可以针对单个进程所对应的 文件进行 LSP DLL 文件屏蔽, 也可以针对多个进程所对应的文件进行 LSP DLL 文件屏蔽。 0021 上述说明仅是本发明实施例技术方案的概述, 为了能够更清楚了解本发明实施例 的技术手段, 而可依照说明书的内容予以实施, 并且为了让本发明实施例的上述和其它目 的、 特征和优点能够更明显易懂, 以下特举本发明实施例的具体实施方式。 附图说明 0022 通过阅读下文优选实施方式的详细描述, 各种其他的优点和益处对于本领域普通 说 明 书 CN 10。
24、3019765 A 6 3/12 页 7 技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的, 而并不认为是对本发明 实施例的限制。而且在整个附图中, 用相同的参考符号表示相同的部件。在附图中 : 0023 图 1 为 WinSock 框架示意图 ; 0024 图 2 为本发明实施例的文件重定向方法流程图 ; 0025 图 3 为本发明实施例的文件重定向装置的流程图。 0026 图4示出了本发明实施例通过文件重定向屏蔽特定LSP DLL文件的方法的一具体 应用场景实现流程图。 具体实施方式 0027 下面将参照附图更详细地描述本公开的示例性实施例。 虽然附图中显示了本公开 的示例性实施例。
25、, 然而应当理解, 可以以各种形式实现本公开而不应被这里阐述的实施例 所限制。 相反, 提供这些实施例是为了能够更透彻地理解本公开, 并且能够将本公开的范围 完整的传达给本领域的技术人员。 0028 图 1 为 WinSock 框 架 示 意 图。WinSock 中 包 含 transport provider DLL 和 namespace provider DLL 两种可扩展的 DLL, transport provider 用于网络数据收发, 是 分层的, 理论上支持无限多层, 所有的各层上下串在一起形成一个链 ; namespace provider 用于网络名称解析, 不分层。一般所。
26、说的 LSP 是指 transport provider。本发明实施例既 支持 transport provider, 也支持 namespace provider。 0029 参照图 1, transport provider 有两个链 : TCP 链、 UDP 链。还可以有其它类型的 LSP 链。 0030 TCP 链中从上到下共 4 层 ( 其中底层的 mswsock.dll 是操作系统本身所具有的功 能 )。UDP 链包括 3 层。 0031 右边的 3 个是 namespace provider, 其中最右边的 winrnr.dll 是操作系统提供 的。 虽然现有技术中也有一些能够屏。
27、蔽(或者跳过)LSP DLL的机制, 例如, Windows系统提 供的策略, 指定哪些进程加载或者不加载特定类型的 LSPDLL, 这种技术存在的缺点是 : 只 有Vista及其以上的Windows平台才支持这个特性 ; 只能根据LSP所属的分类来排除, 策略 太粗放。另外一种机制是彻底抛弃 WinSock, 越过应用层的 WinSock 架构, 直接向网络驱动 发控制码、 数据包进行网络通信。这种方法的缺点是 : 需要了解和驱动层通信的任何细节, 这细节一般是非文档化的 ; 在有代理服务器的环境下, 需要自行实现代理服务器协议才能 正常访问网络 ; 这种方法不会加载第三方的任何 LSP D。
28、LL 文件, 在必须要加载某些代理服 务器类型的 LSP DLL 文件才能正常访问网络的环境中, 无法正常访问网络。 0032 本发明实施例是利用文件重定向机制, 针对 Windows 系统中的特定或全部进程屏 蔽特定或者全部的LSP DLL文件, 避免有问题的LSP DLL文件加载到进程中, 提高应用程序 的稳定性和安全性。 0033 本发明实施例的原理主要是通过携带高稳定性、 高兼容性的直通型的 LSPDLL 文 件, 利用该直通型的 LSP DLL 文件替换有问题的 LSP DLL 文件, 从而将该直通型的 DLL 文件 加载到应用程序的进程中。直通型 LSP DLL 文件用于网络数据的。
29、收发, 就是发送数据包时 直接转发给下层, 接收数据包时直接转发给上层, 不修改数据包的任何内容。 对于数据收发 来说, 直通型LSP DLL文件就是发送数据包时直接转发给下层, 接收数据包时直接转发给上 说 明 书 CN 103019765 A 7 4/12 页 8 层, 不修改数据包的任何内容 ; 对于名字解析来说, 不做任何解析。 0034 直通型 DLL 文件可以通过特定磁盘文件路径加载的 DLL 文件, 以便于在 LSP 链上 层和下层之间透传数据包。LSP 属于应用层, 所有 LSP DLL 文件都运行在环 3 特权级别下, 但 LSP 的行为可以从环 3 或者环 0 来进行一定的。
30、控制, 比如对其文件或注册表操作进行控 制。环 3(ring 3)、 环 0(ring 0) 是 Intel 处理器架构的专用术语, 环 3 是低特权级别, 一般 是由应用程序使用 ; 环 0 是最高特权级别, 由操作系统内核使用。 0035 由于 LSP 文件是分层结构, 发送网络数据时, 网络数据从最上层依次传递至最下 层 ; 接收网络数据时, 网络数据从最下层依次传递至最上层。每层对应一个 DLL 文件, 从上 至下串接成一个链。链是按网络协议类型来划分的, 比如 TCP 链、 UDP 链等。 0036 普通 LSP DLL 文件在收到应用程序或者上层 LSP 下达的网络数据发送请求后,。
31、 会 将相应的网络数据进行修改 ( 比如加密类型的 LSP 会将网络数据进行加密, 代理服务器转 发类型的 LSP 会修改数据包的目的地址甚至重新进行网络数据包封装, 防火墙类型的 LSP 会根据防火墙策略丢弃数据和阻止某些网络数据 ), 然后将修改后的网络数据传递给下层 LSP 进行发送 ; 普通 LSPDLL 在接收到下层 LSP 收到的网络数据后, 会进行修改 ( 比如解密 等操作 ), 然后将修改后的网络数据返回给上层 LSP 或应用程序。 0037 图 2 为本发明实施例的文件重定向方法流程图。以 transport provider 为例参 照图 2, 该方法包括以下步骤 : 00。
32、38 步骤 S200, 加载应用程序的配置列表。 0039 配置列表中的配置信息包括应用程序的基本信息, 例如应用程序的安装目录、 当 前版本等。在本发明实施例中, 配置信息另外还包括 : 需要屏蔽哪些 LSP DLL 文件、 需要在 哪些进程中屏蔽这些 LSP DLL 文件。 0040 通常需要屏蔽的 LSP DLL 文件包括 : 木马或者病毒等恶意程序的 LSPDLL 文件、 网 络加速器的 LSP DLL 文件 ( 这些网络加速器主要是对网游、 WEB 浏览等应用进行加速的 ) 等。木马或者病毒等恶意程序的 LSP DLL 文件在 WinSock 初始化时加载到安全应用软件的 进程中后,。
33、 会对其安全功能造成干扰和破坏, 比如阻断安全软件和其云安全中心建立网络 连接、 直接终止安全软件的进程等 ; 网络加速器的 LSP DLL 文件则可能导致安全软件崩溃、 卡死、 无法进行网络访问等, 比如 “99 宿舍加速器” 的 LSP DLL 文件曾经导致很多用户无法 正常上网。 0041 步骤 S210, 根据所加载的配置列表中的配置信息判断需要加载的 LSPDLL 文件是 否为特定 LSP DLL 文件。 0042 上述特定 LSP DLL 文件为需要被屏蔽的 LSP DLL 文件, 预定义的 LSPDLL 文件是直 通型 DLL 文件, 直通型 DLL 文件为通过特定磁盘文件路径加。
34、载的 DLL 文件, 用于在 LSP 链上 层和下层之间透传数据包。根据配置列表中的 LSP DLL 文件的特征信息来判断 LSP 配置列 表数据中是否包括需要被屏蔽的 LSP DLL 文件。特征信息为 DLL 文件的文件名、 DLL 文件 的公司名、 原始文件名或者产品名称, 所述特征信息从 DLL 文件的版本信息中获得。 0043 步骤S220, 将加载该特定LSP DLL文件的操作替换为加载预定义的LSPDLL文件的 操作。操作系统中用于加载 DLL 文件的系统功能函数在加载 LSPDLL 文件时如遇到有问题 的 LSP DLL 文件, 则将加载该有问题的 LSP DLL 文件的操作替换。
35、为加载直通型 LSP DLL 文 件的操作。当本发明实施例拦截到加载需要被屏蔽的 LSP DLL 文件的文件操作时, 所述的 说 明 书 CN 103019765 A 8 5/12 页 9 操作系统中用于加载DLL文件的系统功能函数读取Windows的LSP注册表配置, 找到该DLL 文件对应的 LSP 编号, 加载直通型 DLL 文件, 并将 LSP 编号传递给该直通型 DLL 文件。 0044 WinSock 初始化时会读取系统注册表中配置的 LSP DLL 链, 如果操作系统中用于 加载 DLL 文件的系统功能函数加载链中的某个 LSP DLL 文件失败, 则 WinSock 初始化就失。
36、 败了, 就会导致对应的应用程序或者其所在的计算机系统无法正常访问网络。所以本发明 实施例采用了一个稳定、 简单的直通型LSP DLL文件来替代存在问题的LSP DLL文件, 使得 WinSock 可以初始化成功, 同时又可以避免加载有问题的 LSP DLL 文件到应用程序的进程 中。 0045 根据本发明该方法的一个实施例, 步骤 S220 进一步包括 : 应用程序利用内嵌挂钩 等方式对 API 函数进行挂钩处理, 指向自定义的函数, 其中该 API 函数是用于加载 DLL 文件 的系统功能函数 ; 当应用程序初始化WinSock时, 调用该API函数以加载对应的LSP DLL文 件, 并将。
37、该 LSP DLL 的文件路径传递给该自定义的函数 ; 在该自定义的函数中, 应用程序根 据配置信息判断该传递来的 LSP DLL 文件是否为需要被屏蔽的 LSP DLL, 如果是则将加载 该 LSP DLL 文件的操作替换为加载直通型 LSP DLL 文件。如果传递来的 LSPDLL 文件为需 要被屏蔽的 LSP DLL 文件, 则替换 LSP DLL 文件的文件路径为直通型 LSP DLL 文件的文件 路径, 并传递给挂钩处理之前的 API 函数, 执行调用直通型 LSP DLL 文件的文件路径。 0046 该实施例的一具体举例为 : 在应用层 (ring 3) 对指定或者全部进程进行文件。
38、操 作 API 函数 (LoadLibrary/CreateFile 等 ) 的挂钩处理, 具体包括 : 0047 a、 应用程序首先使用 inline hook( 内嵌挂钩 ) 等方式对 LoadLibraryExW() 这个 API 函数进行挂钩处理, 指向应用程序自定义的函数 My_LoadLibraryExW(), LoadLibraryExW() 是 Windows 系统用来加载 DLL 文件的系统功能函数。 0048 b、 当应用程序初始化 WinSock 时, 会调用 LoadLibraryExW()API 函数加载对应的 LSP DLL 文件, 并将 LSP DLL 文件的文件。
39、路径传递给该函数。 0049 c、 由于应用程序对 LoadLibraryExW() 进行了挂钩处理, 于是自定义的函数 My_ LoadLibraryExW() 被该应用程序调用。在该自定义的函数中, 应用程序根据配置信息检查 传递进来的 LSP DLL 的特征信息 : 例如, 文件名等, 如果和配置信息中要屏蔽的 LSP DLL 文 件的特征符合 ( 特征比如是文件名字符串特征 ( 也可以是产品名称字符串 / 公司名字符 串等特征 ), 如果 LSP DLL 的文件名符合指定的字符串特征, 就认为相匹配, 也就是特征符 合, 文件名字符串特征是人工配置的。), 则根据所述的文件名获知文件路。
40、径, 替换 LSP DLL 文件的文件路径为直通型 LSP DLL 文件的文件路径如 c : program files360lsp.dll, 并 传递给挂钩处理之前的 LoadLibraryExW(), 即执行调用 LoadLibraryExW( c : program files360lsp.dll ), 同时, 查询 Windows 系统的 LSP 注册表配置, 从中获取到该需要替 换的LSP DLL文件的编号, 将该编号通过进程环境变量等方式传递给即将加载的直通型LSP DLL 文件。 0050 d、 如果LSP DLL文件的特征和配置信息中的特征不符合, 就不替换LSPDLL文件的 。
41、文件路径。根据本发明该方法的另一实施例, 步骤 S220 进一步包括 : 0051 在驱动层挂钩文件操作的系统调用文件打开函数, 将其替换为自定义的函数 ; 当 应用程序初始化 WinSock 时, 逐个加载 LSP 链上的 LSP DLL 文件, 打开对应的 LSP DLL 文件 文件, 预先调用自定义函数, 在自定义函数中判断要打开的 LSP DLL 文件是否为待屏蔽 LSP 说 明 书 CN 103019765 A 9 6/12 页 10 DLL 文件, 如果是, 则将该 LSP DLL 文件的文件路径修替换为直通型 LSP DLL 文件的文件路 径, 并将此修改后的路径传递给挂钩前的文。
42、件打开函数, 使系统加载直通型 DLL。 0052 本实施例中, 以在驱动层挂钩文件操作的系统调用 ZwOpenFile( 仅以 ZwOpenFile 为例, 如果挂钩 ZwCreateFile、 ZwMapViewOfSection, 流程是类似的 ), 将其替换为自行实 现的函数 My_ZwOpenFile()。ZwOpenFile 是一个内核函数, 执行写驱动操作时使用, 用于 打开一个现有的文件、 目录、 设备、 或卷。当应用程序初始化 WinSock 时, 会调用动态链接 库 LoadLibrary() 逐个加载 LSP 链上的 LSP DLL 文件。LoadLibrary() 会触。
43、发系统调用 ZwOpenFile 来打开对应的 LSP DLL 文件。 0053 由于ZwOpenFile已被挂钩, 所以My_ZwOpenFile()先被调用。 在My_ZwOpenFile() 中, 对要打开的 LSP DLL 文件进行特征判断 ( 比如检测文件名字符串是否符合人工配置 的正则表达式特征 ), 如果和预先配置好的特征相匹配, 则通过 LSP DLL 文件名获知文件 路径, 修为直通型 LSP DLL 文件的文件路径, 并将此修改后的文件路径传递给钩挂前的 ZwOpenFile(), 从而让系统加载直通型 DLL 文件。如果要打开的 LSP DLL 文件不符合预先 配置的特征。
44、, 则不修改 LSP DLL 文件的文件名, 直接传递给钩挂前的 ZwOpenFile, 以完成该 LSP DLL 文件的加载。 0054 根据本发明该方法的又一实施例, 步骤 S220 进一步包括 : 创建文件系统过滤驱动 程序, 用于对LSP DLL文件的打开操作进行过滤 ; 应用程序初始化WinSock时, 逐个加载LSP 链上的 LSP DLL 文件, 打开对应的 LSP DLL 文件, 文件系统过滤驱动程序判断该打开的 LSP DLL文件是否为配置列表中需要被屏蔽的LSP DLL文件, 是则修改该LSP DLL文件的文件路 径为直通型 LSP DLL 的文件路径, 将加载该需要被屏蔽。
45、的 LSP DLL 文件替换为加载直通型 DLL 文件。 0055 本发明实施例可以使用文件系统过滤驱动进行 DLL 文件重定向。其中, Windows 的文件系统过滤驱动程序也是分层结构, 首先, 编写一个文件系统过滤驱动 (file system filter driver) 程序, 对 NTFS、 FAT 等文件系统的操作进行监控。任何文件操作都会经由 此文件系统过滤驱动程序, 包括 LSP DLL 文件的打开操作等。 0056 当应用程序初始化 WinSock 时, 会调用 LoadLibrary() 逐个加载 LSP 链上的 LSP DLL 文件。LoadLibrary() 会触发系。
46、统调用 ZwOpenFile 来打开对应的 LSP DLL 文件, 这个 打开文件的系统调用会替换为对文件系统的操作, 操作类型为 IRP_MJ_CREATE, 操作参数包 含 LSP DLL 文件的文件名。 0057 对文件系统的所有操作会到达文件系统过滤驱动程序。 在该过滤驱动程序的IRP_ MJ_CREATE消息的处理函数中, 对要打开的LSP DLL文件进行特征判断(比如检测文件名字 符串是否符合人工配置的正则表达式特征 ), 如果和预先配置好的特征相匹配, 则修改 LSP DLL 文件的文件名为直通。 0058 当应用程序初始化 WinSock 时, 会调用 LoadLibrary(。
47、) 逐个加载 LSP 链上的 LSP DLL 文件。LoadLibrary() 会触发系统调用 ZwOpenFile 来打开对应的 LSP DLL 文件, 这个 打开文件的系统调用会替换为对文件系统的操作, 操作类型为 IRP_MJ_CREATE, 操作参数包 含 LSP DLL 文件的的文件名。 0059 对文件系统的所有操作会到达文件系统过滤驱动程序。 在该过滤驱动程序的IRP_ MJ_CREATE消息的处理函数中, 对要打开的LSP DLL文件进行特征判断(比如检测文件名字 说 明 书 CN 103019765 A 10 7/12 页 11 符串是否符合人工配置的正则表达式特征 ), 如。
48、果和预先配置好的特征相匹配, 则修改 LSP DLL 文件的文件名为直通型 LSPDLL 的路径, 并将此修改后的路径传递给文件系统驱动程序 或者下层的文件系统过滤驱动程序, 从而替换为加载直通型 DLL。 0060 如果要打开的LSP DLL不符合预先配置的特征, 则不修改LSP DLL文件名, 直接传 递给文件系统驱动程序或者下层的文件系统过滤驱动程序, 以完成该 LSP DLL 的加载。在 步骤220, 当拦截到加载有问题的LSP DLL的文件操作时, 读取Windows的LSP注册表配置, 找到该 DLL 文件对应的唯一 LSP 编号 ( 编号一般是个整数或者一个 GUID 串如 5B。
49、2272D4 -EAC0-4FFB-A2EB-B9EAA78DAEEF)。不加载有问题的 LSPDLL 文件, 而是替换为加载直通型 DLL 文件, 并将 LSP 编号传递给该直通型 DLL 文件。 0061 在步骤 230, 当加载直通型 DLL 文件后, 获取传递的 LSP 编号, 读取操作系统的 LSP 注册表配置, 从而在配置中找到该直通型 DLL 文件本次在 LSP 链中的位置, 并加载下层 LSP DLL 文件。 0062 通过上述步骤可以完成进程中整个 WinSock 的初始化, 并且不会加载有问题的 LSP DLL 文件。 0063 LSP 链中的各个 LSP DLL 文件的加载是 WinSock 初始化中很重要的一个环节。基 于WinSock实现的所有网络通信应用程序都要初始化WinSock才能进行后续的网络数据收 发等操作。如果初始化 WinSock 失败, 就无法进行网络通信。所以本发明实施例, 可以完成 进程中整个WinSock的初始化, 并且不会加载有问题的LSP DLL文件, 可以保证网。