书签 分享 收藏 举报 版权申诉 / 32

浏览器防注入方法、浏览器客户端和装置.pdf

  • 上传人:Y0****01
  • 文档编号:4063725
  • 上传时间:2018-08-13
  • 格式:PDF
  • 页数:32
  • 大小:2.20MB
  • 摘要
    申请专利号:

    CN201410740794.5

    申请日:

    2014.12.05

    公开号:

    CN104539584A

    公开日:

    2015.04.22

    当前法律状态:

    授权

    有效性:

    有权

    法律详情:

    授权|||实质审查的生效IPC(主分类):H04L 29/06申请日:20141205|||公开

    IPC分类号:

    H04L29/06; H04L29/08

    主分类号:

    H04L29/06

    申请人:

    北京奇虎科技有限公司; 奇智软件(北京)有限公司

    发明人:

    党壮; 梁志辉; 王天平

    地址:

    100088北京市西城区新街口外大街28号D座112室(德胜园区)

    优先权:

    专利代理机构:

    北京润泽恒知识产权代理有限公司11319

    代理人:

    苏培华

    PDF完整版下载: PDF下载
    内容摘要

    本发明公开了一种浏览器防注入的方法,涉及浏览器技术领域。所述方法包括:加载用于拦截窗口消息的窗口消息钩子函数;针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行拦截;判断所述窗口消息是否为劫持浏览器的窗口消息;如果所述窗口消息是劫持浏览器的窗口消息,则停止所述窗口消息的传输。根据本发明的浏览器防注入的方法,可以通过加载全局的窗口消息钩子函数,拦截操作系统中的窗口消息,判断该窗口消息是否为劫持浏览器的窗口消息,由此解决了其他应用程序向浏览器注入dll导致浏览器不安全的问题,取得了可以防止其他应用程序向浏览器注入不安全的dll以劫持浏览器,进而提高浏览器安全性的有益效果。

    权利要求书

    权利要求书1.  一种浏览器防注入的方法,包括: 加载用于拦截窗口消息的窗口消息钩子函数; 针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行拦截; 判断所述窗口消息是否为劫持浏览器的窗口消息; 如果所述窗口消息是劫持浏览器的窗口消息,则停止所述窗口消息的传 输。 2.  如权利要求1所述的方法,其特征在于,所述加载用于拦截窗口消 息的窗口消息钩子函数,包括: 调用动态链接库加载函数加载所述窗口消息钩子函数所在的动态链接 库,以加载所述窗口消息钩子函数。 3.  如权利要求1所述的方法,其特征在于,所述判断所述窗口消息是 否为劫持浏览器的窗口消息,包括: 将所述窗口消息所属的窗口句柄名与预置的窗口句柄名单进行匹配;如 果所述窗口句柄匹配上,则确定所述窗口消息为劫持浏览器的窗口消息。 4.  如权利要求3所述的方法,其特征在于,在窗口句柄匹配之后,还 包括: 获取所述窗口句柄所属应用程序的验证签名; 对所述验证签名进行验证,如果所述验证失败,则确定所述窗口消息为 劫持浏览器的窗口消息。 5.  如权利要求1所述的方法,其特征在于,所述针对操作系统中的窗 口消息,通过所述窗口消息钩子函数进行拦截包括: 针对操作系统中的创建窗口的窗口消息,通过所述窗口消息钩子函数进 行拦截。 6.  如权利要求1所述的方法,其特征在于,所述针对操作系统中的创 建窗口的窗口消息,通过所述窗口消息钩子函数进行拦截包括: 针对操作系统中的创建窗口的WM_CREATE消息,通过所述窗口消息 钩子函数进行拦截。 7.  如权利要求1所述的方法,其特征在于,所述加载用于拦截窗口消 息的窗口消息钩子函数包括: 浏览器向当前操作系统中的第一操作系统服务发送加载请求,以便所述 第一操作系统服务通过调用一虚拟的设备级驱动程序以加载用于拦截窗口 消息的窗口消息钩子函数。 8.  如权利要求7所述的方法,其特征在于,还包括: 浏览器获取第一操作系统服务的安装文件并进行安装,以得到所述当前 操作系统中的第一操作系统服务。 9.  一种浏览器客户端,包括: 内核组件,其配置为处理接收到的窗口消息; 防注入组件,具体包括: 全局钩子加载模组,其配置为加载用于拦截窗口消息的窗口消息钩子函 数; 窗口消息拦截模组,其配置为针对操作系统中的窗口消息,通过所述窗 口消息钩子函数进行拦截; 窗口消息判断模组,其配置为判断所述窗口消息是否为劫持浏览器的窗 口消息; 窗口消息停止模组,其配置为如果所述窗口消息是劫持浏览器的窗口消 息,则停止所述将所述窗口消息传输至内核组件。 10.  一种带有浏览器客户端的装置,包括: 处理器,以及加载有多条可执行指令的存储器,所述多条指令包括执行 以下步骤的方法: 加载用于拦截窗口消息的窗口消息钩子函数; 针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行拦截; 判断所述窗口消息是否为劫持浏览器的窗口消息; 如果所述窗口消息是劫持浏览器的窗口消息,则停止所述窗口消息的传 输。

    说明书

    说明书浏览器防注入方法、浏览器客户端和装置
    技术领域
    本发明涉及浏览器技术领域,具体涉及一种浏览器防注入方法、一种浏览器 客户端和带有浏览器客户端的装置。
    背景技术
    浏览器是指可以显示网页服务器或者文件系统的HTML(超文本标记语言, HyperText Mark-up Language))文件内容,并让用户与这些文件交互的一种软件。 网页浏览器主要通过HTTP协议与网页服务器交互并获取网页,这些网页由 URL(统一资源定位符,Uniform Resource Locator)指定,文件格式通常为HTML。
    在浏览器使用过程中,可能有其他程序向浏览器注入一些动态链接库,以控 制浏览器执行自己需要的逻辑,比如网络请求被重定向到不安全网页、收藏夹里 自动反复添加不安全网站、IE选项卡中出现不能更改或被隐藏的项目、获取在网 页中的登录名和密码等,因此,这些程序注入的动态链接库对于用户的浏览器来 说并不安全。
    发明内容
    鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解 决上述问题的浏览器客户端和相应的浏览器防注入方法。
    依据本发明的一个方面,提供了一种浏览器防注入的方法,包括:
    加载用于拦截窗口消息的窗口消息钩子函数;
    针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行拦截;
    判断所述窗口消息是否为劫持浏览器的窗口消息;
    如果所述窗口消息是劫持浏览器的窗口消息,则停止所述窗口消息的传输。
    优选地,所述加载用于拦截窗口消息的窗口消息钩子函数,包括:
    调用动态链接库加载函数加载所述窗口消息钩子函数所在的动态链接库,以 加载所述窗口消息钩子函数。
    优选地,所述判断所述窗口消息是否为劫持浏览器的窗口消息,包括:
    将所述窗口消息所属的窗口句柄名与预置的窗口句柄名单进行匹配;如果所 述窗口句柄匹配上,则确定所述窗口消息为劫持浏览器的窗口消息。
    优选地,在窗口句柄匹配之后,还包括:
    获取所述窗口句柄所属应用程序的验证签名;
    对所述验证签名进行验证,如果所述验证失败,则确定所述窗口消息为劫持 浏览器的窗口消息。
    优选地,所述针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行 拦截包括:
    针对操作系统中的创建窗口的窗口消息,通过所述窗口消息钩子函数进行拦 截。
    优选地,所述针对操作系统中的创建窗口的窗口消息,通过所述窗口消息钩 子函数进行拦截包括:
    针对操作系统中的创建窗口的WM_CREATE消息,通过所述窗口消息钩子函 数进行拦截。
    优选地,所述加载用于拦截窗口消息的窗口消息钩子函数包括:
    浏览器向当前操作系统中的第一操作系统服务发送加载请求,以便所述第一 操作系统服务通过调用一虚拟的设备级驱动程序以加载用于拦截窗口消息的窗口 消息钩子函数。
    优选地,还包括:
    浏览器获取第一操作系统服务的安装文件并进行安装,以得到所述当前操作 系统中的第一操作系统服务。
    优选地,所述浏览器向当前操作系统中的第一操作系统服务发送加载请求, 包括:
    所述浏览器通过预置的接口向独立于浏览器的第二应用程序发送加载请求; 所述独立于浏览器的第二应用程序将所述加载请求发送至当前操作系统中的第一 操作系统服务,以便所述第一操作系统服务通过调用一虚拟的设备级驱动程序以 加载用于拦截窗口消息的窗口消息钩子函数。
    优选地,所述浏览器获取第一操作系统服务的安装文件并进行安装,以得到 所述当前操作系统中的第一操作系统服务,包括:
    获取第一操作系统服务的安装文件,通过所述第一操作系统服务的安装文件 安装所述第一操作系统服务的动态链接库和所述虚拟的设备级驱动程序;
    启动所述第一操作系统服务所在应用程序,以加载第一操作系统服务的动态 链接库;所述第一操作系统服务通过所述动态链接库调用所述虚拟的设备级驱动 程序。
    优选地,所述浏览器获取第一操作系统服务的安装文件并进行安装,以得到 所述当前操作系统中的第一操作系统服务,包括:
    判断所述第一操作系统服务是否存在;如果所述第一操作系统服务不存在, 则获取第一操作系统服务的安装文件并进行安装,以得到所述当前操作系统中的 第一操作系统服务。
    优选地,所述第一操作系统服务通过调用一虚拟的设备级驱动程序以加载用 于拦截窗口消息的窗口消息钩子函数,包括:
    所述第一操作系统服务接收到所述加载请求,根据所述加载请求创建I/O请 求包下发至所述虚拟的设备级驱动程序;
    所述虚拟的设备级驱动程序接收到所述I/O请求包后,调用动态链接库加载 函数加载用于拦截窗口消息的窗口消息钩子函数。
    优选地,在以加载用于拦截窗口消息的窗口消息钩子函数之前,还包括:
    第一操作系统服务判断所述加载请求的发送方是否为指定浏览器;
    如果所述加载请求的发送方不是指定浏览器,则不进入后续处理;
    如果所述加载请求的发送方是指定浏览器,则根据所述加载请求创建I/O请 求包下发至所述虚拟的设备级驱动程序。
    优选地,所述加载请求包括所述浏览器的身份验证信息;
    进一步的,所述第一操作系统服务判断所述加载请求的发送方是否为指定浏 览器包括:
    解析所述加载请求中的身份验证信息,将所述身份验证信息与预先存储的身 份验证信息进行匹配;如果匹配上,则判断所述加载请求的发送方是指定浏览器。
    优选地,在加载用于拦截窗口消息的窗口消息钩子函数之前,还包括:
    所述虚拟的设备级驱动程序根据所述I/O请求包判断所述加载请求的发送方 是否为指定浏览器;
    如果所述加载请求的发送方不是指定浏览器,则不进入后续处理;
    如果所述加载请求的发送方是指定浏览器,则加载用于拦截窗口消息的窗口 消息钩子函数。
    优选地,所述加载请求包括所述浏览器的身份验证信息;
    进一步的,所述虚拟的设备级驱动程序根据所述I/O请求包判断所述加载请 求的发送方是否为指定浏览器包括:
    所述虚拟的设备级驱动程序接收由第一操作系统服务发送的I/O请求包;所 述I/O请求包括浏览器的身份验证信息;
    解析所述I/O请求包中的身份验证信息,将所述身份验证信息与预先存储的 身份验证信息进行匹配;如果匹配上,则判断所述加载请求的发送方是指定浏览 器。
    依据本发明的另外一个方面,提供了一种浏览器客户端,包括:
    内核组件,其配置为处理接收到的窗口消息;
    防注入组件,具体包括:
    全局钩子加载模组,其配置为加载用于拦截窗口消息的窗口消息钩子函数;
    窗口消息拦截模组,其配置为针对操作系统中的窗口消息,通过所述窗口消 息钩子函数进行拦截;
    窗口消息判断模组,其配置为判断所述窗口消息是否为劫持浏览器的窗口消 息;
    窗口消息停止模组,其配置为如果所述窗口消息是劫持浏览器的窗口消息, 则停止所述将所述窗口消息传输至内核组件。
    优选地,所述全局钩子加载模组包括:
    第一加载模组,其配置为调用动态链接库加载函数加载所述窗口消息钩子函 数所在的动态链接库,以加载所述窗口消息钩子函数。
    优选地,所述窗口消息判断模组包括:
    窗口句柄判断模组,其配置为将所述窗口消息所属的窗口句柄名与预置的窗 口句柄名单进行匹配;如果所述窗口句柄匹配上,则确定所述窗口消息为劫持浏 览器的窗口消息。
    优选地,还包括:
    窗口签名获取模组,其配置为在所述窗口句柄匹配上之后,获取所述窗口句 柄所属应用程序的验证签名;
    窗口签名验证模组,其配置为对所述验证签名进行验证,如果所述验证失败, 则确定所述窗口消息为劫持浏览器的窗口消息。
    优选地,所述窗口消息拦截模组包括:
    创建窗口消息拦截模组,其配置为针对操作系统中的创建窗口的窗口消息, 通过所述窗口消息钩子函数进行拦截。
    优选地,所述创建窗口消息拦截模组包括:
    第一创建窗口消息拦截模组,其配置为针对操作系统中的创建窗口的 WM_CREATE窗口消息,通过所述窗口消息钩子函数进行拦截。
    优选地,所述全局钩子加载模组包括:
    请求处理模组,其配置为浏览器向当前操作系统中的第一操作系统服务发送 加载请求,以便所述第一操作系统服务通过调用一虚拟的设备级驱动程序以加载 用于拦截窗口消息的窗口消息钩子函数。
    优选地,还包括:
    服务安装模组,其配置为浏览器获取第一操作系统服务的安装文件并进行安 装,以得到所述当前操作系统中的第一操作系统服务。
    优选地,所述全局钩子加载模组包括:
    第一请求发送模组,其配置为所述浏览器通过预置的接口向独立于浏览器的 第二应用程序发送加载请求;所述独立于浏览器的第二应用程序将所述加载请求 发送至当前操作系统中的第一操作系统服务,以便所述第一操作系统服务通过调 用一虚拟的设备级驱动程序以加载用于拦截窗口消息的窗口消息钩子函数。
    优选地,所述服务安装模组包括:
    第一服务安装模组,其配置为获取第一操作系统服务的安装文件,通过所述 第一操作系统服务的安装文件安装所述第一操作系统服务的动态链接库和所述虚 拟的设备级驱动程序;
    服务启动模组,其配置为启动所述第一操作系统服务所在应用程序,以加载 第一操作系统服务的动态链接库;所述第一操作系统服务通过所述动态链接库调 用所述虚拟的设备级驱动程序。
    优选地,所述服务安装模组包括:
    服务存在判断模组,其配置为判断所述第一操作系统服务是否存在;如果所 述第一操作系统服务不存在,则获取第一操作系统服务的安装文件并进行安装, 以得到所述当前操作系统中的第一操作系统服务。
    优选地,所述请求处理模组包括:
    请求接收模组,其配置为所述第一操作系统服务接收到所述加载请求,根据 所述加载请求创建I/O请求包下发至所述虚拟的设备级驱动程序;
    驱动加载模组,其配置为所述虚拟的设备级驱动程序接收到所述I/O请求包 后,调用动态链接库加载函数加载用于拦截窗口消息的窗口消息钩子函数。
    优选地,所述全局钩子加载模组还包括:
    服务服务身份验证模组,其配置为在以加载用于拦截窗口消息的窗口消息钩 子函数之前,第一操作系统服务判断所述加载请求的发送方是否为指定浏览器; 如果所述加载请求的发送方不是指定浏览器,则不进入后续处理;如果所述加载 请求的发送方是指定浏览器,则根据所述加载请求创建I/O请求包下发至所述虚 拟的设备级驱动程序。
    优选地,所述加载请求包括所述浏览器的身份验证信息;
    进一步的,所述服务身份验证模组包括:
    服务解析验证模组,其配置为解析所述加载请求中的身份验证信息,将所述 身份验证信息与预先存储的身份验证信息进行匹配;如果匹配上,则判断所述加 载请求的发送方是指定浏览器。
    优选地,所述全局钩子加载模组还包括:
    驱动身份验证模组,其配置为在加载用于拦截窗口消息的窗口消息钩子函数 之前,所述虚拟的设备级驱动程序根据所述I/O请求包判断所述加载请求的发送 方是否为指定浏览器;如果所述加载请求的发送方不是指定浏览器,则不进入后 续处理;如果所述加载请求的发送方是指定浏览器,则加载用于拦截窗口消息的 窗口消息钩子函数。
    优选地,所述加载请求包括所述浏览器的身份验证信息;
    进一步的,所述驱动身份验证模组包括:
    驱动请求接收模组,其配置为所述虚拟的设备级驱动程序接收由第一操作系 统服务发送的I/O请求包;所述I/O请求包括浏览器的身份验证信息;
    驱动解析验证模组,其配置为解析所述I/O请求包中的身份验证信息,将所 述身份验证信息与预先存储的身份验证信息进行匹配;如果匹配上,则判断所述 加载请求的发送方是指定浏览器。
    依据本发明的另外一个方面,提供了一种带有浏览器客户端的装置,包括:
    处理器,以及加载有多条可执行指令的存储器,所述多条指令包括执行以下 步骤的方法:
    加载用于拦截窗口消息的窗口消息钩子函数;
    针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行拦截;
    判断所述窗口消息是否为劫持浏览器的窗口消息;
    如果所述窗口消息是劫持浏览器的窗口消息,则停止所述窗口消息的传输。
    优选地,所述加载用于拦截窗口消息的窗口消息钩子函数,包括:
    调用动态链接库加载函数加载所述窗口消息钩子函数所在的动态链接库,以 加载所述窗口消息钩子函数。
    优选地,所述判断所述窗口消息是否为劫持浏览器的窗口消息,包括:
    将所述窗口消息所属的窗口句柄名与预置的窗口句柄名单进行匹配;如果所 述窗口句柄匹配上,则确定所述窗口消息为劫持浏览器的窗口消息。
    优选地,所述加载用于拦截窗口消息的窗口消息钩子函数包括:
    浏览器向当前操作系统中的第一操作系统服务发送加载请求,以便所述第一 操作系统服务通过调用一虚拟的设备级驱动程序以加载用于拦截窗口消息的窗口 消息钩子函数。
    根据本发明的浏览器防注入的方法,可以通过加载全局的窗口消息钩子函数, 拦截操作系统中的窗口消息,判断该窗口消息是否为劫持浏览器的窗口消息,比 如是否为向浏览器注入dll(Dynamic Link Library,动态链接库),如果是,则对 停止该窗口消息向浏览器的发送过程,由此解决了其他应用程序向浏览器注入dll 导致浏览器不安全的问题,取得了可以防止其他应用程序向浏览器注入不安全的 dll以劫持浏览器,进而提高浏览器安全性的有益效果。
    上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手 段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特 征和优点能够更明显易懂,以下特举本发明的具体实施方式。
    附图说明
    通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域 普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认 为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。 在附图中:
    图1示出了根据本发明一个实施例的一种浏览器防注入的方法的流程示意图;
    图2示出了根据本发明一个实施例的一种浏览器防注入的方法的流程示意图;
    图3示出了根据本发明一个实施例的一种浏览器防注入的方法的流程示意图;
    图4示出了根据本发明一个实施例的本发明一种浏览器防注入的方法的流程 示意图;
    图5示出了根据本发明一个实施例的一种浏览器防注入的方法的流程示意图;
    图6示出了根据本发明一个实施例的一种浏览器防注入的方法的流程示意图;
    图7示出了根据本发明一个实施例的一种浏览器防注入的方法的流程示意图;
    图8示出了根据本发明一个实施例的一种浏览器客户端的结构示意图;
    图9示出了根据本发明一个实施例的一种浏览器客户端的结构示意图;
    图10示出了根据本发明一个实施例的一种浏览器客户端的结构示意图;
    图11示出了根据本发明一个实施例的一种浏览器客户端的结构示意图;
    图12示出了根据本发明一个实施例的一种浏览器客户端的结构示意图;
    图13示出了根据本发明一个实施例的一种浏览器客户端的结构示意图;
    图14示出了根据本发明一个实施例的一种浏览器客户端的结构示意图;
    图15示出了根据本发明一个实施例的一种带有浏览器客户端的装置的结构示 意图。
    具体实施方式
    下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本 公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里 阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开, 并且能够将本公开的范围完整的传达给本领域的技术人员。
    实施例一
    参照图1,其示出了本发明一种浏览器防注入的方法的流程示意图,具体可以 包括:
    步骤110,加载用于拦截窗口消息的窗口消息钩子函数;
    在本发明实施例中加载CBT钩子函数WH_CBT,该WH_CBT钩子函数当 windows窗口激活、创建、释放(关闭)、最小化、最大化或改变窗口时的窗口消 息都可通过该WH_CBT进行拦截。本发明则可以加载上述CBT钩子函数。
    优选地,所述加载用于拦截窗口消息的窗口消息钩子函数,包括:
    子步骤112,调用动态链接库加载函数加载所述窗口消息钩子函数所在的动 态链接库,以加载所述窗口消息钩子函数。
    WH_CBT需要通过SetWindowsHookEx函数进行安装,其函数原型为: SetWindowsHookEx(
    int idHook,
    HOOKPROC lpfn,
    HINSTANCE hMod,
    DWORD dwThreadId;
    其中,int idHook=WH_CBT;
    HOOKPROC lpfn为/钩子过程的指针,也即拦截到指定系统消息后的预处理 过程,须定义在DLL中;
    HINSTANCE hMod,应用程序实例的句柄,可以为CBT钩子所在DLL;
    HINSTANCE hMod,该参数被设置为0,表示此钩子为监视系统所有线程的 全局钩子。
    由于上述安装逻辑需要以dll的方式实现,而对于dll的加载和运行,则可通 过动态链接库加载函数LoadLibrary加载CBT钩子所在的dll,并把CBT钩子的执 行逻辑也一并加载。LoadLibrary函数原型如下:
    LoadLibraryA(
    __in LPCSTR lpLibFileName
    );
    其中lpLibFileName为dll的名称。
    那么通过上述方式,把CBT钩子函数所在的dll进行加载,从而即加载了CBT 钩子函数以及其钩取到窗口消息后的处理逻辑。
    步骤120,针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行拦 截;
    在本发明实施例中,当有应用程序向浏览器注入不安全的动态链接库时,其 是通过窗口消息控制操作系统向浏览器注入,那么本发明可以在其发送窗口消息 时即可通过CBT钩子函数对其进行拦截。
    步骤130,判断所述窗口消息是否为劫持浏览器的窗口消息;如果所述窗口 消息是劫持浏览器的窗口消息,则进入步骤140;
    在本发明实施例中,可以根据拦截的窗口消息的窗口句柄判断其是否为劫持 浏览器的窗口消息。
    优选地,所述判断所述窗口消息是否为劫持浏览器的窗口消息,包括:
    子步骤131,将所述窗口消息所属的窗口句柄名与预置的窗口句柄名单进行 匹配;如果所述窗口句柄匹配上,则确定所述窗口消息为劫持浏览器的窗口消息。
    在本发明实施例中,对于浏览器之外的其他应用程序,如果要向浏览器注入 劫持浏览器的dll,其需要通过窗口消息启动相应的窗口等操作,在该窗口之下发 送执行dll注入过程,windows系统则对接收到窗口消息进行处理,比如执行dll 安装过程,将该dll写入浏览器指定位置,将dll的相关参数写入与浏览器相关的 注册表项中。而每个窗口均有窗口句柄,那么本发明可以预先对向浏览器注入不 符合安全要求的dll的应用程序启动的窗口句柄进行统计,生成窗口句柄黑名单。 那么本发明对于拦截到的窗口消息,可以直接通过所述窗口消息获取其所属的窗 口句柄,将其与黑名单中的窗口句柄进行匹配,如果匹配上,则确定所述窗口消 息为劫持浏览器的窗口消息,即可以通过窗口句柄的匹配结果确定所述窗口消息 是否为劫持浏览器的窗口消息。
    当然,本发明预置的窗口句柄名单,可以不断根据对应用程序的分析进行更 新,其可以通过云服务器更新到客户端中。
    步骤140,停止所述窗口消息的传输。
    那么对于确定CBT钩子拦截的窗口消息为劫持浏览器的窗口消息后,即可停 止该消息的后续传输过程,不让其进行后续处理。比如将所述窗口消息删除。
    当然,确定所述窗口消息为劫持浏览器的窗口消息后,还可生成弹出框,提 示用户有应用程序向浏览器注入不安全的dll,等待用户选择是否运行该窗口消息 继续传输,如果用户选择继续传输,则放弃拦截,如果用户选择不继续传输,则 可停止所述窗口消息的传输。
    本发明实施例可针对想将dll注入浏览器的应用程序,在其创建窗口、或者在 其所在窗口之下发送窗口消息时即对其进行拦截,即在应用程序执行具体的dll注 入过程之前就进行拦截,然后对窗口消息进行判断,当根据窗口消息判断其为劫 持浏览器的消息时,则停止窗口消息的传输,不让其进行后续操作,可以直接防 止所述应用程序对浏览器注入不安全的dll,从而保护了浏览器的安全性。
    实施例二
    参照图2,其示出了本发明一种浏览器防注入的方法的流程示意图,具体可以 包括:
    步骤210,加载用于拦截窗口消息的窗口消息钩子函数;
    步骤220,针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行拦 截;
    步骤230,将所述窗口消息所属的窗口句柄名与预置的窗口句柄名单进行匹 配;如果所述窗口句柄匹配上,则进入步骤240;
    如果所述窗口句柄未匹配上,则放行所述窗口消息。
    步骤240,获取所述窗口句柄所属应用程序的验证签名;
    步骤250,对所述验证签名进行验证;如果验证失败,则确定所述窗口消息 为劫持浏览器的窗口消息,进入步骤260;
    如果验证成功,则放行所述窗口消息。
    在本发明实施例中,对于窗口消息,在判断其窗口句柄在预置的窗口句柄名 单之内后,还可以获取所述窗口句柄所属应用程序的验证签名,比如第三方安全 平台的验证签名,然后对该数字签名与预先记录的验证签名进行匹配,如果匹配 上,则说明该窗口句柄的应用程序安装的dll安全,可以允许其进行安装,如果验 证失败,则可认为该窗口句柄的应用程序安装的dll不安全,拒绝其进行安装。
    当然,所述验证签名也可以通过云端服务器进行更新。
    步骤260,停止所述窗口消息的传输。
    本发明实施例可针对想将dll注入浏览器的应用程序,在其创建窗口、或者在 其所在窗口之下发送窗口消息时即对其进行拦截,即在应用程序执行具体的dll注 入过程之前就进行拦截,然后对窗口消息进行多重判断,使对窗口消息的拦截范 围可以灵活的进行配置,允许安全的应用程序向浏览器注入dll,不允许不安全的 应用程序向浏览器注入dll,也保护了浏览器的安全性。
    实施例三
    参照图3,其示出了本发明一种浏览器防注入的方法的流程示意图,具体可以 包括:
    步骤310,加载用于拦截窗口消息的窗口消息钩子函数;
    步骤320,针对操作系统中的创建窗口的窗口消息,通过所述窗口消息钩子 函数进行拦截;
    在本发明实施例中,可以理解,当一个应用程序要向浏览器注入dll时,其 需要执行安装过程,而安装过程在windows系统首先需要创建一个安装用的窗口, 本发明实施例则可只拦截创建窗口的窗口消息,本发明实施例则可只拦截创建窗 口的窗口消息,可判断其是否为向浏览器注入不安全的dll的应用程序的窗口消息。
    优选地,所述针对操作系统中的创建窗口的窗口消息,通过所述窗口消息钩 子函数进行拦截包括:
    子步骤321,针对操作系统中的创建窗口的WM_CREATE消息,通过所述窗 口消息钩子函数进行拦截。
    WM_CREATE是windows中一个窗口消息,当一个应用程序通过 CreateWindowEx函数或者CreateWindow函数请求创建窗口时发送此消息。那么 应用程序创建向浏览器注入dll的安装窗口时,也会发送WM_CREATE消息。那 么本发明即可通过CBT钩子就可拦截到应用程序创建的所述安装窗口的 WM_CREATE消息。
    步骤330,判断所述窗口消息是否为劫持浏览器的窗口消息;如果所述窗口 消息是劫持浏览器的窗口消息,则进入步骤340;
    如果所述窗口消息不是劫持浏览器的窗口消息,则放行所述窗口消息。
    在本发明实施例中可以通过WM_CREATE消息创建窗口的窗口句柄与预置 的窗口句柄名单进行匹配,如果匹配上,则确定窗口消息是否为劫持浏览器的窗 口消息。当然,也可以获取所述WM_CREATE消息所属应用程序的验证签名,对 验证签名进行验证,如果验证失败,则确定窗口消息是否为劫持浏览器的窗口消 息。
    步骤340,停止所述窗口消息的传输。
    本发明实施例则可只拦截创建窗口的窗口消息,当其为预先记录的要向浏览 器注入不安全dll的应用程序发送的创建窗口的消息,则可停止对应窗口的创建, 从而避免应用程序将不安全的dll注入浏览器。并且由于只拦截创建窗口的窗口消 息,不拦截其他类型的窗口消息,降低了拦截的范围,避免占用过多的系统资源。
    实施例四
    参照图4,其示出了本发明一种浏览器防注入的方法的流程示意图,具体可以 包括:
    步骤410,浏览器向当前操作系统中的第一操作系统服务发送加载请求,以便 所述第一操作系统服务通过调用一虚拟的设备级驱动程序以加载用于拦截窗口消 息的窗口消息钩子函数;
    在本发明实施例中,浏览器本身的权限级别较低,可以直接向当前操作系统 中的第一操作系统服务发送加载请求,以便述第一操作系统服务通过调用一虚拟 的设备级驱动程序加载用于拦截窗口消息的窗口消息钩子函数。
    其中加载时,所述设备级驱动程序调用LoadLibrary加载CBT钩子函数。
    步骤420,针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行拦 截;
    步骤430,判断所述窗口消息是否为劫持浏览器的窗口消息;如果所述窗口 消息是劫持浏览器的窗口消息,则进入步骤440;
    步骤440,停止所述窗口消息的传输。
    优选地,还包括:
    子步骤400,浏览器获取第一操作系统服务的安装文件并进行安装,以得到 所述当前操作系统中的第一操作系统服务。
    在本发明实施例中,直接加载全局钩子函数,由于浏览器是用户级的权限, 其权限级别低,可能超出了系统或者说杀毒软件对权限的设置而不能执行上述加 载。因此需要以服务的形式提升转换的权限。
    那么本发明中,浏览器可以预先获取第一操作系统服务的安装文件并进行安 装,在重新启动后,所述服务即可随机启动。服务在操作系统中的权限级别相对 较高,其可以较少受限的执行上述操作。
    当然,本发明实施例也可以在执行过程中判断第一操作系统服务是否安装。 优选地,所述浏览器获取第一操作系统服务的安装文件并进行安装,以得到所述 当前操作系统中的第一操作系统服务,包括:
    子步骤411,判断所述第一操作系统服务是否存在;如果所述第一操作系统 服务不存在,则获取第一操作系统服务的安装文件并进行安装,以得到所述当前 操作系统中的第一操作系统服务。
    第一操作系统服务也是一个进程,启动后其具有进程名等信息,那么浏览器 可以查询操作系统中当前启动的进程中是否有所述第一操作系统服务的进程名, 如果有,说明已经安装过第一操作系统服务,反之,则还没有安装过所述第一操 作系统服务。
    优选地,所述浏览器获取第一操作系统服务的安装文件并进行安装,以得到 所述当前操作系统中的第一操作系统服务,包括:
    子步骤412,获取第一操作系统服务的安装文件,通过所述第一操作系统服 务的安装文件安装所述第一操作系统服务的动态链接库和所述虚拟的设备级驱动 程序;
    在实际中,所述第一操作系统服务的安装文件还包括虚拟的设备级驱动程序, 在安装时可以一并进行安装。在第一操作系统服务不使用时不会通过其dll中的逻 辑去调用所述虚拟的设备级驱动程序。
    虚拟的设备级驱动程序属于内核级程序,其具有操作系统的最高权限,因此 对于源节点的替换,通过虚拟的设备级驱动可以更容易的执行。
    子步骤413,启动所述第一操作系统服务所在应用程序,以加载第一操作系统 服务的动态链接库;所述第一操作系统服务通过所述动态链接库调用所述虚拟的 设备级驱动程序。
    第一操作系统服务安装时会在系统文件中生成一个dll文件,并将该dll的相 关参数写入操作系统服务的注册表中。同时,会将虚拟的设备级驱动程序的sys 文件安装至操作系统,并将sys文件的相关参数写入注册表中。操作系统启动后, 会启动第一操作系统服务的exe文件,等待浏览器进程的通知。
    优选地,所述第一操作系统服务通过调用一虚拟的设备级驱动程序以加载用 于拦截窗口消息的窗口消息钩子函数,包括:
    子步骤414,所述第一操作系统服务接收到所述加载请求,根据所述加载请 求创建I/O请求包下发至所述虚拟的设备级驱动程序;
    在本发明实施例中,第一操作系统服务会随系统启动而启动,并一直维持运 行,监听是否收到浏览器发送的请求,如果接收到浏览器发送的加载请求,则会 根据所述加载请求创建I/O请求包(I/O Request Packet,IRP)下发至所述虚拟的 设备级驱动。因为windows操作系统从应用层向底层驱动传送指令是通过I/O请 求包传输的。第一操作系统服务调用本发明实施例中虚拟的设备级驱动,则标需 要以所述设备级驱动为目构建IRP,然后将所述IRP下发至所述设备级驱动中。 所述IRP包括控制所述设备级驱动加载CBT钩子函数的信息,比如CBT钩子函 数所在dll的路径。
    子步骤415,所述虚拟的设备级驱动程序接收到所述I/O请求包后,调用动态 链接库加载函数加载用于拦截窗口消息的窗口消息钩子函数。
    所述虚拟的设备级确定程序接收到所述第一操作系统服务下发的I/O请求包 后,解析所述I/O请求包中的指令,得到CBT钩子函数所在dll的信息,那么可 以调用动态链接库加载函数,加载所述窗口消息钩子函数所在的动态链接库,以加 载所述窗口消息钩子函数。
    通过上述方式,即加载CBT钩子函数。
    在本发明实施例中第一操作系统服务可以在浏览器安装时作为浏览器的一部 分进程安装,作为浏览器的一个功能模块。
    本发明实施例则可只拦截创建窗口的窗口消息,当其为预先记录的要向浏览 器注入不安全dll的应用程序发送的创建窗口的消息,则可停止对应窗口的创建, 从而避免应用程序将不安全的dll注入浏览器。并且由于只拦截创建窗口的窗口消 息,不拦截其他类型的窗口消息,降低了拦截的范围,避免占用过多的系统资源; 并且以内核级权限进行CBT的加载,避免了操作系统对加载的权限限制而加载失 败。
    实施例五
    参照图5,其示出了本发明一种浏览器防注入的方法的流程示意图,具体可以 包括:
    步骤510,浏览器通过预置的接口向独立于浏览器的第二应用程序发送加载请 求;
    步骤520,所述独立于浏览器的第二应用程序将所述加载请求发送至当前操作 系统中的第一操作系统服务,以便所述第一操作系统服务通过调用一虚拟的设备 级驱动程序以加载用于拦截窗口消息的窗口消息钩子函数;
    在本发明实施例中,浏览器本身没有设置第一操作系统服务的功能,而独立 于浏览器的第二应用程序具有设置第一操作系统服务的功能,比如360安全卫士、 360网盾等程序。那么浏览器可以通过预置的对外接口向独立的第二应用程序发送 加载请求,所述加载请求包括CBT钩子函数的dll信息。独立于浏览器的第二应 用程序将所述加载请求发送至当前操作系统中的第一操作系统服务,以便所述第 一操作系统服务通过调用一虚拟的设备级驱动加载所述CBT钩子的dll。
    步骤530,针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行拦截;
    步骤540,判断所述窗口消息是否为劫持浏览器的窗口消息;如果所述窗口 消息是劫持浏览器的窗口消息,则进入步骤550;
    步骤550,停止所述窗口消息的传输。
    本发明示例对于第一操作系统服务和虚拟的设备级驱动的处理过程与实施例 四类似。
    本发明实施例则可只拦截创建窗口的窗口消息,当其为预先记录的要向浏览 器注入不安全dll的应用程序发送的创建窗口的消息,则可停止对应窗口的创建, 从而避免应用程序将不安全的dll注入浏览器。并且由于只拦截创建窗口的窗口消 息,不拦截其他类型的窗口消息,降低了拦截的范围,避免占用过多的系统资源; 本发明实施例可以利用第三方应用程序的权限,通过第一操作系统服务通过调用 一虚拟的设备级驱动程序以内核级权限进行CBT的加载,避免了操作系统对加载 的权限限制而加载失败。
    实施例六
    参照图6,其示出了本发明一种浏览器防注入的方法的流程示意图,具体可以 包括:
    步骤610,浏览器向当前操作系统中的第一操作系统服务发送加载请求;
    步骤620,所述第一操作系统服务接收到所述加载请求后,第一操作系统服务 判断所述加载请求的发送方是否为指定浏览器;如果所述加载请求的发送方不是 指定浏览器,则不进入后续处理;如果所述加载请求的发送方是指定浏览器,则 根据所述加载请求创建I/O请求包下发至所述虚拟的设备级驱动程序,进入步骤 630。
    在本发明实施例中,为了避免非用户选择的浏览器或者第三方合作的浏览器 使用本发明实施例提及的防注入功能,增加系统资源的消耗,可以在第一操作系 统服务中设置浏览器的黑名单。然后获取所述加载请求的发送方的身份信息,与 第一操作系统服务中记录的浏览器黑名单进行匹配,如果未匹配上,不进入防注 入过程;如果匹配上,则根据所述加载请求创建I/O请求包下发至所述虚拟的设 备级驱动程序。
    优选地,所述加载请求包括所述浏览器的身份验证信息;所述身份验证信息 比如浏览器名,或者说浏览器的签名信息,当然也可以是其他唯一性的身份验证 信息。
    进一步的,所述第一操作系统服务判断所述加载请求的发送方是否为指定浏 览器包括:
    子步骤621,解析所述加载请求中的身份验证信息,将所述身份验证信息与 预先存储的身份验证信息进行匹配;如果匹配上,则判断所述加载请求的发送方 是指定浏览器。
    那么将浏览器名与第一操作系统服务中记录的浏览器名进行匹配,或者将浏 览器的签名信息与第一操作系统服务中记录的浏览器的签名信息进行匹配,如果 匹配上,则认为所述加载请求的发送方是指定浏览器,可以利用设备级驱动执行 防注入功能。
    步骤630,所述虚拟的设备级驱动程序接收到所述I/O请求包后,调用动态链 接库加载函数加载用于拦截窗口消息的窗口消息钩子函数。
    步骤640,针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行拦截;
    步骤650,判断所述窗口消息是否为劫持浏览器的窗口消息;如果所述窗口 消息是劫持浏览器的窗口消息,则进入步骤660;
    步骤660,停止所述窗口消息的传输。
    实施例七
    参照图7,其示出了本发明一种浏览器防注入的方法的流程示意图,具体可以 包括:
    步骤710,浏览器向当前操作系统中的第一操作系统服务发送加载请求;
    步骤720,所述第一操作系统服务接收到所述加载请求,根据所述加载请求创 建I/O请求包下发至所述虚拟的设备级驱动程序;
    步骤730,所述虚拟的设备级驱动程序接收到所述I/O请求包后,所述虚拟的 设备级驱动程序根据所述I/O请求包判断所述加载请求的发送方是否为指定浏览 器;如果所述加载请求的发送方不是指定浏览器,则不进入后续处理;如果所述 加载请求的发送方是指定浏览器,则进入步骤740;
    在本发明实施例中,为了避免非用户选择的浏览器或者第三方合作的浏览器 使用本发明实施例提及的防注入功能,增加系统资源的消耗,可以在虚拟的设备 级驱动程序中设置浏览器的黑名单。然后根据所述IRP包获取所述加载请求的发 送方的身份信息,与虚拟的设备级驱动程序中记录的浏览器黑名单进行匹配,如 果未匹配上,不进入防注入过程;如果匹配上,则根据所述加载请求创建I/O请 求包下发至所述虚拟的设备级驱动程序。
    优选地,所述加载请求包括所述浏览器的身份验证信息;所述身份验证信息 比如浏览器名,或者说浏览器的签名信息,当然也可以是其他唯一性的身份验证 信息;
    进一步的,所述虚拟的设备级驱动程序根据所述I/O请求包判断所述加载请 求的发送方是否为指定浏览器包括:
    子步骤731,所述虚拟的设备级驱动程序接收由第一操作系统服务发送的I/O 请求包;所述I/O请求包括浏览器的身份验证信息;
    浏览器会将注册表路径设置请求发送至第一操作系统服务,第一操作系统服 务则会基于注册表路径设置请求包括的不允许访问节点的注册表位置信息和对应 该不允许访问节点的虚拟节点的路径,以及浏览器的身份验证信息重新封装为 IRP,再把IRP发送至所述设备级驱动程序。
    子步骤732,解析所述I/O请求包中的身份验证信息,将所述身份验证信息与 预先存储的身份验证信息进行匹配;如果匹配上,则判断所述加载请求的发送方 是指定浏览器。
    所述设备级驱动程序接收到第一操作系统服务发送的I/O请求包,则会解析 其中包括的不允许访问节点的注册表位置信息和对应该不允许访问节点的虚拟节 点的路径,以及浏览器的身份验证信息,然后将将所述身份验证信息与预先存储 的身份验证信息进行匹配;如果匹配上,则判断所述注册表路径设置请求的发送 方是指定浏览器。
    步骤740,所述虚拟的设备级驱动程序加载用于拦截窗口消息的窗口消息钩 子函数。
    步骤750,针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行拦截;
    步骤760,判断所述窗口消息是否为劫持浏览器的窗口消息;如果所述窗口 消息是劫持浏览器的窗口消息,则进入步骤770;
    步骤770,停止所述窗口消息的传输。
    实施例八
    参照图8,其示出了本发明一种浏览器客户端的结构示意图,具体可以包括:
    内核组件810,其配置为处理接收到的窗口消息;
    防注入组件820,具体包括:
    全局钩子加载模组821,其配置为加载用于拦截窗口消息的窗口消息钩子函 数;
    窗口消息拦截模组822,其配置为针对操作系统中的窗口消息,通过所述窗 口消息钩子函数进行拦截;
    窗口消息判断模组823,其配置为判断所述窗口消息是否为劫持浏览器的窗 口消息;
    窗口消息停止模组824,其配置为如果所述窗口消息是劫持浏览器的窗口消 息,则停止所述将所述窗口消息传输至内核组件。
    优选地,所述全局钩子加载模组821包括:
    第一加载模组,其配置为调用动态链接库加载函数加载所述窗口消息钩子函 数所在的动态链接库,以加载所述窗口消息钩子函数。
    优选地,所述窗口消息判断模组823包括:
    窗口句柄判断模组,其配置为将所述窗口消息所属的窗口句柄名与预置的窗 口句柄名单进行匹配;如果所述窗口句柄匹配上,则确定所述窗口消息为劫持浏 览器的窗口消息。
    实施例九
    参照图9,其示出了本发明一种浏览器客户端的结构示意图,具体可以包括:
    内核组件910,其配置为处理接收到的窗口消息;
    防注入组件920,具体包括:
    全局钩子加载模组921,其配置为加载用于拦截窗口消息的窗口消息钩子函 数;
    窗口消息拦截模组922,其配置为针对操作系统中的窗口消息,通过所述窗 口消息钩子函数进行拦截;
    窗口消息判断模组923,具体包括:
    窗口句柄判断模组9231,其配置为将所述窗口消息所属的窗口句柄名与 预置的窗口句柄名单进行匹配;如果所述窗口句柄匹配上,则进入窗口签名获取 模组9232;
    窗口签名获取模组9232,其配置为在所述窗口句柄匹配上之后,获取所 述窗口句柄所属应用程序的验证签名;
    窗口签名验证模组9233,其配置为对所述验证签名进行验证,如果所述 验证失败,则确定所述窗口消息为劫持浏览器的窗口消息;
    窗口消息停止模组924,其配置为如果所述窗口消息是劫持浏览器的窗口消 息,则停止所述将所述窗口消息传输至内核组件。
    实施例十
    参照图10,其示出了本发明一种浏览器客户端的结构示意图,具体可以包括:
    内核组件1010,其配置为处理接收到的窗口消息;
    防注入组件1020,具体包括:
    全局钩子加载模组1021,其配置为加载用于拦截窗口消息的窗口消息钩子函 数;
    窗口消息拦截模组1022,包括:
    创建窗口消息拦截模组10221,其配置为针对操作系统中的创建窗口的窗 口消息,通过所述窗口消息钩子函数进行拦截;
    窗口消息判断模组1023,其配置为判断所述窗口消息是否为劫持浏览器的窗 口消息;
    窗口消息停止模组1024,其配置为如果所述窗口消息是劫持浏览器的窗口消 息,则停止所述将所述窗口消息传输至内核组件。
    优选地,所述创建窗口消息拦截模组10221包括:
    第一创建窗口消息拦截模组,其配置为针对操作系统中的创建窗口的 WM_CREATE窗口消息,通过所述窗口消息钩子函数进行拦截。
    实施例十一
    参照图11,其示出了本发明一种浏览器客户端的结构示意图,具体可以包括:
    内核组件1110,其配置为处理接收到的窗口消息;
    防注入组件1120,具体包括:
    全局钩子加载模组1121,包括:
    请求处理模组11211,其配置为浏览器向当前操作系统中的第一操作系 统服务发送加载请求,以便所述第一操作系统服务通过调用一虚拟的设备级驱动 程序以加载用于拦截窗口消息的窗口消息钩子函数;
    窗口消息拦截模组1122,其配置为针对操作系统中的窗口消息,通过所述窗 口消息钩子函数进行拦截;
    窗口消息判断模组1123,其配置为判断所述窗口消息是否为劫持浏览器的窗 口消息;
    窗口消息停止模组1124,其配置为如果所述窗口消息是劫持浏览器的窗口消 息,则停止所述将所述窗口消息传输至内核组件。
    优选地,还包括:
    服务安装模组,其配置为浏览器获取第一操作系统服务的安装文件并进行安 装,以得到所述当前操作系统中的第一操作系统服务。
    优选第,所述服务安装模组包括:
    第一服务安装模组,其配置为获取第一操作系统服务的安装文件,通过所述 第一操作系统服务的安装文件安装所述第一操作系统服务的动态链接库和所述虚 拟的设备级驱动程序;
    服务启动模组,其配置为启动所述第一操作系统服务所在应用程序,以加载 第一操作系统服务的动态链接库;所述第一操作系统服务通过所述动态链接库调 用所述虚拟的设备级驱动程序。
    优选地,所述服务安装模组包括:
    服务存在判断模组,其配置为判断所述第一操作系统服务是否存在;如果所 述第一操作系统服务不存在,则获取第一操作系统服务的安装文件并进行安装, 以得到所述当前操作系统中的第一操作系统服务。
    优选地,所述请求处理模组包括:
    请求接收模组,其配置为所述第一操作系统服务接收到所述加载请求,根据 所述加载请求创建I/O请求包下发至所述虚拟的设备级驱动程序;
    驱动加载模组,其配置为所述虚拟的设备级驱动程序接收到所述I/O请求包 后,调用动态链接库加载函数加载用于拦截窗口消息的窗口消息钩子函数。
    实施例十二
    参照图12,其示出了本发明一种浏览器客户端的结构示意图,具体可以包括:
    内核组件1210,其配置为处理接收到的窗口消息;
    防注入组件1220,具体包括:
    全局钩子加载模组1221,包括:
    第一请求发送模组12211,其配置为所述浏览器通过预置的接口向独立 于浏览器的第二应用程序发送加载请求;所述独立于浏览器的第二应用程序将所 述加载请求发送至当前操作系统中的第一操作系统服务,以便所述第一操作系统 服务通过调用一虚拟的设备级驱动程序以加载用于拦截窗口消息的窗口消息钩子 函数。
    窗口消息拦截模组1222,其配置为针对操作系统中的窗口消息,通过所述窗 口消息钩子函数进行拦截;
    窗口消息判断模组1223,其配置为判断所述窗口消息是否为劫持浏览器的窗 口消息;
    窗口消息停止模组1224,其配置为如果所述窗口消息是劫持浏览器的窗口消 息,则停止所述将所述窗口消息传输至内核组件。
    实施例十三
    参照图13,其示出了本发明一种浏览器客户端的结构示意图,具体可以包括:
    内核组件1310,其配置为处理接收到的窗口消息;
    防注入组件1320,具体包括:
    全局钩子加载模组1321,包括:
    请求发送模组13211,其配置为浏览器向当前操作系统中的第一操作系 统服务发送加载请求;
    服务服务身份验证模组13212,其配置为在以加载用于拦截窗口消息的 窗口消息钩子函数之前,第一操作系统服务判断所述加载请求的发送方是否为指 定浏览器;如果所述加载请求的发送方不是指定浏览器,则不进入后续处理;如 果所述加载请求的发送方是指定浏览器,则根据所述加载请求创建I/O请求包下 发至所述虚拟的设备级驱动程序;
    驱动加载模组13213,其配置为所述虚拟的设备级驱动程序接收到所述 I/O请求包后,调用动态链接库加载函数加载用于拦截窗口消息的窗口消息钩子函 数;
    窗口消息拦截模组1322,其配置为针对操作系统中的窗口消息,通过所述窗 口消息钩子函数进行拦截;
    窗口消息判断模组1323,其配置为判断所述窗口消息是否为劫持浏览器的窗 口消息;
    窗口消息停止模组1324,其配置为如果所述窗口消息是劫持浏览器的窗口消 息,则停止所述将所述窗口消息传输至内核组件。
    优选地,所述加载请求包括所述浏览器的身份验证信息;
    进一步的,所述服务身份验证模组13212包括:
    服务解析验证模组,其配置为解析所述加载请求中的身份验证信息,将所述 身份验证信息与预先存储的身份验证信息进行匹配;如果匹配上,则判断所述加 载请求的发送方是指定浏览器。
    实施例十四
    参照图14,其示出了本发明一种浏览器客户端的结构示意图,具体可以包括:
    内核组件1410,其配置为处理接收到的窗口消息;
    防注入组件1420,具体包括:
    全局钩子加载模组1421,包括:
    请求发送模组14211,其配置为所述浏览器通过预置的接口向独立于浏 览器的第二应用程序发送加载请求;
    请求接收模组14212,其配置为所述第一操作系统服务接收到所述加载 请求,根据所述加载请求创建I/O请求包下发至所述虚拟的设备级驱动程序;
    驱动身份验证模组14213,其配置为在加载用于拦截窗口消息的窗口消 息钩子函数之前,所述虚拟的设备级驱动程序根据所述I/O请求包判断所述加载 请求的发送方是否为指定浏览器;如果所述加载请求的发送方不是指定浏览器, 则不进入后续处理;如果所述加载请求的发送方是指定浏览器,则加载用于拦截 窗口消息的窗口消息钩子函数;
    窗口消息拦截模组1422,其配置为针对操作系统中的窗口消息,通过所述窗 口消息钩子函数进行拦截;
    窗口消息判断模组1423,其配置为判断所述窗口消息是否为劫持浏览器的窗 口消息;
    窗口消息停止模组1424,其配置为如果所述窗口消息是劫持浏览器的窗口消 息,则停止所述将所述窗口消息传输至内核组件。
    优选地,所述加载请求包括所述浏览器的身份验证信息;
    进一步的,所述驱动身份验证模组包括:
    驱动请求接收模组,其配置为所述虚拟的设备级驱动程序接收由第一操作系 统服务发送的I/O请求包;所述I/O请求包括浏览器的身份验证信息;
    驱动解析验证模组,其配置为解析所述I/O请求包中的身份验证信息,将所 述身份验证信息与预先存储的身份验证信息进行匹配;如果匹配上,则判断所述 加载请求的发送方是指定浏览器。
    实施例十五
    参照图15,其示出了本发明一种带有浏览器客户端的装置的结构示意图,所 述带有浏览器客户端的装置1500具体可以包括:
    处理器1510,以及加载有多条可执行指令的存储器1520,所述多条指令包括 执行以下步骤的方法:
    加载用于拦截窗口消息的窗口消息钩子函数;
    针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行拦截;
    判断所述窗口消息是否为劫持浏览器的窗口消息;
    如果所述窗口消息是劫持浏览器的窗口消息,则停止所述窗口消息的传输。
    优选地,所述加载用于拦截窗口消息的窗口消息钩子函数,包括:
    调用动态链接库加载函数加载所述窗口消息钩子函数所在的动态链接库,以 加载所述窗口消息钩子函数。
    优选地,所述判断所述窗口消息是否为劫持浏览器的窗口消息,包括:
    将所述窗口消息所属的窗口句柄名与预置的窗口句柄名单进行匹配;如果所 述窗口句柄匹配上,则确定所述窗口消息为劫持浏览器的窗口消息。
    优选地,所述加载用于拦截窗口消息的窗口消息钩子函数包括:
    浏览器向当前操作系统中的第一操作系统服务发送加载请求,以便所述第一 操作系统服务通过调用一虚拟的设备级驱动程序以加载用于拦截窗口消息的窗口 消息钩子函数。
    当然,所述多条指令还包括执行前述介绍的各种方法的步骤。
    在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相 关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这 类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。 应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特 定语言所做的描述是为了披露本发明的最佳实施方式。
    在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明 的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出 公知的方法、结构和技术,以便不模糊对本说明书的理解。
    类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多 个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分 组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成 反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特 征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于 少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书 由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实 施例。
    本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应 性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例 中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成 多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些 是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和 附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进 行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中 公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
    此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实 施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着 处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中, 所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
    本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上 运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可 以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例 的浏览器防注入设备中的一些或者全部部件的一些或者全部功能。本发明还可以 实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如, 计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读 介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站 上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
    应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且 本领域技术人员在不脱离所附权利要求的范围的情况下可设计出转换实施例。在 权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单 词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一” 或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件 的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求 中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、 以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
    A1、一种浏览器防注入的方法,包括:
    加载用于拦截窗口消息的窗口消息钩子函数;
    针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行拦截;
    判断所述窗口消息是否为劫持浏览器的窗口消息;
    如果所述窗口消息是劫持浏览器的窗口消息,则停止所述窗口消息的传输。
    A2、如A1所述的方法,所述加载用于拦截窗口消息的窗口消息钩子函数, 包括:
    调用动态链接库加载函数加载所述窗口消息钩子函数所在的动态链接库,以 加载所述窗口消息钩子函数。
    A3、如A1所述的方法,所述判断所述窗口消息是否为劫持浏览器的窗口消 息,包括:
    将所述窗口消息所属的窗口句柄名与预置的窗口句柄名单进行匹配;如果所 述窗口句柄匹配上,则确定所述窗口消息为劫持浏览器的窗口消息。
    A4、如A3所述的方法,在窗口句柄匹配之后,还包括:
    获取所述窗口句柄所属应用程序的验证签名;
    对所述验证签名进行验证,如果所述验证失败,则确定所述窗口消息为劫持 浏览器的窗口消息。
    A5、如A1所述的方法,所述针对操作系统中的窗口消息,通过所述窗口消 息钩子函数进行拦截包括:
    针对操作系统中的创建窗口的窗口消息,通过所述窗口消息钩子函数进行拦 截。
    A6、如A1所述的方法,所述针对操作系统中的创建窗口的窗口消息,通过 所述窗口消息钩子函数进行拦截包括:
    针对操作系统中的创建窗口的WM_CREATE消息,通过所述窗口消息钩子函 数进行拦截。
    A7、如A1所述的方法,所述加载用于拦截窗口消息的窗口消息钩子函数包 括:
    浏览器向当前操作系统中的第一操作系统服务发送加载请求,以便所述第一 操作系统服务通过调用一虚拟的设备级驱动程序以加载用于拦截窗口消息的窗口 消息钩子函数。
    A8、如A7所述的方法,还包括:
    浏览器获取第一操作系统服务的安装文件并进行安装,以得到所述当前操作 系统中的第一操作系统服务。
    A9、如A1所述的方法,所述浏览器向当前操作系统中的第一操作系统服务 发送加载请求,包括:
    所述浏览器通过预置的接口向独立于浏览器的第二应用程序发送加载请求; 所述独立于浏览器的第二应用程序将所述加载请求发送至当前操作系统中的第一 操作系统服务,以便所述第一操作系统服务通过调用一虚拟的设备级驱动程序以 加载用于拦截窗口消息的窗口消息钩子函数。
    A10、如A8所述的方法,所述浏览器获取第一操作系统服务的安装文件并进 行安装,以得到所述当前操作系统中的第一操作系统服务,包括:
    获取第一操作系统服务的安装文件,通过所述第一操作系统服务的安装文件 安装所述第一操作系统服务的动态链接库和所述虚拟的设备级驱动程序;
    启动所述第一操作系统服务所在应用程序,以加载第一操作系统服务的动态 链接库;所述第一操作系统服务通过所述动态链接库调用所述虚拟的设备级驱动 程序。
    A11、如A8所述的方法,所述浏览器获取第一操作系统服务的安装文件并进 行安装,以得到所述当前操作系统中的第一操作系统服务,包括:
    判断所述第一操作系统服务是否存在;如果所述第一操作系统服务不存在, 则获取第一操作系统服务的安装文件并进行安装,以得到所述当前操作系统中的 第一操作系统服务。
    A12、如A7或A9所述的方法,所述第一操作系统服务通过调用一虚拟的设 备级驱动程序以加载用于拦截窗口消息的窗口消息钩子函数,包括:
    所述第一操作系统服务接收到所述加载请求,根据所述加载请求创建I/O请 求包下发至所述虚拟的设备级驱动程序;
    所述虚拟的设备级驱动程序接收到所述I/O请求包后,调用动态链接库加载 函数加载用于拦截窗口消息的窗口消息钩子函数。
    A13、如A12所述的方法,在以加载用于拦截窗口消息的窗口消息钩子函数 之前,还包括:
    第一操作系统服务判断所述加载请求的发送方是否为指定浏览器;
    如果所述加载请求的发送方不是指定浏览器,则不进入后续处理;
    如果所述加载请求的发送方是指定浏览器,则根据所述加载请求创建I/O请 求包下发至所述虚拟的设备级驱动程序。
    A14、如A13所述的方法,所述加载请求包括所述浏览器的身份验证信息;
    进一步的,所述第一操作系统服务判断所述加载请求的发送方是否为指定浏 览器包括:
    解析所述加载请求中的身份验证信息,将所述身份验证信息与预先存储的身 份验证信息进行匹配;如果匹配上,则判断所述加载请求的发送方是指定浏览器。
    A15、如A12所述的方法,在加载用于拦截窗口消息的窗口消息钩子函数之 前,还包括:
    所述虚拟的设备级驱动程序根据所述I/O请求包判断所述加载请求的发送方 是否为指定浏览器;
    如果所述加载请求的发送方不是指定浏览器,则不进入后续处理;
    如果所述加载请求的发送方是指定浏览器,则加载用于拦截窗口消息的窗口 消息钩子函数。
    A16、如A15所述的方法,所述加载请求包括所述浏览器的身份验证信息;
    进一步的,所述虚拟的设备级驱动程序根据所述I/O请求包判断所述加载请 求的发送方是否为指定浏览器包括:
    所述虚拟的设备级驱动程序接收由第一操作系统服务发送的I/O请求包;所 述I/O请求包括浏览器的身份验证信息;
    解析所述I/O请求包中的身份验证信息,将所述身份验证信息与预先存储的 身份验证信息进行匹配;如果匹配上,则判断所述加载请求的发送方是指定浏览 器。
    本发明还公开了B17、一种浏览器客户端,包括:
    内核组件,其配置为处理接收到的窗口消息;
    防注入组件,具体包括:
    全局钩子加载模组,其配置为加载用于拦截窗口消息的窗口消息钩子函数;
    窗口消息拦截模组,其配置为针对操作系统中的窗口消息,通过所述窗口消 息钩子函数进行拦截;
    窗口消息判断模组,其配置为判断所述窗口消息是否为劫持浏览器的窗口消 息;
    窗口消息停止模组,其配置为如果所述窗口消息是劫持浏览器的窗口消息, 则停止所述将所述窗口消息传输至内核组件。
    B18、如B17所述的浏览器客户端,所述全局钩子加载模组包括:
    第一加载模组,其配置为调用动态链接库加载函数加载所述窗口消息钩子函 数所在的动态链接库,以加载所述窗口消息钩子函数。
    B19、如B17所述的浏览器客户端,所述窗口消息判断模组包括:
    窗口句柄判断模组,其配置为将所述窗口消息所属的窗口句柄名与预置的窗 口句柄名单进行匹配;如果所述窗口句柄匹配上,则确定所述窗口消息为劫持浏 览器的窗口消息。
    B20、如B19所述的浏览器客户端,还包括:
    窗口签名获取模组,其配置为在所述窗口句柄匹配上之后,获取所述窗口句 柄所属应用程序的验证签名;
    窗口签名验证模组,其配置为对所述验证签名进行验证,如果所述验证失败, 则确定所述窗口消息为劫持浏览器的窗口消息。
    B21、如B17所述的浏览器客户端,所述窗口消息拦截模组包括:
    创建窗口消息拦截模组,其配置为针对操作系统中的创建窗口的窗口消息, 通过所述窗口消息钩子函数进行拦截。
    B22、如B17所述的浏览器客户端,所述创建窗口消息拦截模组包括:
    第一创建窗口消息拦截模组,其配置为针对操作系统中的创建窗口的 WM_CREATE窗口消息,通过所述窗口消息钩子函数进行拦截。
    B23、如B17所述的浏览器客户端,所述全局钩子加载模组包括:
    请求处理模组,其配置为浏览器向当前操作系统中的第一操作系统服务发送 加载请求,以便所述第一操作系统服务通过调用一虚拟的设备级驱动程序以加载 用于拦截窗口消息的窗口消息钩子函数。
    B24、如B23所述的浏览器客户端,还包括:
    服务安装模组,其配置为浏览器获取第一操作系统服务的安装文件并进行安 装,以得到所述当前操作系统中的第一操作系统服务。
    B25、如B17所述的浏览器客户端,所述全局钩子加载模组包括:
    第一请求发送模组,其配置为所述浏览器通过预置的接口向独立于浏览器的 第二应用程序发送加载请求;所述独立于浏览器的第二应用程序将所述加载请求 发送至当前操作系统中的第一操作系统服务,以便所述第一操作系统服务通过调 用一虚拟的设备级驱动程序以加载用于拦截窗口消息的窗口消息钩子函数。
    B26、如B24所述的浏览器客户端,所述服务安装模组包括:
    第一服务安装模组,其配置为获取第一操作系统服务的安装文件,通过所述 第一操作系统服务的安装文件安装所述第一操作系统服务的动态链接库和所述虚 拟的设备级驱动程序;
    服务启动模组,其配置为启动所述第一操作系统服务所在应用程序,以加载 第一操作系统服务的动态链接库;所述第一操作系统服务通过所述动态链接库调 用所述虚拟的设备级驱动程序。
    B27、如B24所述的浏览器客户端,所述服务安装模组包括:
    服务存在判断模组,其配置为判断所述第一操作系统服务是否存在;如果所 述第一操作系统服务不存在,则获取第一操作系统服务的安装文件并进行安装, 以得到所述当前操作系统中的第一操作系统服务。
    B28、如B23或B25所述的浏览器客户端,所述请求处理模组包括:
    请求接收模组,其配置为所述第一操作系统服务接收到所述加载请求,根据 所述加载请求创建I/O请求包下发至所述虚拟的设备级驱动程序;
    驱动加载模组,其配置为所述虚拟的设备级驱动程序接收到所述I/O请求包 后,调用动态链接库加载函数加载用于拦截窗口消息的窗口消息钩子函数。
    B29、如B25所述的浏览器客户端,所述全局钩子加载模组还包括:
    服务服务身份验证模组,其配置为在以加载用于拦截窗口消息的窗口消息钩 子函数之前,第一操作系统服务判断所述加载请求的发送方是否为指定浏览器; 如果所述加载请求的发送方不是指定浏览器,则不进入后续处理;如果所述加载 请求的发送方是指定浏览器,则根据所述加载请求创建I/O请求包下发至所述虚 拟的设备级驱动程序。
    B30、如B29所述的浏览器客户端,所述加载请求包括所述浏览器的身份验 证信息;
    进一步的,所述服务身份验证模组包括:
    服务解析验证模组,其配置为解析所述加载请求中的身份验证信息,将所述 身份验证信息与预先存储的身份验证信息进行匹配;如果匹配上,则判断所述加 载请求的发送方是指定浏览器。
    B31、如B28所述的浏览器客户端,所述全局钩子加载模组还包括:
    驱动身份验证模组,其配置为在加载用于拦截窗口消息的窗口消息钩子函数 之前,所述虚拟的设备级驱动程序根据所述I/O请求包判断所述加载请求的发送 方是否为指定浏览器;如果所述加载请求的发送方不是指定浏览器,则不进入后 续处理;如果所述加载请求的发送方是指定浏览器,则加载用于拦截窗口消息的 窗口消息钩子函数。
    B32、如B31所述的浏览器客户端,所述加载请求包括所述浏览器的身份验 证信息;
    进一步的,所述驱动身份验证模组包括:
    驱动请求接收模组,其配置为所述虚拟的设备级驱动程序接收由第一操作系 统服务发送的I/O请求包;所述I/O请求包括浏览器的身份验证信息;
    驱动解析验证模组,其配置为解析所述I/O请求包中的身份验证信息,将所 述身份验证信息与预先存储的身份验证信息进行匹配;如果匹配上,则判断所述 加载请求的发送方是指定浏览器。
    本发明还公开了C33、一种带有浏览器客户端的装置,包括:
    处理器,以及加载有多条可执行指令的存储器,所述多条指令包括执行以下 步骤的方法:
    加载用于拦截窗口消息的窗口消息钩子函数;
    针对操作系统中的窗口消息,通过所述窗口消息钩子函数进行拦截;
    判断所述窗口消息是否为劫持浏览器的窗口消息;
    如果所述窗口消息是劫持浏览器的窗口消息,则停止所述窗口消息的传输。
    C34、如C33所述的带有浏览器客户端的装置,所述加载用于拦截窗口消息 的窗口消息钩子函数,包括:
    调用动态链接库加载函数加载所述窗口消息钩子函数所在的动态链接库,以 加载所述窗口消息钩子函数。
    C35、如C33所述的带有浏览器客户端的装置,所述判断所述窗口消息是否 为劫持浏览器的窗口消息,包括:
    将所述窗口消息所属的窗口句柄名与预置的窗口句柄名单进行匹配;如果所 述窗口句柄匹配上,则确定所述窗口消息为劫持浏览器的窗口消息。
    C36、如C33所述的带有浏览器客户端的装置,所述加载用于拦截窗口消息 的窗口消息钩子函数包括:
    浏览器向当前操作系统中的第一操作系统服务发送加载请求,以便所述第一 操作系统服务通过调用一虚拟的设备级驱动程序以加载用于拦截窗口消息的窗口 消息钩子函数。

    关 键  词:
    浏览器 注入 方法 客户端 装置
      专利查询网所有文档均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:浏览器防注入方法、浏览器客户端和装置.pdf
    链接地址:https://www.zhuanlichaxun.net/p-4063725.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2017-2018 zhuanlichaxun.net网站版权所有
    经营许可证编号:粤ICP备2021068784号-1