位置虚拟方法及位置虚拟装置与流程

文档序号:11930690阅读:576来源:国知局
位置虚拟方法及位置虚拟装置与流程

本发明涉及通信领域的位置虚拟技术,尤其涉及一种位置虚拟方法及位置虚拟装置。



背景技术:

智能手机、平板电脑、车载终端以及穿戴式设备等各种终端快速普及和发展。

终端中可供安装的应用的种类和数量繁多,许多应用提供了位置服务,通过对终端进行定位,提供与当前位置相关的服务,如附近的商户、娱乐场所等。

问题在于,终端中的部分应用的服务逻辑是这样的:仅仅提供与终端当前位置相关的服务,但是,经常存在获取其他位置(异于终端当前位置)相关的服务的需求。

例如,在应用的开发测试过程中,开发者需要测试应用针对不同位置加载的服务是否正常,又例如,在应用的使用过程中,用户可能需要查看即将去往的位置能够提供的服务,但是由于部分应用的限制,导致用户无法根据需要查看任意位置的相关服务。

对于如何以一种普适性的方案有效虚拟位置,以查看应用针对不同位置的响应,尚无有效解决方案。



技术实现要素:

本发明实施例提供一种位置虚拟方法及位置虚拟装置,能够以一种普适性的方案在应用中有效虚拟终端的位置。

本发明实施例的技术方案是这样实现的:

第一方面,本发明实施例提供一种位置虚拟方法,所述方法包括:

向终端的进程注入代码,基于所注入的代码劫持所述终端的定位服务的调用接口;

检测到目标应用使用所述调用接口获取位置的请求;

构造虚拟位置,并通过所述定位服务的调用接口向所述目标应用返回所述虚拟位置;

基于所述目标应用的位置服务策略对所述虚拟位置进行处理,形成基于所述虚拟位置的位置服务结果。

第二方面,本发明实施例提供一种位置虚拟装置,所述装置包括:

劫持单元,用于向终端的进程注入代码,基于所注入的代码劫持所述终端的定位服务的调用接口;

检测单元,用于检测到目标应用使用所述调用接口获取位置的请求;

构造单元,用于构造虚拟位置,并通过所述定位服务的调用接口向所述目标应用返回所述虚拟位置;

响应单元,用于基于所述目标应用的位置服务策略对所述虚拟位置进行处理,形成基于所述虚拟位置的位置服务结果。

第三方面,本发明实施例提供一种位置虚拟装置,所述装置包括:

处理器和存储介质;所述存储介质中存储有可执行指令,所述可执行指令用于引起所述处理器执行以下的操作:

向终端的进程注入代码,基于所注入的代码劫持所述终端的定位服务的调用接口;

检测到目标应用使用所述调用接口获取位置的请求;

构造虚拟位置,并通过所述定位服务的调用接口向所述目标应用返回所述虚拟位置;

基于所述目标应用的位置服务策略对所述虚拟位置进行处理,形成基于所述虚拟位置的位置服务结果。

本发明实施例具有以下有益效果:

1)虚拟位置的处理,是通过劫持调用接口向目标应用返回虚拟位置完成,任何系统(不论是否开启位置支持开启位置虚拟功能),对终端定位总是通过对调用接口的调用实现的,因此通过对调用接口的劫持,可以适用于所有的系统中的位置虚拟,适用性强;

2)与系统的位置虚拟功能是否开启无关,即使系统的位置虚拟服务关闭,也能够向目标应用返回虚拟位置,不受终端的系统是否允许使用位置虚拟功能影响;

3)对于目标应用来说,对调用接口的劫持是透明的,因此目标应用总是将返回的位置识别为终端的实际的位置,不会出现对返回的虚拟位置拒绝响应的情况。

附图说明

图1是本发明实施例提供的位置虚拟装置的一个可选的硬件结构示意图;

图2是本发明实施例提供的安卓系统的位置虚拟服务的设置示意图;

图3是本发明实施例提供的位置虚拟的一个可选的流程示意图;

图4是本发明实施例提供的位置虚拟的一个可选的流程示意图;

图5是本发明实施例提供的位置虚拟的一个可选的流程示意图;

图6-1是本发明实施例提供的在地图应用中进行位置虚拟的一个可选的流程示意图;

图6-2是本发明实施例提供的定位服务的调用接口没有劫持时,地图应用对调用接口进行调用以获取位置的示意图;

图6-3是本发明实施例提供的定位服务的调用接口劫持时,地图应用对调用接口进行调用以获取位置的示意图;

图6-4是本发明实施例提供的在地图应用中注入代码后获取位置的一个可选的处理示意图;

图7-1是本发明实施例提供的在社交应用中进行位置虚拟的一个可选的流程示意图;

图7-2是本发明实施例提供的在社交应用中标定虚拟位置的一个可选的显示示意图;

图7-3是本发明实施例提供的终端在地图应用中进行位置虚拟的一个可选的处理示意图;

