浏览器流量劫持方法、装置及移动终端与流程

文档序号:12908308阅读:304来源:国知局
浏览器流量劫持方法、装置及移动终端与流程

本发明涉及通信技术领域,尤其涉及一种浏览器流量劫持方法、装置及移动终端。



背景技术:

在移动互联网时代下,越来越多的人通过手机等移动终端浏览新闻、购物、娱乐,移动终端作为内容的展示端,必然要通过网络从服务器获取内容和信息。由于移动网络自身的不稳定性,移动终端的网络加速成为应用竞争力的重要因素,其中很大一部分内容是通过网络视图(webview)进行展示。webview能够加载显示网页,其实质上是一种浏览器。随着html5(hypertextmarkuplanguage5)技术的推广,移动终端的网络加速需要先劫持流量,因而浏览器webview流量劫持技术成为移动终端网络加速的关键技术。

现有的移动终端webview流量劫持的方案,需要设置webview代理,而在设置webview代理之前需要创建webview,在webview创建出来之后,调用设置webview代理的代码,才能够成功对浏览器进行流量劫持,实现网络加速。

然而,现有技术不能准确获取系统创建webview的时间节点,导致对浏览器流量劫持失败,进而部分网络请求加速失败;同时,由于不能准确获取系统创建webview的时间点,客户需要在每个webview创建出来后通过调用设置webview代理的代码,才能成功对浏览器进行流量劫持,进而增加了客户的嵌入难度和时间。



技术实现要素:

为了解决现有技术的问题,本发明实施例提供了一种浏览器流量劫持方法、装置及移动终端。所述技术方案如下:

一方面,提供了一种浏览器流量劫持方法,包括如下步骤:

对浏览器的加载函数进行监测;

监测到目标对象被加载后,设置浏览器代理地址为指定代理服务器地址,并将浏览器流量劫持至所述指定代理服务器地址。可选地,所述对浏览器的加载函数进行监测的步骤具体包括:

通过java语言的动态代理方法,构造调用所述加载函数的对象的代理;

所述目标对象为所述加载函数中的一种函数,若所述目标对象被调用,则说明所述目标对象被加载。

可选地,所述目标对象为createwebview函数。

可选地,所述对浏览器的加载函数进行监测的步骤具体包括:

通过elfhook方法,更新所述加载函数,其中,所述加载函数包括dlopen函数和android_dlopen_ext函数;

对所述加载函数加载的动态库进行监测。

可选地,所述目标对象是名称为libchromiuwebview.so的动态库。

可选地,所述对加载函数加载的动态库进行监测的步骤具体包括:

判断被所述加载函数加载的动态库名称是否为libchromiuwebview.so;若是,则加载完成后设置浏览器代理。

另一方面,提供了一种流量劫持装置,包括:

监测模块,用于对浏览器的加载函数进行监测;

代理设置模块,用于监测到目标对象被加载后,设置浏览器代理地址为指定代理服务器地址;以及

流量劫持模块,用于将浏览器流量劫持至所述指定代理服务器地址。

可选地,所述函数更新模块还用于:

通过java语言的动态代理方法,构造调用所述加载函数的对象的代理;

通过构造所述调用加载函数的对象的代理,对所述目标对象是否被调用进行监测,所述目标对象为所述加载函数中的一种函数,若所述目标对象被调用,则说明所述目标对象被加载。

可选地,所述目标对象为createwebview函数。

可选地,还包括函数更新模块,所述函数更新模块用于通过elfhook方法,更新所述加载函数。

可选地,所述监测模块还用于:对所述加载函数加载的动态库进行监测,其中,所述加载函数包括dlopen函数和android_dlopen_ext函数。

可选地,所述目标对象是名称为libchromiuwebview.so的动态库。

可选地,所述监测模块还用于在任意动态库被加载时,调用被更新的所述新函数;以及用于判断被加载的动态库是否为libchromiuwebview.so动态库。

再一方面,提供了一种移动终端,包括所述的流量劫持装置。

本发明实施例提供的技术方案带来的有益效果是:

通过对创建webview必备的目标对象是否被加载进行监测,能够准确获取系统加载webview的时间节点,进而避免部分流量劫持失败,提高浏览器的流量劫持的成功率。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1是本发明提供的一种浏览器流量劫持方法的总流程示意图;

图2是本发明实施例一提供的一种浏览器流量劫持方法的流程示意图;

图3是本发明实施例一提供的一种流量劫持装置的结构示意图;

图4是本发明实施例二提供的一种浏览器流量劫持方法的流程示意图;

图5是本发明实施例二提供的一种流量劫持装置的结构示意图;

图6是本发明实施例三提供的一种移动终端的结构示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。

实施例一

参见图1、图2和图3,本发明的第一实施例提供了一种浏览器流量劫持方法及流量劫持装置。

图1所示,浏览器的流量劫持方法包括如下步骤:

s101:对浏览器的加载函数进行监测。

在安卓系统中,通过调用上述加载函数的目标对象,创建webview,因此通过特定技术,在调用所述加载函数时,对调用加载函数的对象进行监测,监测到目标对象被加载后,也就准确获取了系统加载webview的时间节点,进而实现对浏览器的流量劫持。本实施例中,目标对象为加载函数中的一种函数,具体是createwebview函数。

在本步骤中,上述特定技术可以为java语言的动态代理方法,通过java语言的动态代理方法构造调用加载函数的对象的代理,构造所述调用加载函数的对象的代理是为了监测目标对象是否被调用。本实施例中,所述调用加载函数的对象为android.webkit.webviewfactoryprovider。

