虛擬定位對(duì)于自己app調(diào)試會(huì)非常有用。但是很多app開(kāi)發(fā)商可能不希望自己的產(chǎn)品被虛擬定位給干擾了。安卓系統(tǒng)中,在Android7.0后,app開(kāi)發(fā)商必須聲明自己支持虛擬定位后,才能收到虛擬定位數(shù)據(jù)。蘋(píng)果有沒(méi)有做類似的功能呢?
經(jīng)過(guò)測(cè)試后,發(fā)現(xiàn)檢測(cè)虛擬定位也是非常容易的事情。
1. 如何檢測(cè)注入app的修改方式:這種方式涉及到軟件注入和防注入。本人對(duì)此技術(shù)了解不多,不在此展開(kāi)。
2. 如何檢測(cè)xcode虛擬定位:xcode虛擬定位會(huì)使用gpx協(xié)議的文件,僅僅支持坐標(biāo),不支持海拔,海拔返回值是0,并且海拔精度返回值是固定的-1。 所以檢測(cè)方式非常簡(jiǎn)單: 判斷海拔和海拔精度是否是這兩個(gè)固定值就好了。
3. 如何檢測(cè)通過(guò)iAP協(xié)議的外設(shè)定位:蘋(píng)果在外設(shè)定位也做了一定的限制,首先海拔雖然能顯示,但是精度只是在小數(shù)點(diǎn)后一位。另外,經(jīng)緯度的精度也比較有限,大概僅僅是小數(shù)點(diǎn)后6、7位。但真實(shí)坐標(biāo)的海拔精度應(yīng)該是能到小數(shù)點(diǎn)后13-15位。所以檢測(cè)方式也顯得非常簡(jiǎn)單:通過(guò)判斷這幾個(gè)數(shù)值的精度就能確定定位是否來(lái)自外設(shè)了。
另外在git上找到個(gè)現(xiàn)成的檢測(cè)外設(shè)定位的庫(kù):https://gitee.com/coffee__li/iap2-location-checker (本人未測(cè)試,但看了下原理和我分析的是一致的)
/**
雖然第三方app可以修改位置,只是修改了經(jīng)緯度,但是其他數(shù)據(jù)并沒(méi)有修改,比如海拔垂直精度等數(shù)據(jù),我們可以從這些參數(shù)入手
NSLog(@"定位信息:%lf,%lf,%lf,%lf,%lf,%lf,%lf",location.coordinate.latitude,location.coordinate.longitude,location.horizontalAccuracy,location.verticalAccuracy,location.altitude,location.course,location.courseAccuracy,location.speed);
Xcode:22.281960,114.163171,5.000000,-1.000000,0.000000,-1.000000,-1.000000,-1.000000
愛(ài)思助手:30.879535,120.934785,5.000000,-1.000000,0.000000,-1.000000,-1.000000,-1.000000
*/
NSLog(@"定位信息:%lf,%lf,%lf,%lf,%lf,%lf,%lf",location.coordinate.latitude,location.coordinate.longitude,location.horizontalAccuracy,location.verticalAccuracy,location.altitude,location.course,location.speed);
if (-1.0 == location.verticalAccuracy&&0.0 == location.altitude) {
NSLog(@"虛擬定位");
}
參考文章
蘋(píng)果虛擬定位技術(shù)原理和檢測(cè)
IOS 越獄插件-虛擬定位、WIFI修改
ios開(kāi)發(fā)上班打卡防虛擬定位篡改
iOS 外接設(shè)備虛擬GPS心得
如何設(shè)置iOS虛擬定位
未越獄iPhone修改定位/iPhone虛擬定位/iPhone模擬定位,蘋(píng)果MFi外設(shè)
iOS判斷虛擬定位
iOS 外接設(shè)備虛擬GPS以及防止心得