图7-4是本发明实施例提供的定位服务的调用接口没有劫持时,社交应用对调用接口进行调用以获取位置的示意图;

图7-5是本发明实施例提供的定位服务的调用接口被劫持时,社交应用对调用接口进行调用以获取位置的示意图;

图8-1是本发明实施例提供的位置虚拟的一个可选的流程示意图;

图8-2是本发明实施例提供的在定位服务的调用接口被劫持时,地图应用对调用接口进行调用以获取位置的示意图;

图8-3是本发明实施例提供的在定位服务的调用接口被劫持时,社交应用对调用接口进行调用以获取位置的示意图;

图9是本发明实施例提供的位置虚拟装置的一个可选的功能结构示意图。

具体实施方式

以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所提供的实施例仅仅用以解释本发明,并不用于限定本发明。另外,以下所提供的实施例是用于实施本发明的部分实施例,而非提供实施本发明的全部实施例,在不冲突的情况下,本发明实施例记载的技术方案可以任意组合的方式实施。

本发明实施例提供为位置虚拟方法、以及应用位置虚拟方法的位置虚拟装置,下面对位置虚拟方法以及相应位置虚拟装置的不同实现方式进行说明。

本发明实施例提供的位置虚拟方法可以有多种实现方式,例如:

1)在服务器侧实施,服务器应用程序及平台。

本发明实施例可提供使用C/C++、Java等编程语言设计的应用软件或大型软件系统中的专用软件模块,运行于服务器(以可执行指令的方式在服务器的存储介质中存储,并由服务器端的处理器运行)执行位置虚拟。

本发明实施例还可以提供为在多台服务器构成的分布式、并行计算平台上,搭载定制的、易于交互的网络(Web)界面或其他各用户界面(UI,User Interface),以根据用户在界面中设定的位置,针对应用进行位置虚拟。

2)在终端侧实施,提供为应用或模块。

本发明实施例可提供为使用C/C++、Java等编程语言设计的应用或者模块,模块可以嵌入到基于安卓或iOS等系统的各种终端中,从而直接使用终端自身的计算资源进行位置虚拟。

本发明实施例提供的应用位置虚拟方法的位置虚拟装置可以有多种实现方式,例如:

1)基于终端中的计算资源实现,示例性地,终端可以为智能手机、平板电脑、穿戴式设备(智能手表、智能眼镜)以及车载终端等各种形式的终端。

2)另外,位置虚拟装置还可以基于服务器或服务器组建的计算平台中的计算资源实现。

对可以应用于终端或服务器的位置虚拟装置的硬件结构进行说明,参见图1示出的位置虚拟装置10的一个可选的硬件结构示意图,位置虚拟装置10包括:

处理器11、输入/输出接口13,存储介质14以及网络接口12,组件可以经系统总线连接通信。

处理器11可以采用中央处理器(CPU)、微处理器(MCU,Microcontroller Unit)、专用集成电路(ASIC,Application Specific Integrated Circuit)或逻辑可编程门阵列(FPGA,Field-Programmable Gate Array)实现,用于基于存储介质14中存储的可执行指令完成位置虚拟的相关处理。

输入/输出接口13可以采用如显示屏、触摸屏、扬声器等输入/输出器件实现,用于显示位置虚拟的中间过程以及结果。

存储介质14可以采用闪存、硬盘、光盘等非易失性存储介质实现,也可以采用双倍率(DDR,Double Data Rate)动态缓存等易失性存储介质实现,示例性地,存储介质14可以与硬件结构中的其他组件共同在同一设备(如终端或者服务器)设置,也可以相对硬件结构中的其他组件异地远程设置。

网络接口12向处理器11提供外部数据如异地设置的存储介质14的访问能力,示例性地,网络接口12可以基于近场通信(NFC,Near Field Communication)技术、蓝牙(Bluetooth)技术、紫蜂(ZigBee)技术进行的近距离通信,另外,还可以实现如基于码分多址(CDMA,Code Division Multiple Access)、宽带码分多址(WCDMA,Wideband Code Division Multiple Access)等通信制式及其演进制式的通信。

对本发明进行进一步详细说明之前,对本发明实施例中涉及的名词和术语进行说明,本发明实施例中涉及的名词和术语适用于如下的解释。

1)基于位置的服务(LBS,Location Based Services),又称定位服务,是由移动通信网络和卫星定位系统结合或二者之一提供的一种业务,通过定位技术获得终端的位置信息(如经纬度坐标数据),提供给移动用户本人或他人以及通信系统,以实现各种与位置相关的业务。

2)位置虚拟服务,终端中提供的允许虚拟终端的当前位置的服务,虚拟的位置可以为任意位置,可以用于开发测试(如地图、导航类应用)中与不同位置相关的服务(如功能或者信息)。

