未越狱的iPhone如何伪造GPS定位信息

作者: RY_zheng | 来源:发表于2016-07-09 06:55 被阅读126085次

最近Pokemon Go 火的不行,结果人家服务器扛不住了,只接受GPS定位信息在澳洲的客户端的登陆请求。今天自己搞了个小Demo,在未越狱的iPhone上把系统的GPS定位信息给改了。

步骤:

Xcode8-beta上新建一个空白工程 -> Edit scheme -> Default Location 选澳洲 -> Device选真机设备,Run

Paste_Image.png

现在,看看自己手机(我是iOS10系统):
1.微信:

Paste_Image.png

2.高德地图:

Paste_Image.png

3.系统相机随便拍个照,查看位置信息

Paste_Image.png

4.查找我的iPhone

Paste_Image.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

GPXGPS eXchange Format,GPS交换格式)是一个XML格式,为应用软件设计的通用GPS数据格式。它可以用来描述路点、轨迹、路程。它用来保存位置,海拔和时间。

Paste_Image.png

Xcode也是用GPX 文件来存储位置信息.所以,我们还可以自定义一个GPX文件,模拟任意的位置信息。

Paste_Image.png

https://blackpixel.com/writing/2013/05/simulating-locations-with-xcode.html
https://github.com/whilethis/location-simulation


大多数App取定位信息的时候,都是调用用系统的Core Location API ,CLLocationManager.

Paste_Image.png

然而在此所有app调用定位服务后,获取到的都是我在FakeGPS工程中选的Default Location的定位信息。Why ? 有人说是bughttp://stackoverflow.com/questions/14285453/xcode-default-simulated-location

Paste_Image.png

各种联想中...

相关文章

网友评论

  • bcba7aaa0363:没有Xcode或者电脑不再身边的时候,用PhantomGPS方便一些
  • 表没食子儿茶素没食子酸酯EGC:楼主你的demo 404了…可以再放一下吗 很想学习一下
  • JennonL:楼主你好。我把gpx文件删除后用真机调试,发现真机也定位在gpx文件里写的地址。不管删除应用还是重启真机,都定位在那个位置。求解。。
    JennonL:@蓝新 我当时试过了,没用,包括恢复模拟器设置之类的。现在解决了,把代码都删掉,重新从SVN CHECK OUT ,就好了。。。谢谢啦
    RY_zheng:schema, allow location simulation, 打勾去掉,再跑一下这个程序
  • 青花瓷的平方:我用ios10.2.1测试不可以啊
  • 生无可恋的程序员:有没有oc写的啊 我Xcode8跑不了
    CocoaJerry:xcode8.2运行没问题,这是swift2.3版本的,打开会让你更新,更新完了没任何错误,直接运行了
  • Solangere:但是这个app并不能脱离xcode工作啊,总不能抱着电脑满街跑吧:persevere:
  • 1ca631060677:404了啊,demo下不了
  • MichaelHuyp:楼主你好 我们公司最近有个需求 是想拦截使用虚拟定位软件的用户 请问可以做到吗。。 如果能够做到,请指教一二 谢谢啦 :blush:
  • 苁唻芣冼腳:可以加你微信吗
  • 流弊的dd:咋恢复到正常的GPS定位?
  • 黄花菜都要凉了:楼主,为啥你的手机是IOS10?
  • RY_zheng:至于说原理,其实我也没弄明白,欢迎大家指导 。个人猜测FakeApp把设备把设备定时接收卫星信号的服务不可用,用Core Location API获取GPS地理信息的时候,如果设备无法接受卫星的GPS信号的时候,会读我们设置的默认的GPS地址定位文件。感觉这是Bug,这明显越过了应用隔离的理念。
    墨鬁:@蓝新 https://github.com/kahopoon/Pokemon-Go-Controller 这个有中文的操作步骤么,新手想学习学习
  • RY_zheng:哈哈,比较忙,刚看到,有个童鞋已经写了,原理是一样的。 https://github.com/kahopoon/Pokemon-Go-Controller
  • yunFeng:多谢分享 虽然可以临时 但是不是一直都可以的 大概一分钟或者分享几次就不行了 楼主可以有深层的修改吗???
    RY_zheng:@yunFeng https://github.com/kahopoon/Pokemon-Go-Controller

  • 大鱼Z:然而这样伪造的定位信息不能随着移动而改变啊。 有升级版么?
    RY_zheng:@大鱼Z https://github.com/kahopoon/Pokemon-Go-Controller

  • 雷宗扬:小白应该如何操作?
    RY_zheng:@雷宗扬 呃,找别的方法
    YaiJay:@雷宗扬 能把他的包发我邮箱一份么?万分感谢。。2647217724@qq.com
  • 8bef82b761ae:这坐标是动态的吗?
    RY_zheng:@梦儿飘 不是
    8bef82b761ae:@阿ya1 自己写,里边没代码
    YaiJay:@梦儿飘 能把他的包发我邮箱一份么?万分感谢。。2647217724@qq.com

本文标题:未越狱的iPhone如何伪造GPS定位信息

本文链接:https://www.haomeiwen.com/subject/pmojrttx.html