目前我正在开发一个应用程序,其中地理位置功能是其最重要的功能.实际上我们非常担心会嘲笑GPS值.我已经阅读了很多关于在iOS和
Android上模拟位置的评论,其中大多数都倾向于解释一个未加工的iOS设备无法模拟位置,但事实是我已经创建了另一个项目,用GPX文件来模拟在该项目上的位置,当执行时,整个系统认为我在另一个城市.所有我的locationManager回调都告诉我,我正在使用正确的时间戳进行模拟的位置,伪造整个信息,就像它是真实的一样.这完全打破了我们的应用程序的目的,因为用户可以假装在哪里.
有没有办法检测这种行为并阻止它?我假设一个封闭的目标,攻击者必须是开发人员才能使这个漏洞利用起来,但是唉,它仍然存在
解决方法
问题:有没有办法检测到这种行为并阻止它?
实际上有两个独立的问题:(1)如何检测,以及(2)如何预防?
(1)的答案:模拟的位置行为与回调locationManager的真实位置行为完全不同:didUpdateLocations:
[模拟位置]回调几乎在调用startUpdatingLocation后立即返回,然后每隔一秒重复调用一次.如果我们选择固定位置,位置也是一样的.这是一个例子:
location: <+51.50998000,-0.13370000> +/- 5.00m (speed -1.00 mps / course -1.00) @ 30.03.15 14:12:48 Час: Індокитай location: <+51.50998000,-0.13370000> +/- 5.00m (speed -1.00 mps / course -1.00) @ 30.03.15 14:12:49 Час: Індокитай location: <+51.50998000,-0.13370000> +/- 5.00m (speed -1.00 mps / course -1.00) @ 30.03.15 14:12:50 Час: Індокитай location: <+51.50998000,-0.13370000> +/- 5.00m (speed -1.00 mps / course -1.00) @ 30.03.15 14:12:51 Час: Індокитай location: <+51.50998000,-0.13370000> +/- 5.00m (speed -1.00 mps / course -1.00) @ 30.03.15 14:12:52 Час: Індокитай location: <+51.50998000,-0.13370000> +/- 5.00m (speed -1.00 mps / course -1.00) @ 30.03.15 14:12:53 Час: Індокитай location: <+51.50998000,-0.13370000> +/- 5.00m (speed -1.00 mps / course -1.00) @ 30.03.15 14:12:54 Час: Індокитай
[真实位置]需要几秒钟(如果是第一次运行)回叫然后随机重新呼叫.此外,即使您根本不移动,您也可以看到这些位置之间的重大变化.这是一个例子:
location: <+10.77219361,+106.70597441> +/- 67.39m (speed -1.00 mps / course -1.00) @ 30.03.15 14:16:26 Час: Індокитай location: <+10.77213011,+106.70591088> +/- 65.00m (speed -1.00 mps / course -1.00) @ 30.03.15 14:16:31 Час: Індокитай location: <+10.77219507,+106.70587790> +/- 65.00m (speed -1.00 mps / course -1.00) @ 30.03.15 14:16:38 Час: Індокитай location: <+10.77214753,+106.70587741> +/- 65.00m (speed -1.00 mps / course -1.00) @ 30.03.15 14:16:49 Час: Індокитай
回答(2):为了防止,我现在只是工作,我们需要查找至少3个位置来决定它的模拟或真实位置.
提醒一下,这只是检测模拟位置的临时解决方案.将来,Apple可能会改变这种行为.
顺便说一下,我还试图在方案中禁止在xCode上模拟位置:
不幸的是,它仍然允许模拟位置.
还有一些你可能知道的问题here.希望它有所帮助.