3)Hook(钩子):消息的劫持处理机制,实际上是一个处理消息的程序(也可以视为代码),以监视指定程序(或进程)的特定的消息或事件(比如键盘、鼠标的输入,屏幕取词,日志事件),当监视到消息或事件后,劫持消息或特定事件从而取得消息或事件的控制权,可以进行加工处理(改变)消息或事件,也可以不作处理而继续传递消息或事件给指定程序,还可以强制结束消息或事件的传递。

4)Shellcode,实际是一段代码(也可以是填充数据),是用来发送到设备并利用设备的系统中特定漏洞获取权限的代码,一般可以获取最高权限如安卓系统的root权限。另外,Shellcode一般是作为数据发送给设备。

5)代码注入:将可执行代码块注入到指定的进程。

6)目标应用,用户需要输入虚拟位置(一般地,不同于用户当前的位置)的应用,从而使应用基于输入的虚拟位置而加载相关的服务。

7)进程,处于运行状态的应用,占用系统资源,应用可以只运行一个进程,也可以同时运行多个进程。

如前所述,终端中的部分应用的服务逻辑是这样的:仅仅提供与终端当前位置相关的服务,但是,经常存在获取其他位置(异于终端当前位置)相关的服务。

鉴于上述问题,本发明实施例提供的一种位置虚拟方法,针对以下的场景进行说明:终端运行安卓系统,安装有社交应用,用户需要在社交应用中虚拟其他位置(异于终端当前位置),从而可以查看其他位置相关的服务(如附近的好友、附近的陌生人等)。

安卓系统原生的位置虚拟服务(简称原生位置虚拟服务)的设置示意图如图2所示,用户通过手动开启位置虚拟服务即可输出虚拟位置,为进行位置虚拟,在终端中运行一用于开启终端操作系统中原生的位置虚拟服务的第三方位置虚拟服务,参见图3示出的位置虚拟的一个可选的流程示意图,包括以下步骤:

步骤101,第三方位置虚拟服务开启定位服务中的原生位置虚拟服务。

进程是应用的基本执行主体,相应地,从进程的角度,上述步骤101可以通过这样的方式实现,由第三方位置虚拟服务的进程开启定位服务进程中的原生位置虚拟服务。

定位服务是终端的操作系统中原生的定位服务,或者是终端中安装的第三方的定位服务,用于基于各种定位技术如全球卫星信号定位技术、基站定位技术、网络辅助定位技术等,对终端进行定位。

步骤102,第三方位置虚拟服务向定位服务发送需要虚拟的位置。

从进程的角度,上述步骤102可以通过这样的方式实现,由第三方位置虚拟服务的进程向定位服务的进程发送需要虚拟的位置。

一般地,虚拟的位置与终端的实际位置不同。示例性地,假设用户持有终端位于位置1,如果用户期望在社交应用中查看位于位置2(异于位置1)附近的好友,则在位置虚拟服务中预先设置位置2。

步骤103,社交应用向定位服务请求终端的位置。

从进程的角度,上述步骤103可以通过这样的方式实现,社交应用的进程向定位服务的进程请求终端的位置。

示例性地,当用户在社交应用中触发基于位置的服务(如查看附近好友)时,社交应用向定位服务请求终端的位置。

步骤104,定位服务通过原生位置虚拟服务向社交应用返回虚拟位置。

从进程的角度,上述步骤102可以通过这样的方式实现,定位服务的进程通过原生位置虚拟服务向社交应用的进程返回虚拟位置。

接续前述示例,由于用户在位置虚拟服务中预先设置位置2,定位服务通过原生位置虚拟服务向社交应用返回虚拟的位置 2,实现了对社交应用“欺骗”的效果。社交应用将位置2识别为终端的实际位置,搜索位置2附近的好友并加载。

可以看出,本发明实施例提供的上述位置虚拟方法,通过调用系统的原生位置虚拟服务形成虚拟位置,使社交应用加载与虚拟位置相关的服务。但是,发明人发现,上述位置虚拟的方案存在这样的问题:

1)依赖系统原生位置虚拟服务,目前,相当多的应用在提供基于位置的服务时,一旦检测到系统的原生位置虚拟服务开启,就会认为返回给应用的位置是虚假的位置,拒绝对返回给应用的位置进行响应,导致无法获取与虚拟位置相关的服务。

2)以终端的操作系统为安卓系统为例,安卓系统的生态碎片化十分严重,不同终端的操作系统往往是厂商基于官方系统修改定制的,相当多的定制系统没有开启虚拟位置功能,导致上述虚拟位置的方案无法覆盖所有终端。

鉴于上述问题,发明人发现,无论终端运行何种系统,终端中的任意应用在提供基于位置的服务而需要获取终端的实际位置时,总是通过调用定位服务的调用接口来实现,本发明实施例还提供一种位置虚拟方法,如图4所示,在终端操作系统原生的位置虚拟服务处于关闭状态时,采用向终端的进程注入代码的方式,基于所注入的代码劫持终端的定位服务的调用接口(步骤201);检测到目标应用使用调用接口获取位置的请求(步骤202)时,作为响应,构造虚拟位置(步骤203),并向定位服务的调用接口返回虚拟位置(步骤204),使得基于目标应用的位置服务策略对虚拟位置进行处理,形成基于虚拟位置的位置服务结果(步骤205)。

