最近发现很火的一款微信的XX助手,能够实现在微信内部的地图中,选中任意一个位置把自己的坐标更改过去,觉得很神奇有没有,
今天我就带大家从头来实现这一个功能,并且可以应用在任意的APP中.
知己知彼方能百战百胜,首先我们要了解一下,APP是如何获取到位置信息的
要实现地图、导航功能,往往需要先熟悉定位功能,在iOS中通过Core Location框架进行定位操作。Core Location自身可以单独使用,和地图开发框架MapKit完全是独立的,但是往往地图开发要配合定位框架使用。在Core Location中主要包含了定位、地理编码(包括反编码)功能。
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations {
CLLocation *newLocation = locations[0];
CLLocationCoordinate2D coordinate = newLocation.coordinate;
NSLog(@"旧的经度:%f,旧的纬度:%f",oldCoordinate.longitude,oldCoordinate.latitude);
}
大概是这么实现的.
引用CoreLocation框架后,开始获取位置后,便会通过locationManager这个代理来回调,并通过
CLLocationCoordinate2D coordinate = newLocation.coordinate.
这句来获取到位置信息.
明白原理就简单了,接下来我们只需要在app内部hook到CLLocation的coordinate,并返回我们想要的地理位置就可以啦
代码其实很简单,主要是我们能明白实现原理.
明白了实现原理,剩下的工作就比较简单了,源代码如下:
%hook CLLocation
-(CLLocationCoordinate2D) coordinate{
CLLocationCoordinate2D oldCoordinate = %orig;
oldCoordinate.latitude = 40.1818750000;//新的latitude
oldCoordinate.longitude = 116.5896720000;//新的longitude
return oldCoordinate;
}
%end
打包注入任意一个app中,获取以下位置信息看看吧!
小彩蛋时间.
微信XX助手,号称全国任意定位加粉功能的免越狱实现过程
- 添加一条UITableCell
- 引用地图SDK
- 获取用户点击坐标的位置,保存
- 读取到模拟的位置并在coordinate返回.
- 重签名,打包
文章的最后引用张总一句话:
我重签名,重打包,做微信助手,但我知道,我妈死了 ------微信助手们
本文同步发布到我的微信公众平台,不得转载.
后续继续分享干货,欢迎关注我的公众平台