通過蘋果 MFi 認證廠商會獲得 MFI Accessory Interface Specification 文檔 ,虚拟下载虚拟想其中描述了 USB 與外設之
Author: GeneBlueBlog: https://geneblue.github.io/什麽是位置王破万没虛擬定位簡而言之,利用軟硬件更改手機係統的定位定位定位數據,從而讓目標 app 獲取錯誤的解版精灵定位信息虛擬定位常用場景
上下班打卡代購朋友圈裝逼打車軟件司機端搶單社交類軟件,附近人,破解把妹 ,版万釣凱子凡是虚拟下载虚拟想和位置相關的應用 ,均有一定的位置王破万没應用場景,盡情發揮群眾的定位定位智慧虛擬定位原理經過調研 iOS 虛擬定位大概有三類技術路線:動態庫注入
iOS 越獄後 ,安裝使用具備虛擬定位功能的解版精灵越獄插件在上帝模式下,越獄插件可以肆意劫持係統函數或者在非越獄環境下 ,破解砸殼目標 app ipa 文件,版万重打包注入動態庫這兩種方式本質是虚拟下载虚拟想一致的 ,都是位置王破万没為了 app 進程運行時 ,注入運行動態庫。定位定位
劫持 CoreLocation 中以下常用的獲取定位信息的函數 ,即可篡改正常的定位數據 :CLLocationManager->delegate() CLLocationManager->initialize
() CLLocationManager->setDelegate() CLLocationManager->startMonitoringSignificantLocationChanges() CLLocationManager-
>startUpdatingHeading() CLLocationManager->startUpdatingLocation() CLLocationManager->stopMonitoringSignificantLocationChanges
() CLLocationManager->stopUpdatingHeading() CLLocationManager->stopUpdatingLocation() 電腦端軟件做過 iOS 開發的同學 ,可以觀察一下 xcode 上有一個
Simulate location 的調試功能 ,這是方便 app 開發過程中測試定位代碼 。
我們可以使用這個功能來模擬定位不過使用這種方式需要打開電腦 ,開啟 xcode,然後再編寫 GPX 文件 ,對於普通用戶 ,這個門檻太高了國內的一些 iOS 助手類軟件,將 Simulate location。
功能逆向出來 ,集成到自己的軟件上,比如下麵這個 iTools 軟件 :
閃電口外設典型產品如位移精靈 ,不但具備虛擬定位能力 ,還具備充電寶功能,多種用途 ,很方便啊 ,有木有。
那這個東西是啥原理呢 ?解釋起來很簡單,這也是蘋果提供的功能,不是啥黑科技通過蘋果 MFi(Made For iOS) 認證廠商會獲得 MFI Accessory Interface Specification。
文檔,其中描述了 USB 與外設之間的通訊協議 iAP2,該協議具備許多豐富的功能:
可以看到其中就有 location 定位功能 ,按照協議格式 ,發送對應位置數據,就可以更改定位信息電腦端 xcode 是不是也是使用 iAP2 協議呢 ?xcode 實現文檔沒有公開過,所以這個是未知的檢測方法
知道了 ,這三種虛擬定位方式 ,我們隻要找到正常定位與虛擬定位之間的差異就可以做到檢測了動態庫注入有幾個明顯特征 :越獄環境 ,安裝越獄插件 ,其動態庫會被注入到目標進程非越獄環境下 ,砸殼目標ipa,注入動態庫劫持(HOOK)定位函數
越獄環境可以檢查設備是否越獄 ,非越獄可以檢查 app 是否被重打包如此 ,檢查定位函數是否被劫持比較關鍵函數 HOOK 涉及 OC 語言的動態特性,主要利用了 method_exchangeImplementations()。
將函數實現替換掉被 HOOK 的函數 ,其 IMP 實現會被劫持到注入的動態庫中,所以我們檢查函數 IMP 實現是否是原始 module 即可判斷是否被 HOOK 了- (NSString *) getMethodIMPInfo:( 。
NSString *) className, sel:(NSString *)sel { NSString *ret; Dl_info info; IMP imp = class_getMethodImplementation(objc_getClass([className UTF8String]), sel_registerName([sel UTF8String]));
if ( dladdr(imp, &info)) { ret = [NSString stringWithFormat:@"%@-%@-fname:%s-sname:%s-fbase:%p-saddr:%p"
, className, sel, info.dli_fname, info.dli_sname, info.dli_fbase, info.dli_saddr]; }
return ret; } NSString *ret = getMethodIMPInfo(@"CLLocationManager", @"delegate"); 電腦端軟件使用電腦端軟件虛擬定位時,app 獲取定位信息與正常獲取定位信息有差異。
正常獲取定位的時代理方法會被執行 3 次 :2020-09-25 14:37:25.587317+0800iOSApp[990:275020] 緯度為 :22.996662, 經度為 :113.328448 2020
-09-25 14:38:00.158517+0800iOSApp[990:275020] 高度為 :23.031912 2020-09-25 14:38:04.869490+0800iOSApp[990:275020]
水平精確度:65.000000, 垂直精確度 :10.000000 2020-09-25 14:38:22.238887+0800iOSApp[990:275020] 緯度為:22.996662, 經度為 :113
.328448 2020-09-25 14:38:23.784470+0800iOSApp[990:275020] 高度為:23.031912 2020-09-25 14:38:25.844754+0800
iOSApp[990:275020] 水平精確度:65.000000, 垂直精確度:10.000000 2020-09-25 14:38:26.841710+0800iOSApp[990:275020]
緯度為:22.996667, 經度為 :113.328447 2020-09-25 14:38:26.842180+0800iOSApp[990:275020] 高度為:23.047693 2020-09-25
14:38:26.842767+0800iOSApp[990:275020] 水平精確度:65.000000, 垂直精確度 :10.000000使用xcode虛擬定位的 location 代理方法僅執行一次:
2020-09-25 07:41:57.466217+0100iOSApp[1005:276293] 緯度為:51.509980, 經度為 :-0.133700 2020-09-25 07:41:57.466404+0100
iOSApp[1005:276293] 高度為:0.000000 2020-09-25 07:41:57.466511+0100iOSApp[1005:276293] 水平精確度:5.000000, 垂直精確度:
-1.000000多次實驗後,發現以下特征:正常獲取定位信息時, locationManager 代理方法會被回調 3 次,而虛擬定位 ,代理方法僅會被回調 1 次;正常定位可以獲取海拔高度,水平精確度,垂直精確度 ,虛擬定位時,無法獲取海拔高度 ,水平精確度 ,垂直精確度也是固定的錯誤值 。
以上兩點可以作為檢查依據閃電口外設沒有購買位移精靈,沒有做測試 ,不過在 gayhub 上發現一份檢查 iap2 外設定位的代碼 iap2-location-checker其主要思路也是檢查定位數據的精度。
還有一種思路是檢查外設類型,獲取外設的硬件信息,如 mac ,manufacturer,brand 之類的信息,不過在高版本 iOS 中,需要額外申請權限 ,這裏就沒有實踐了參考蘋果虛擬定位技術原理和檢測iOS上虛擬定位檢測的探究
免越獄虛擬定位外掛的調試小記與檢測方案Author: GeneBlueBlog: https://geneblue.github.io/
免責聲明 :本站所有信息均搜集自互聯網 ,並不代表本站觀點,本站不對其真實合法性負責 。如有信息侵犯了您的權益,請告知 ,本站將立刻處理 。聯係QQ:1640731186