可以看出,通过劫持定位服务的调用接口的方式,取得对目标应用(例如,前述的社交应用)获取终端的实际位置的过程的控制,一旦目标应用具有获取终端的实际位置的请求,则通过劫持的调用接口向目标应用返回虚拟位置。

由于上述返回虚拟位置的处理是通过劫持调用接口完成,而所有的系统中目标应用获取位置总是通过对调用接口进行调用获得,与系统的位置虚拟服务是否开启无关,因此可以适用于所有的系统;

由于不依赖于系统原生的位置虚拟服务,因此即使系统的原生的位置虚拟服务关闭,也能够向目标应用返回虚拟位置以完成位置虚拟;

对于目标应用来说,对调用接口的劫持是透明的,因此目标应用总是将返回的位置识别为终端的实际的位置,不会出现目标应用对返回的虚拟位置拒绝响应的情况。

实际应用中,前述注入代码的进程存在至少两种不同的方式,如可以向目标应用的进行注入代码,或者,向终端操作系统中原生的位置服务(简称为定位服务)注入代码,

下面首先针对在目标应用的进程中注入代码实现位置虚拟进行说明。为进行位置虚拟,在终端中运行第三方的位置虚拟服务(简称第三方位置虚拟服务),由第三方位置虚拟服务向目标应用的进程注入代码,并进行位置虚拟的相关处理。需要说明的是,为了避免目标应用拒绝对返回的虚拟位置进行响应,需要关闭终端操作系统的原生位置虚拟服务。参见图5示出的位置虚拟的一个可选的流程示意图,包括以下步骤:

步骤301,第三方位置虚拟服务向终端的目标应用的进程注入代码。

在一个实施例中,第三方位置虚拟服务获得系统的根(root)用户权限,以系统根用户权限在目标应用的进程中加载可执行的代码,从而能够在目标应用的进程中强制执行代码。

示例性地,目标应用可以为终端中任意提供与位置相关服务的应用,如地图导航类应用、社交应用和线上购物应用等。

以终端运行安卓操作系统为例对注入代码的处理进行说明,向目标应用注入代码即是向目标应用的进程中注入代码,并在系统中注入执行代码所需要的库文件。可以通过向终端的系统发送Shellcode的方式获得root权限,在获得终端操作系统的root权限之后,注入代码的处理包括以下步骤:

步骤3011,在目标应用的进程中分配内存。

目标进程调用内存空间映射(mmap)函数在进程内存中申请内存空间。

步骤3012,向目标应用的进程中写入代码和参数。

将要注入的库文件的名称字符串和库文件中要调用的函数名称字符串,写入到目标应用的进程的内存空间。

步骤3013,运行目标进程中的代码,由代码调用打开动态链接库(dlopen)函数来载入库文件。

步骤302,在目标应用的进程中注入的代码在执行过程中,劫持定位服务的调用接口。

在一个实施例中,第三方位置虚拟服务向终端的目标应用的进程注入代码,使得代码能够在目标应用的进程的内存空间中得到执行,通过执行在目标应用的进程所注入的代码,劫持定位服务的调用接口。

步骤303,目标应用的进程中注入的代码在执行过程中,检测到目标应用基于调用接口获取位置的请求。

在一个实施例中,由于目标应用总是通过调用定位服务的调用接口这样的方式来获取终端的位置,因此,当目标应用的进程中执行注入代码时,代码在执行过程中一旦检测到目标应用的进程针对调用接口的调用,即确定目标应用具有获取终端的位置的请求。

步骤304,目标应用的进程中注入的代码在执行过程中,构造虚拟位置。

在一个实施例中,目标应用的进程中注入的代码在执行过程中进行以下操作:将第三方位置虚拟服务替换定位服务,在第三方位置虚拟服务的进程中构造的虚拟位置,也就是由第三方位置虚拟服务构造虚拟位置以返回目标应用,由于系统的原生位置虚拟服务没有开启,对于目标来说,并不“知道”定位服务的调用接口已经被劫持;因此可以使用第三方位置虚拟服务实现对目标应用的“欺骗”。

步骤305,目标应用的进程中注入的代码在执行过程中,通过定位服务的调用接口,向目标应用返回虚拟位置。

在一个实施例中,目标应用的进程注入的代码执行以下操作,将第三方位置虚拟服务构造虚拟位置、经由调用接口向目标应用的进程返回。

例如,目标应用的进程中注入的代码在执行过程中,在目标应用中加载第三方位置虚拟服务的标识,提示用户可以虚拟位置,当用户在目标应用中标定一个虚拟位置(不同于用户的实际位置)时,响应于用户在目标应用中标定虚拟位置的操作,由第三方位置虚拟服务构造与标定点相应的虚拟位置数据。

