iOS 虚拟位置监测

虚拟定位原理


经过调研 iOS 虚拟定位大概有三类技术路线:xcode 模拟定位,越狱手机动态库注入以及通过外设与设备的MFI通讯协议写入位置

1.xcode修改位置

开启 xcode,新建一个项目, 然后再编写 GPX 文件。

image1.png

监测方法

xcode虚拟定位会使用gpx协议的文件,仅仅支持坐标,不支持海拔,海拔返回值是0,并且海拔垂直精度返回值是固定的-1。 所以检测方式非常简单: 判断海拔和海拔精度是否是这两个固定值就好了。

注:对于普通用户,国内的一些 iOS 助手类软件,将 Simulate location 功能逆向出来,集成到自己的软件上,比如下面这个爱思助手软件,可以直接修改手机位置(前提都是手机要连到电脑上)

image2.png

2.动态库注入

iOS 越狱后,安装使用具备虚拟定位功能的越狱插件。在上帝模式下,越狱插件可以肆意劫持系统函数。
GPS定位管家,能够管理各个iOS应用的GPS位置,(免费版仅能设置一个应用的定位)(越狱版有很多修改定位的插件,因越狱测试机14.3,有很多插件用不了)
劫持 CoreLocation 中以下常用的获取定位信息的函数,即可篡改正常的定位数据:

CLLocationManager->delegate()CLLocationManager->initialize()CLLocationManager->setDelegate()CLLocationManager->startMonitoringSignificantLocationChanges()CLLocationManager->startUpdatingHeading()CLLocationManager->startUpdatingLocation()CLLocationManager->stopMonitoringSignificantLocationChanges()CLLocationManager->stopUpdatingHeading()CLLocationManager->stopUpdatingLocation()

以下是蜂友的试验:

1.png

2.png

3.png

监测方法

经测试,针对于越狱手机GPS 定位大师的修改定位,因可以编辑经纬度的数值和海拔,所以通过经纬度的精度以及海拔是否是0无法断定是否是虚拟位置,因此只能通过判断机子是否越狱来判定风险。

3.通过外设

典型产品如位移精灵,不但具备虚拟定位能力,还具备充电宝功能。那这个东西是啥原理呢?
解释起来很简单,这也是苹果提供的功能,不是啥黑科技。通过苹果 MFi(Made For iOS) 认证厂商会获得 MFI Accessory Interface Specification 文档,其中描述了 USB 与外设之间的通讯协议 iAP2,该协议具备许多丰富的功能:

4.png

可以看到其中就有 location 定位功能,按照协议格式,发送对应位置数据,就可以更改定位信息。

监测方法

经测试,通过外设选定位置,手机上所有的基于LBS定位的APP位置已经改变到您指定的位置。但是也是同样只改变了经纬度,海拔通过定位系统获取的值为0,并且海拔垂直精度返回值是固定的-1。和xcode 模拟修改位置类似,都是将本机的整个位置都改变,这两者与越狱手机改变位置不同,越狱手机是对特定app 劫持系统定位函数,篡改函数获取到的实际位置,达到虚假定位的目的。

针对以上xcode 模拟定位以及外设定位,编写了一个监测判断虚拟位置的Demo,原理就是通过 经纬度的精度以及海拔来判断(LocationDataSourceMFIDevice 表示虚假定位 、 LocationDataSourceRealWorld 表示真实定位)

1.真实定位

5.png

2.虚假定位

6.png

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享