s102:监测到目标对象被加载后,设置浏览器代理地址为指定代理服务器地址,并将浏览器流量劫持至所述指定代理服务器地址。

在本步骤中,当前述步骤采用java语言的动态代理方法时,所述目标对象为createwebview函数。当系统中的createwebview函数开始被调用,webview,即浏览器就被创建出来,进而获取了系统加载webview的时间节点,此时再调用设置webview代理的代码,设置浏览器代理地址为指定代理服务器地址,并将浏览器流量劫持至所述指定代理服务器地址,就能够实现对浏览器流量劫持。

图2所示,具体而言,当前述步骤采用java语言的动态代理方法时,webview是通过调用android.webkit.webviewfactoryprovider接口(即,调用加载函数的对象)的createwebview函数(即,目标对象)创建出来的。因此,当软件开发工具包(softwaredevelopmentkit,sdk)启动时,首先通过反射方式获取系统是否调用createwebview函数,如果已经调用createwebview函数,说明webview创建出来了,则直接设置webview代理。如果没有发现调用createwebview函数,说明系统还没有创建webview,此时,使用java的动态代理机制,通过proxy.newproxyinstance函数构造android.webkit.webviewfactoryprovider接口的代理,将该代理设置到android.webkit.webviewfactory的sproviderinstance变量中,当调用android.webkit.webviewfactoryprovider接口下的具体函数时,将会触发构造的代理中的调用函数,以对调用android.webkit.webviewfactoryprovider接口的具体函数进行监测,一旦发现createwebview函数被调用,可得知webview创建出来,此时去设置webview代理即可成功实现浏览器流量劫持。

通过对创建webview必备的目标对象是否被加载进行监测,能够准确获取系统加载webview的时间节点,进而实现对浏览器的流量劫持。

图3所示,本发明第一实施例的流量劫持装置200包括:

监测模块201,用于对浏览器的加载函数进行监测。具体地,是通过java语言的动态代理方法,构造所述调用加载函数的对象的代理;通过构造所述调用加载函数的对象的代理,对加载函数的目标对象是否被调用进行监测。其中,所述调用加载函数的对象为android.webkit.webviewfactoryprovider。目标对象为createwebview函数。

代理设置模块202,用于监测到目标对象被加载后,设置浏览器代理地址为指定代理服务器地址。

流量劫持模块203,用于将浏览器流量劫持至所述指定代理服务器地址。

实施例二

结合图1、图4和图5,本发明的第二实施例提供了一种浏览器流量劫持方法及流量劫持装置。

图1所示,浏览器流量劫持方法,包括如下步骤:

s101,对浏览器的加载函数进行监测。具体地,通过elfhook方法,更新所述加载函数;对所述加载函数加载的动态库进行监测,其中,所述加载函数为dlopen函数和android_dlopen_ext函数。

s102,监测到目标对象被加载后,设置浏览器代理地址为指定代理服务器地址,并将浏览器流量劫持至所述指定代理服务器地址。本实施例中,所述目标对象是名称为libchromiuwebview.so的动态库。具体地,监测还包括判断所述加载的动态库名称是否为libchromiuwebview.so;若是则设置浏览器代理。在s102中,由于前述步骤s101采用elfhook方法,所述目标对象是名称为libchromiuwebview.so动态库。因此,当系统中的libchromiuwebview.so动态库开始加载,webview,即浏览器就被创建出来,进而获取了系统加载webview的时间节点,此时再调用设置webview代理的代码,设置浏览器代理地址为指定代理服务器地址,并将浏览器流量劫持至所述指定代理服务器地址,就能够实现对浏览器流量劫持。

图4所示,具体而言,当前述步骤采用elfhook方法时,webview是通过加载名称为libchromiuwebview.so的动态库创建出来的。因此,当sdk启动时,首先通过读取系统已加载的动态库列表“/proc/self/maps”,查看是否存在libchromiuwebview.so动态库,如果已经存在该动态库,说明webview创建出来了,则直接设置webview代理。如果没有发现该动态库,说明系统还没有创建webview,此时,通过elfhook技术,用自实现dlopen函数替换dlopen和android_dlopen_ext这两个函数,因为这两个函数是系统加载动态库的入口,所有的动态库加载都会使用这两个函数。之后,通过对所有调用自实现dlopen函数进行加载的具体数据库进行监测,一旦发现libchromiuwebview.so动态库开始加载,可得知webview创建出来,此时去设置webview代理即可成功实现浏览器流量劫持。

通过对创建webview必备的目标对象是否被加载进行监测,能够准确获取系统加载webview的时间节点,进而实现对浏览器的流量劫持。

参见图5,本发明的第二实施例提供了一种流量劫持装置200a,可以执行实施例一中提供的浏览器流量劫持方法,包括:

函数更新模块201a,用于通过elfhook方法,对加载函数进行更新替换。

监测模块202b,对浏览器的加载函数进行监测,具体地,是对所述加载函数加载的动态库进行监测,其中,所述加载函数包括dlopen函数和android_dlopen_ext函数。还可以用于在任意动态库被加载时,调用被更新的所述加载函数;以及用于判断加载的动态库是否为libchromiuwebview.so动态库,若是,则动态库加载后使代理设置模块设置浏览器代理。

代理设置模块203c,用于监测到目标对象被加载后,设置浏览器代理地址为指定代理服务器地址。

流量劫持模块204d,用于将浏览器流量劫持至所述指定代理服务器地址。

实施例三

参见图6,本发明实施例提供了一种移动终端30,包括图3或图5所示的流量劫持装置200(200a),所述移动终端的其它部件与现有的移动终端相同,在此不再赘述。

上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。

以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1