步骤306,目标应用基于目标应用的位置服务策略对虚拟位置进行处理,形成基于虚拟位置的位置服务结果。

在一个实施例中,在目标应用的进程中针对虚拟位置执行位置服务策略,位置服务策略用于匹配终端的位置,获得与位置关联的服务,如关联的功能和/或信息,并在终端的图形界面中加载功能和/或信息。

下面结合不同的应用场景进行说明:

场景1)服务器对即将上线的地图应用进行测试,需要在地图应用中标定不同的位置,测试地图应用的打车功能,地图应用中预置的逻辑是,如果用户的发起打车时的起点与用户当前位置差距过大且不提交订单,为此,需要对发起打车的起点位置进行虚拟。

参见图6-3,地图应用在图形界面中加载以位置1为标定点的地图定位界面,此时,如果定位服务的调用接口没有被劫持,即使用户在地图定位界面中标定位置2作为打车的起点位置,那么地图应用将发现用户实际位置1与标定位置2跨度过大而拒绝发起订单(例如提示位置不正确)。

参见图6-1和图6-4,第三方位置虚拟服务在地图应用的进程中注入代码(步骤401),注入的代码在执行过程中,对地图应用进程调用定位服务的调用接口进行劫持(步骤402),在地图应用的图形界面中加载第三方位置虚拟服务的标识,提示用户可以在地图定位界面标定一个虚拟位置,在地图应用进程对调用接口进行调用查找位置(步骤403),参见图6-2,利用第三方位置虚拟服务基于标定的虚拟位置2生成的虚拟位置数据,通过劫持的调用接口返回地图应进程(步骤404),对于地图应用进程来说并不“知道”调用接口被劫持,因此将调用接口返回的位置2作为用户的实际位置,地图应用发现用户在地图定位界面中标定的位置2,与查询到的用户的实际位置2相符,作为响应,以虚拟的位置2作为打车的起点位置发起订单。

场景2)终端运行的目标应用为社交应用,用户持有终端位于位置1,需要在社交应用中查看位于位置2附近的好友。

社交应用加载地图定位界面并标定用户当前所处位置,社交应用在图形界面中加载以位置1为标定点的地图定位界面,参见图7-4,社交应用通过对定位服务的调用接口进行调用获取用户的当前位置,此时,如果定位服务的调用接口没有被劫持,即使用户在地图定位界面中标定位置2,那么社交应用将发现用户实际位置1与标定位置2跨度过大而拒绝响应(例如提示位置不正确)从而拒绝对用户标定的位置2进行响应。

第三方位置虚拟服务在社交应用的进程中注入代码,对社交应用调用定位服务的调用接口进行劫持,参见图7-2,在社交应用的图形界面中加载第三方位置虚拟服务的标识,提示用户可以在地图定位界面标定一个虚拟位置,由社交应用的进程中注入代码完成对定位服务的调用接口的劫持,利用第三方位置虚拟服务基于标定的虚拟位置2生成的虚拟位置数据,通过劫持的调用接口返回社交应用,对于社交应用来说并不“知道”调用接口被劫持,因此将调用接口返回的位置2作为用户的实际位置,社交应用发现用户在地图定位界面中标定的位置2,与查询到的用户的实际位置2相符,因此查询用户标定的位置2附近的好友并在社交应用的图形界面中加载。

在社交应用的定位地图界面中用户位于位置1,用户需要在社交应用中查看位于位置2附近的好友,第三方位置虚拟服务提示用户可以虚拟位置,相应地,如图7-3所示,第三方位置虚拟服务支持用户标定一个虚拟的位置2,自动将社交应用中的定位位置(实际上为位置1)替换为虚拟的位置2,使社交应用基于虚拟的位置2查找用户的好友。

参见图7-1,第三方位置虚拟服务进程(第三方位置虚拟服务的进程)将代码注入到社交应用的进程(步骤501),注入代码使用hook技术劫持社交应用获取定位的调用接口(步骤502),因此,当社交应用调用系统的调用接口进行定位(步骤503)时,参加图7-3,使得定位服务无法向社交应用进程返回位置,第三方位置虚拟服务进程向社交应用返回一个虚拟的位置2(步骤504),达到虚拟位置的目的。

如图7-4所示的定位服务的调用接口没有劫持时,应用对调用接口进行调用以获取位置的示意图;在安卓系统中,应用进程需要获取终端的当前位置时,会调用定位服务获取用户的当前位置。

