Iphone iOS专用API,用于在应用程序被禁用后跟踪后台位置(如查找我的朋友)
我正试图通过Theos在Iphone iOS专用API,用于在应用程序被禁用后跟踪后台位置(如查找我的朋友),iphone,ios,core-location,Iphone,Ios,Core Location,我正试图通过Theos在查找我的朋友中伪造位置更新 到目前为止我拥有的: 当应用程序处于前台时,我能够伪造更新消息(使用Theos/Logos钩住FMFLocation类) 缺少什么: 当应用程序处于后台或死机时,当我的朋友请求我的位置时,它仍会将我的位置发送到服务器。此后台更新不会调用常规更新方法,因此我的挂钩不起作用。此外,即使应用程序被终止,它也可以响应来自网络的位置请求。我认为苹果不允许在常规应用程序中出现这种行为 我认为这只能通过一些私有API来实现。有人能给我指出正确的方向来找出它在
查找我的朋友中伪造位置更新
到目前为止我拥有的:
当应用程序处于前台时,我能够伪造更新消息(使用Theos/Logos
钩住FMFLocation
类)
缺少什么:
当应用程序处于后台或死机时,当我的朋友请求我的位置时,它仍会将我的位置发送到服务器。此后台更新不会调用常规更新方法,因此我的挂钩不起作用。此外,即使应用程序被终止,它也可以响应来自网络的位置请求。我认为苹果不允许在常规应用程序中出现这种行为
我认为这只能通过一些私有API来实现。有人能给我指出正确的方向来找出它在后台使用的API/方法吗?您可能需要检查CLLocationMananger
()中的-startMonitoringSignificantLocationChanges
方法
正如文件所述:
此方法异步启动位置事件的传递,
打过电话后马上回来。位置事件被传递到
代理的位置管理器:didUpdateLocations:方法。第一
要传递的事件通常是最近缓存的位置
事件(如果有),但在某些情况下可能是较新的事件。
获取当前位置修复可能需要额外几秒钟,
因此,请务必检查您的数据库中位置事件的时间戳
委托方法
返回当前位置修复后,接收器生成更新
仅当用户位置发生重大更改时才发生事件
检测。例如,当设备启动时,它可能会生成一个新事件
与不同的细胞塔关联。它不依赖于
用于生成事件的distanceFilter属性中的值。使命感
此方法连续多次不会自动产生结果
在正在生成的新事件中。使命感
但是,停止监视之间的重要位置更改
使新的初始事件在下次调用时发送
方法
如果您启动此服务,并且您的应用程序随后
终止后,系统会自动将应用程序重新启动到
新事件到达时的背景。在这种情况下,选项
传递给locationManager:didUpdateLocations:method的字典
您的应用程序委托包含密钥
UIApplicationLaunchActionSlocationKey,指示您的
应用程序因位置事件而启动。重新启动后,
您仍然必须配置位置管理器对象并调用此
方法继续接收位置事件。重新启动时
位置服务,当前事件将传递给您的代表
马上。此外,您所在位置的location属性
使用最近的位置对象填充管理器对象
在开始定位服务之前
除了实现
locationManager:didUpdateLocations:方法,它还应该实现
locationManager:didFailWithError:响应潜在风险的方法
错误
所以基本上你需要:
- 在
Info.plist
文件中将location
键设置为后台模式
- 启动
CLLocationMananger
- 调用
startMonitoringSignificantLocationChanges
- 在您的
AppDelegate
上,当用户移动大约500米时,您将收到信息字典中的一个位置,并用uiapplicationaunchoptionslocationkey
键入
- 在该方法中,您可以更新服务器上的位置
我想出来了!是
aosnotifyd
在后台发送位置
我最终做了这样的事:
#import <CoreLocation/CoreLocation.h>
%hook AOSFindBaseServiceProvider
-(void)sendCurrentLocation:(id)fp8 isFinished:(BOOL)fp12 forCmd:(id)fp16 withReason:(int)fp20 andAccuracyChange:(double)fp24{
//Mess with (CLLocation *)fp8 here
%orig(c,fp12,fp16,fp20,fp24);
}
%end
#导入
%钩子AOSFindBaseServiceProvider
-(void)sendCurrentLocation:(id)fp8已完成:(BOOL)fp12 forCmd:(id)fp16,原因:(int)fp20和精度更改:(double)fp24{
//在这里与(CLLocation*)fp8发生冲突
%原始数据(c、fp12、fp16、fp20、fp24);
}
%结束
实际上查找我的朋友
可以根据网络请求发送位置信息,即使应用程序被关闭且未检测到任何移动,这显然不是由开始监视重要位置更改触发的。你有没有类似的示例项目?@Maulik我有一篇关于和github repo的博客文章: