iOS虚拟定位技术探究( 二 )


- (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,}return ret;}NSString *ret = getMethodIMPInfo(@"CLLocationManager", @"delegate");电脑端软件使用电脑端软件虚拟定位时 , app 获取定位信息与正常获取定位信息有差异 。
正常获取定位的时代理方法会被执行 3 次:
2020-09-25 14:37:25.587317+0800 iOSApp[990:275020] 纬度为:22.996662, 经度为:113.3284482020-09-25 14:38:00.158517+0800 iOSApp[990:275020] 高度为:23.0319122020-09-25 14:38:04.869490+0800 iOSApp[990:275020] 水平精确度:65.000000, 垂直精确度:10.0000002020-09-25 14:38:22.238887+0800 iOSApp[990:275020] 纬度为:22.996662, 经度为:113.3284482020-09-25 14:38:23.784470+0800 iOSApp[990:275020] 高度为:23.0319122020-09-25 14:38:25.844754+0800 iOSApp[990:275020] 水平精确度:65.000000, 垂直精确度:10.0000002020-09-25 14:38:26.841710+0800 iOSApp[990:275020] 纬度为:22.996667, 经度为:113.3284472020-09-25 14:38:26.842180+0800 iOSApp[990:275020] 高度为:23.0476932020-09-25 14:38:26.842767+0800 iOSApp[990:275020] 水平精确度:65.000000, 垂直精确度:10.000000使用xcode虚拟定位的 location 代理方法仅执行一次:
2020-09-25 07:41:57.466217+0100 iOSApp[1005:276293] 纬度为:51.509980, 经度为:-0.1337002020-09-25 07:41:57.466404+0100 iOSApp[1005:276293] 高度为:0.0000002020-09-25 07:41:57.466511+0100 iOSApp[1005:276293] 水平精确度:5.000000, 垂直精确度:-1.000000多次实验后 , 发现以下特征:正常获取定位信息时 ,locationManager 代理方法会被回调 3 次 , 而虚拟定位 , 代理方法仅会被回调 1 次;正常定位可以获取海拔高度 , 水平精确度 , 垂直精确度 , 虚拟定位时 , 无法获取海拔高度 , 水平精确度 , 垂直精确度也是固定的错误值 。 以上两点可以作为检查依据 。
闪电口外设没有购买位移精灵 , 没有做测试 , 不过在 gayhub 上发现一份检查 iap2 外设定位的代码 iap2-location-checker
其主要思路也是检查定位数据的精度 。 还有一种思路是检查外设类型 , 获取外设的硬件信息 , 如 mac , manufacturer , brand 之类的信息 , 不过在高版本 iOS 中 , 需要额外申请权限 , 这里就没有实践了 。
参考

  • 苹果虚拟定位技术原理和检测
  • iOS上虚拟定位检测的探究
  • 免越狱虚拟定位外挂的调试小记与检测方案
Author: GeneBlue
【iOS虚拟定位技术探究】Blog:


推荐阅读