如图7-5所示的定位服务的调用接口被劫持时,应用对调用接口进行调用以获取位置的示意图;第三方位置虚拟服务进程通过中间人的方式劫持社交应用进程获取定位的请求,将实现劫持功能的代码注入社交应用进程,并运行在社交应用进程中。当代码运行时,首先会替换定位服务(系统的原生定位服务或第三方的定位服务)为第三方位置虚拟服务,当社交应用进程在请求获取定位时,第三方位置虚拟服务进程通过调用接口向社交应用进程返回虚拟位置,由于社交应用进程调用定位服务的调用接口被劫持,因此无法分辨返回的虚拟位置的真实性,这样,无论位置伪造进程向社交应用进行何种位置,社交应用都会识别为终端当前的真实位置并进行响应,从而达到实现虚拟位置的功能。

以上以在目标应用进程中注入代码实现位置虚拟为例进行说明,作为向目标应用进程中注入代码的替代方案,可以在定位服务进程中注入代码,从而,在系统中任意应用获取定位时都能够返回虚拟位置。

下面再针对在定位服务(社交应用使用的定位服务,如系统原生的定位服务,或者系统中安装的第三方的定位服务)的进程中注入代码实现位置虚拟进行说明。为进行位置虚拟,在终端中运行一第三方的位置虚拟服务(简称第三方位置虚拟服务),由第三方位置虚拟服务向定位服务的进程注入代码,并进行位置虚拟的相关处理。需要说明的是,为了避免目标应用拒绝对返回的虚拟位置进行响应,需要关闭终端操作系统的原生位置虚拟服务。参见图8-1示出的位置虚拟的一个可选的流程示意图,包括以下步骤:

步骤601,第三方位置虚拟服务向终端的定位服务的进程注入代码。

在一个实施例中,第三方位置虚拟服务获得系统的根(root)用户权限,以系统根用户权限在定位服务的进程中加载可执行的代码,从而能够在的定位服务的进程中强制执行代码。

示例性地,目标应用可以为终端中任意提供与位置相关服务的应用,如地图导航类应用,社交应用,线上购物应用等。

以终端运行安卓操作系统为例对注入代码的处理进行说明,向定位服务注入代码即是向定位服务的进程中注入代码,并在系统中注入执行代码所需要的库文件,上述操作可以通过向终端的系统发送Shellcode的方式实现,在获得终端操作系统的root权限之后,注入代码的处理包括以下步骤:

步骤6011,在定位服务的进程中分配内存。

目标进程调用内存空间映射(mmap)函数在进程内存中申请内存空间。

步骤6012,向定位服务的进程中写入代码和参数。

将要注入的库文件的名称字符串和库文件中要调用的函数名称字符串,写入到定位服务的进程的内存空间。

步骤6013,运行定位服务进程中的代码,由代码调用打开动态链接库(dlopen)函数来载入库文件。

步骤602,定位服务的进程中注入的代码在执行过程中,劫持定位服务的调用接口。

在一个实施例中,第三方位置虚拟服务向终端的定位服务的进程注入代码,使得代码能够在定位服务的进程的内存空间中得到执行,通过执行在定位服务的进程所注入的代码,劫持定位服务的调用接口。

步骤603,定位服务的进程中注入的代码在执行过程中,检测到目标应用基于调用接口获取位置的请求。

在一个实施例中,由于目标应用总是通过调用系统定位服务的调用接口这样的方式来获取终端的位置,因此,当定位服务的进程中执行注入代码时,代码在执行过程中一旦检测到目标应用的进程针对调用接口的调用,即确定目标应用具有获取终端的位置的请求。

步骤604,定位服务的进程中注入的代码在执行过程中,构造虚拟位置。

在一个实施例中,目标应用的进程中注入的代码在执行过程中进行以下操作:将第三方位置虚拟服务替换定位服务,将第三方位置虚拟服务的进程构造的虚拟位置返回目标应用,由于系统的原生位置虚拟服务没有开启,因此可以使用第三方位置虚拟服务实现对目标应用的“欺骗”。

步骤605,定位服务的进程中注入的代码在执行过程中,通过定位服务的调用接口,向目标应用返回虚拟位置。

在一个实施例中,定位服务的进程注入的代码执行以下操作,将第三方位置虚拟服务构造的虚拟位置、经由调用接口向目标应用返回。

例如,定位服务的进程中注入的代码在执行过程中,在目标应用中加载第三方位置虚拟服务的标识,提示用户可以虚拟位置,当用户在目标应用中标定一个虚拟位置(不同于用户的实际位置)时,响应于用户在目标应用中标定虚拟位置的操作,通过第三方位置虚拟服务构造与标定点相应的虚拟位置数据。

步骤606,目标应用基于目标应用的位置服务策略对虚拟位置进行处理,形成基于虚拟位置的位置服务结果。

在一个实施例中,在目标应用的进程中针对虚拟位置执行位置服务策略,通常,位置服务策略是匹配终端的位置,获得与位置关联的服务,如关联的功能和/或信息,并在终端的图形界面中加载功能和/或信息。

下面结合不同的应用场景进行说明:

场景1)服务器对即将上线的地图应用进行测试,需要在地图应用中标定不同的位置,测试地图应用的打车功能,地图应用中预置的逻辑是,如果用户的发起打车时的起点与用户当前位置差距过大且不提交订单,为此,需要对发起打车的起点位置进行虚拟。

