如何在安卓设备中检测虚假GPS坐标?

11

有没有一种绝对可靠的方法来检测用户是否伪造了他/她的GPS位置?

这种技术应该适用于没有蜂窝连接硬件的Android设备,即仅Wi-Fi设备。


2
如何伪造GPS位置? - Oliver Charlesworth
1
例如使用虚假 GPS 应用程序,可以从 Play 商店下载。 - Analizer
我认为你的意思是一些应用程序利用手机上的“允许模拟位置”功能,向所有访问GPS位置的其他应用程序提供虚假的GPS位置? - Neo
2个回答

20

如果这个代码适用于您,请尝试此代码

// returns true if mock location enabled, false if not enabled.
if (Settings.Secure.getString(getContentResolver(),
   Settings.Secure.ALLOW_MOCK_LOCATION).equals("0")) 
   return false; 
   else return true;

干杯!


1
任何对此话题感兴趣的人可以参考以下链接获取更多讨论和信息:http://security.stackexchange.com/questions/65181/how-do-location-based-apps-avoid-getting-cheated-by-emulated-gps - babycakes
1
在 Xamarin.Android 中有类似以下的代码:public bool AllowedMockLocation() { if (Settings.Secure.GetString(Android.App.Application.Context.ContentResolver, Settings.Secure.AllowMockLocation).Equals("0")) return false; else return true; } - Alessandro Caliaro
请注意,ALLOW_MOCK_LOCATION已在API 23中被弃用:https://developer.android.com/reference/android/provider/Settings.Secure.html#ALLOW_MOCK_LOCATION - EJK

2
我认为你应该让虚假GPS坐标的概念更清晰,因为任何坐标都可能被认为是真实的,无论用户是否在那里。
因此,您可以采取两种方式:
1.从其他来源获取有关位置的任何信息,以便与GPS坐标进行比较。
2.分析您拥有的数据(GPS坐标)以查找差异。
至于解决方案1,您可以例如使用GSM信号最近的塔的CID(小区识别码)和LAC(位置区域码)来找出用户是否在某个区域。这将需要互联网连接并向远程服务请求LAC到GPS坐标的转换。
至于解决方案2,您可以检查不符合用户速度或加速度的异常坐标变化,例如在几秒钟内改变数英里可能会提醒您有关欺骗坐标的警告。

谢谢,我也在考虑类似的方案,但是CELL ID部分只适用于具有蜂窝连接的设备。这就是我在问题详情中提到的。 - Dojo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接