最近Pokemon Go 火的不行,结果人家服务器扛不住了,只接受GPS定位信息在澳洲的客户端的登陆请求。今天自己搞了个小Demo,在未越狱的iPhone上把系统的GPS定位信息给改了。
步骤:
在Xcode8-beta
上新建一个空白工程 -> Edit scheme
-> Default Location
选澳洲 -> Device选真机设备,Run
![](https://i-blog.csdnimg.cn/blog_migrate/6fc285c713b55eb2a58f998b22a67bd8.webp?x-image-process=image/format,png)
现在,看看自己手机(我是iOS10系统):
1.微信:
![](https://i-blog.csdnimg.cn/blog_migrate/b41ecb7d4ddb1af0a2a1ef1ebe67f713.webp?x-image-process=image/format,png)
2.高德地图:
![](https://i-blog.csdnimg.cn/blog_migrate/2ae4695899c6aa7186f48f2ab0cc979e.webp?x-image-process=image/format,png)
3.系统相机随便拍个照,查看位置信息
![](https://i-blog.csdnimg.cn/blog_migrate/499074c9c2fa980cebcf232250749632.webp?x-image-process=image/format,png)
4.查找我的iPhone
![](https://i-blog.csdnimg.cn/blog_migrate/7e949dd60b820b50aaca71f77922b174.webp?x-image-process=image/format,png)
现在美中不足是,即使应用删除,GPS定位信息还是假的,需要删除应用重启手机,才能恢复正常GPS。Demo我放在了Github上https://github.com/sueLan/RYFakeGPS。
用免费开发者账号也可以在真机上调试http://www.jianshu.com/p/540e722b8eff
早有Fake GPS这种提供虚拟定位信息的应用。劳资以前没有研究过.也有人逆向微博,在运行时修改定位信. 但这些方法的前提是你有个越狱设备。Quora上早也有讨论过,如何未越狱设备上如何修改GPS定位信息.各路神招:重载CLLocationManager方法、安装GPS中继器假冒GPS信号、设备代理、iOS模拟器Debug模式的Location模拟......
GPS定位原理
我们先来看一个博客,iOS定位原理.我抄了一段:
GPS定位原理:
这个是美国军方搞的, 军民两用, 但仍然完全受军方控制(比如可以随时随地设置某个地区收到的信号与否及其精度), 其原理就是:利用天上的卫星(共24颗)不断地广播信号, 地面的GPS接收设备收到信号后, 通过分析多个卫星信号,就可以计算出地球坐标, GPS保证全球任何一个地方(98%)都可以同时收到至少4个卫星的信号, 从而可以准确确定您的经纬度以及海拔位置. GPS定位精度可达10米以内, 不过这是美国军方控制的, 战争时期可能变的不稳定或者误报. (不过我国也有自己的系统, 北斗系统, 目前已经亚洲的覆盖, 还在推广中)
卫星定位必须要能收到卫星信号,因为卫星信号都是很微弱的,虽然iPhone 4开始提升了GPS硬件的灵敏度,但仍然需要在窗户旁,或者户外使用,才能确保卫星信号的强度和稳定性。
与基站定位和WIFI定位相比,GPS耗电最大,速度最慢,但是精度最高。
而iPhone的GPS与纯粹的GPS定位不同, 称为A-GPS, 即辅助GPS.(比GPS更优,不过GPS也分芯片和性能的,不是说所有的AGPS比所有的GPS都好)
因为GPS定位中最耗时、最耗电的就是获取当前天上的卫星信息,哪些卫星可见、在什么位置、时钟是多少等等,这个过程可能花费数十秒甚至几分钟,而AGPS就是利用网络,首先将基站定位或者WIFI定位获得的大概位置发到远程服务器,有服务器进行查询和计算,得出这个位置下当前卫星信息,反馈给iOS设备,iOS设备就可以直接用这些信息来接受卫星信号,不用自己去扫描分析了。这样可以极大提高定位速度,将初次定位时间缩短到1~2秒完成。
A-GPS优点是定位快,缺点是需要网络,但也只是在初次定位时需要网络,因为一旦卫星信息返回,在有限时间和范围内,这些信息无须改变,之后的GPS定位就不再需要联网,都是直接用这些卫星参数接受信息了。
在iOS设备上,上述定位方式会综合应用,一般地,可能先按照最快的“无网基站定位”返回一个位置,当有网络连接时,在用有网基站定位更新位置,然后,利用AGPS上网查询卫星星图,最后,在能收到GPS信号的情况下,转为使用GPS定位。
根据当前信号情况和网络环境,iOS可能在上述方式之间反复迭代,不一定一致特定步骤或者方式,而且随着iOS升级,定位顺序和规则可能改变。
GPX FILES
GPX(GPS eXchange Format,GPS交换格式)是一个XML格式,为应用软件设计的通用GPS数据格式。它可以用来描述路点、轨迹、路程。它用来保存位置,海拔和时间。
![](https://i-blog.csdnimg.cn/blog_migrate/36880d24c69791c9b129cfd37712c3b6.webp?x-image-process=image/format,png)
Xcode也是用GPX 文件来存储位置信息.所以,我们还可以自定义一个GPX文件,模拟任意的位置信息。
![](https://i-blog.csdnimg.cn/blog_migrate/2338cc7ac80aae662f396c07c7532c18.webp?x-image-process=image/format,png)
https://blackpixel.com/writing/2013/05/simulating-locations-with-xcode.html
https://github.com/whilethis/location-simulation
大多数App取定位信息的时候,都是调用用系统的Core Location API ,CLLocationManager.
![](https://i-blog.csdnimg.cn/blog_migrate/3275f75b158d1c4a77eb768da7fc27a1.webp?x-image-process=image/format,png)
然而在此所有app调用定位服务后,获取到的都是我在FakeGPS工程中选的Default Location的定位信息。Why ? 有人说是bughttp://stackoverflow.com/questions/14285453/xcode-default-simulated-location
![](https://i-blog.csdnimg.cn/blog_migrate/201e9d43c1fd57abd69025cfdd9fa342.webp?x-image-process=image/format,png)
各种联想中...