地图应用在图形界面中加载以位置1为标定点的地图定位界面,此时,如果定位服务的调用接口没有被劫持,即使用户在地图定位界面中标定位置2作为打车的起点位置,那么地图应用将发现用户实际位置1与标定位置2跨度过大而拒绝发起订单(例如提示位置不正确)。

参见图8-2,第三方位置虚拟服务在定位服务的进程中注入代码,注入的代码在执行过程中,对地图应用进程调用定位服务的调用接口进行劫持(步骤402),在地图应用的图形界面中加载第三方位置虚拟服务的标识,提示用户可以在地图定位界面标定一个虚拟位置,在地图应用进程对调用接口进行调用查找位置,利用第三方位置虚拟服务基于标定的虚拟位置2生成的虚拟位置数据,通过劫持的调用接口返回地图应进程,对于地图应用进程来说并不“知道”调用接口被劫持,因此将调用接口返回的位置2作为用户的实际位置,地图应用发现用户在地图定位界面中标定的位置2,与查询到的用户的实际位置2相符,作为响应,以虚拟的位置2作为打车的起点位置发起订单。

场景2)终端运行的目标应用为社交应用,用户持有终端位于位置1,需要在社交应用中查看位于位置2附近的好友。

参见图8-3,社交应用进程加载地图定位界面并标定用户当前所处位置,社交应用在图形界面中加载以位置1为标定点的地图定位界面,社交应用通过对定位服务的调用接口进行调用获取用户的当前位置,此时,如果定位服务的调用接口没有被劫持,即使用户在地图定位界面中标定位置2,那么社交应用将发现用户实际位置1与标定位置2跨度过大而拒绝响应(例如提示位置不正确)从而拒绝对用户标定的位置2进行响应。

第三方位置虚拟服务在定位服务的进程中注入代码,对社交应用调用定位服务的调用接口进行劫持,在社交应用的图形界面中加载第三方位置虚拟服务的标识,提示用户可以在地图定位界面标定一个虚拟位置,基于执行在定位服务进程中注入代码完成对定位服务的调用接口的劫持,利用第三方位置虚拟服务基于标定的虚拟位置2生成的虚拟位置数据,通过劫持的调用接口返回社交应用进程,对于社交应用进程来说并不“知道”调用接口被劫持,因此将调用接口返回的位置2作为用户的实际位置,社交应用发现用户在地图定位界面中标定的位置2,与查询到的用户的实际位置2相符,因此查询用户标定的位置2附近的好友并在社交应用的图形界面中加载。

结合图9对前述位置虚拟装置的逻辑功能结构进行说明,需要指出的是,图9中时示出的位置虚拟装置的逻辑功能结构仅仅是示例性的,基于图8示出的逻辑功能结构可以有其他的变形,如对其中的部分单元进行进一步拆分,或者将其中的部分单元进行合并。

图9中示出的逻辑功能单元可由相应的计算资源实现。例如,当位置虚拟装置在服务器侧实施用于对应用针对不同位置的响应进行测试时,位置虚拟装置中的各单元可以由服务器中的计算资源实现,如通过处理器在内存中运行存储于存储介质中的可执行指令实现。再例如,当位置虚拟装置在终端侧实施用于在应用中虚拟位置以使用与虚拟位置相关的服务时,位置虚拟装置中的各单元可以由终端中的计算资源实现,如通过处理器在内存中运行存储于存储介质中的可执行指令实现。

在图9中,位置虚拟装置包括:劫持单元21、检测单元22、构造单元23、响应单元24和关闭单元25。

关闭单元25,用于关闭终端的操作系统中原生的位置虚拟服务,由于在终端的原生的位置虚拟服务开启时,终端中的部分应用户会将返回的位置判决为虚拟位置而拒绝进行响应,因此关闭原生的位置虚拟服务以避免这种情况。

劫持单元21,用于向终端的进程注入代码,基于所注入的代码劫持终端的定位服务的调用接口。

实际应用中,注入代码的进程存在至少两种不同的方式,如可以向目标应用的进行注入代码,或者,向终端操作系统中原生的位置服务(简称为定位服务)注入代码,下面对注入代码以劫持调用接口的不同方式进行说明。

方式1)

在一个实施例中,劫持单元21,还用于以系统根用户权限向终端的目标应用的进程中加载代码,并在目标应用的进程中强制执行代码;通过执行目标应用的进程中所注入的代码,劫持定位服务的调用接口。

以终端运行安卓操作系统为例对,向目标应用注入代码即是向目标应用的进程中注入代码,并在系统中注入执行代码所需要的库文件,上述操作可以通过向终端的系统发送Shellcode的方式实现,在获得终端操作系统的root权限之后,劫持单元21注入代码的处理包括以下步骤:

步骤3011,在目标应用的进程中分配内存。

目标进程调用内存空间映射(mmap)函数在进程内存中申请内存空间。

步骤3012,向目标应用的进程中写入代码和参数。

将要注入的库文件的名称字符串和库文件中要调用的函数名称字符串,写入到目标应用的进程的内存空间。

步骤3013,运行目标进程中的代码,由代码调用打开动态链接库(dlopen)函数来载入库文件。

方式2)

在一个实施例中,劫持单元21,还用于向终端的定位服务的进程注入代码,通过执行在定位服务的进程所注入的代码,劫持定位服务的调用接口。

以终端运行安卓操作系统为例对注入代码的处理进行说明,向的定位服务注入代码即是向定位服务的进程中注入代码,并在系统中注入执行代码所需要的库文件,上述操作可以通过向终端的系统发送Shellcode的方式实现,在获得终端操作系统的root权限之后,劫持单元21,注入代码的处理包括以下步骤:

步骤5011,在定位服务的进程中分配内存。

目标进程调用内存空间映射(mmap)函数在进程内存中申请内存空间。

步骤5012,向定位服务的进程中写入代码和参数。

将要注入的库文件的名称字符串和库文件中要调用的函数名称字符串,写入到定位服务的进程的内存空间。

步骤5013,运行定位服务进程中的代码,由代码调用打开动态链接库(dlopen)函数来载入库文件。

检测单元22,用于检测到目标应用使用调用接口获取位置的请求。

对应前述方式1),在一个实施例中,由于目标应用总是通过调用定位服务的调用接口这样的方式来获取终端的位置,因此,当目标应用的进程中执行注入代码时实现检测单元22的功能,代码在执行过程中一旦检测到目标应用的进程针对调用接口的调用,即确定目标应用具有获取终端的位置的请求。

对应前述方式2),在另一个实施例中,由于目标应用总是通过调用系统定位服务的调用接口这样的方式来获取终端的位置,因此,当定位服务的进程中执行注入代码时实现检测单元22的功能,代码在执行过程中一旦检测到目标应用的进程针对调用接口的调用,即确定目标应用具有获取终端的位置的请求。

构造单元23,用于构造虚拟位置,并通过定位服务的调用接口向目标应用返回虚拟位置。

对应前述方式1),在一个实施例中,目标应用的进程中注入的代码在执行过程中实现构造单元23的功能,进行以下操作:将第三方位置虚拟服务替换定位服务,将第三方位置虚拟服务的进程构造的虚拟位置,返回目标应用,由于系统的原生位置虚拟服务没有开启,因此可以使用第三方位置虚拟服务实现对目标应用的“欺骗”。

对应前述方式2),在一个实施例中,目标应用的进程中注入的代码在执行过程中实现构造单元23的功能,进行以下操作:将第三方位置虚拟服务替换定位服务,将第三方位置虚拟服务的进程构造的虚拟位置返回目标应用,由于系统的原生位置虚拟服务没有开启,因此可以使用第三方位置虚拟服务实现对目标应用的“欺骗”。

响应单元24,用于基于目标应用的位置服务策略对虚拟位置进行处理,形成基于虚拟位置的位置服务结果。

一个实施例中,在目标应用的进程中针对虚拟位置执行位置服务策略,通常,位置服务策略是匹配终端的位置,获得与位置关联的服务,如关联的功能和/或信息,并在终端的图形界面中加载功能和/或信息。

综上所述,本发明实施例具有以下有益效果:

1)向目标应用返回虚拟位置的处理是通过劫持调用接口完成,不依赖于终端操作系统的位置功能是否开启无关,因此可以适用于所有的系统(不管系统是否提供位置虚拟服务),通用性强。

2)即使系统的位置虚拟服务关闭,也能够向目标应用返回虚拟位置。

3)对于目标应用来说,对调用接口的劫持是透明的,因此目标应用总是将返回的位置识别为终端的实际的位置,不会出现对返回的虚拟位置拒绝响应的情况。

4)通过对目标应用注入代码进行劫持的方式,可以实现仅对有需要虚拟位置的应用进行位置伪装的效果,对其他的应用不会产生影响。

5)通过对定位服务注入代码进行劫持的方式,可以实现对应用进行全局性的位置虚拟的效果,不需要针对每个使用位置的应用分别注入代码的,处理效率高。

本领域的技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过应用指令相关的硬件来完成,前述的应用可以存储于一计算机可读取存储介质中,该应用在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:移动存储终端、随机存取存储器(RAM,Random Access Memory)、只读存储器(ROM,Read-Only Memory)、磁碟或者光盘等各种可以存储应用代码的介质。

或者,本发明上述集成的单元如果以软件功能模块的形式实现并作为独立的产品销售或使用时,也可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机终端(可以是个人计算机、服务器、或者网络终端等)执行本发明各个实施例所述方法的全部或部分。而前述的存储介质包括:移动存储终端、RAM、ROM、磁碟或者光盘等各种可以存储应用代码的介质。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

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