Suchen Sie nach dem besten Weg, um GPS-Spoofing unter Android zu verhindern / zu erkennen. Irgendwelche Vorschläge, wie dies erreicht wird und was getan werden kann, um es zu stoppen? Ich vermute, der Benutzer muss Scheinstandorte aktivieren, um GPS zu fälschen. Wenn dies getan wird, kann er dann GPS fälschen?
Ich denke, ich müsste nur erkennen, ob Mock Locations aktiviert sind. Irgendwelche anderen Vorschläge?
Antworten:
Ich habe einige Nachforschungen angestellt und meine Ergebnisse hier geteilt. Dies kann für andere nützlich sein.
Zunächst können wir überprüfen, ob die Option MockSetting aktiviert ist
Zweitens können wir überprüfen, ob andere Apps im Gerät vorhanden sind, die verwendet werden
android.permission.ACCESS_MOCK_LOCATION
(Location Spoofing Apps).Wenn beide oben genannten Methoden, erste und zweite, zutreffen, besteht eine gute Chance, dass der Standort gefälscht oder gefälscht wird.
Jetzt kann Spoofing mithilfe der API von Location Manager vermieden werden.
Wir können den Testanbieter entfernen, bevor wir die Standortaktualisierungen von beiden Anbietern (Netzwerk und GPS) anfordern.
Ich habe gesehen, dass removeTestProvider (~) sehr gut über Jelly Bean und ab Version funktioniert. Diese API schien bis zum Ice Cream Sandwich unzuverlässig zu sein.
quelle
android.permission.ACCESS_MOCK_LOCATION
Erlaubnis fürremoveTestProvider
zu arbeiten, die ich denke , der größte Nachteil ist.isMockSettingsON()
,Location.isFromMockProvider()
undareThereMockPermissionApps()
mit einer schwarzen Liste der Anwendungen. Es gibt viele vorinstallierte System-Apps mitACCESS_MOCK_LOCATION
Berechtigung, beispielsweise auf HTC- und Samsung-Geräten. Eine Whitelist aller legitimen Apps wäre besser, aber eine schwarze Liste der beliebtesten Location-Spoofing-Apps hat in meinem Fall gut funktioniert. Außerdem habe ich überprüft, ob das Gerät gerootet ist.Seit API 18 verfügt das Objekt Location über die Methode .isFromMockProvider (), sodass Sie gefälschte Speicherorte herausfiltern können.
Wenn Sie Versionen vor 18 unterstützen möchten, können Sie Folgendes verwenden:
quelle
isMock = !Settings.Secure.getString(context.getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION).equals("0");
Es scheint, dass der einzige Weg, dies zu tun, darin besteht, Location Spoofing zu verhindern, das MockLocations verhindert. Der Nachteil ist, dass einige Benutzer Bluetooth-GPS-Geräte verwenden, um ein besseres Signal zu erhalten. Sie können die App nicht verwenden, da sie die Scheinpositionen verwenden müssen.
Dazu habe ich Folgendes getan:
quelle
return !x
anstelle von verwendenif(x) return false; else return true
.Stolperte ein paar Jahre später über diesen Thread. 2016 werden die meisten Android-Geräte eine API-Stufe> = 18 haben und sollten sich daher auf Location.isFromMockProvider () verlassen, wie von Fernando hervorgehoben .
Ich habe ausgiebig mit Fake / Mock-Standorten auf verschiedenen Android-Geräten und Distributionen experimentiert. Leider ist .isFromMockProvider () nicht 100% zuverlässig. Hin und wieder wird ein gefälschter Ort nicht als Schein gekennzeichnet . Dies scheint auf eine fehlerhafte interne Fusionslogik in der Google Location API zurückzuführen zu sein.
Ich habe einen ausführlichen Blog-Beitrag darüber geschrieben , wenn Sie mehr erfahren möchten. Zusammenfassend lässt sich sagen, dass Sie, wenn Sie Standortaktualisierungen über die Standort-API abonnieren, eine gefälschte GPS-App einschalten und das Ergebnis jeder Location.toString () auf der Konsole drucken , Folgendes sehen:
Beachten Sie, dass im Stream der Standortaktualisierungen ein Standort dieselben Koordinaten wie die anderen hat, jedoch nicht als Schein gekennzeichnet ist und eine viel schlechtere Standortgenauigkeit aufweist.
Um dieses Problem zu beheben, schrieb ich eine Utility - Klasse, wird zuverlässig unterdrücken Mock Standorte auf alle modernen Android - Versionen (API Level 15 und höher):
LocationAssistant - Problemlose Standortaktualisierungen für Android
Grundsätzlich "misstraut" es Nicht-Scheinorten, die sich innerhalb von 1 km vom letzten bekannten Scheinort befinden, und bezeichnet sie auch als Schein. Dies geschieht so lange, bis eine erhebliche Anzahl von nicht nachgebildeten Standorten eingetroffen ist. Der LocationAssistant kann nicht nur Scheinstandorte ablehnen, sondern entlastet Sie auch von den meisten Problemen beim Einrichten und Abonnieren von Standortaktualisierungen.
Verwenden Sie es wie folgt, um nur echte Standortaktualisierungen zu erhalten (dh Verspottungen zu unterdrücken):
onNewLocationAvailable()
wird jetzt nur noch mit realen Standortinformationen aufgerufen. Es gibt einige weitere Listener-Methoden, die Sie implementieren müssen, aber im Kontext Ihrer Frage (wie Sie GPS-Spoofing verhindern können) ist dies im Grunde genommen alles.Natürlich können Sie mit einem verwurzelten Betriebssystem immer noch Möglichkeiten finden, Standortinformationen zu fälschen, die normale Apps nicht erkennen können.
quelle
Wenn Sie zufällig die allgemeine Position von Zelltürmen kennen, können Sie überprüfen, ob der aktuelle Zellturm mit der angegebenen Position übereinstimmt (innerhalb einer Fehlergrenze von etwas Großem, z. B. 10 oder mehr Meilen).
Wenn Ihre App beispielsweise Funktionen nur dann entsperrt, wenn sich der Benutzer an einem bestimmten Ort befindet (z. B. in Ihrem Geschäft), können Sie sowohl GPS- als auch Mobilfunkmasten überprüfen. Derzeit fälscht keine GPS-Spoofing-App auch die Mobilfunkmasten, sodass Sie sehen können, ob jemand im ganzen Land einfach versucht, sich in Ihre speziellen Funktionen hineinzuversetzen (ich denke zum Beispiel an die Disney Mobile Magic-App).
Auf diese Weise verwaltet die Llama-App standardmäßig den Standort, da die Überprüfung der IDs des Mobilfunkmastes viel weniger batterieintensiv ist als das GPS. Es ist nicht sehr nützlich für ganz bestimmte Orte, aber wenn Haus und Arbeit mehrere Meilen entfernt sind, kann es sehr leicht zwischen den beiden allgemeinen Orten unterscheiden.
Dies würde natürlich erfordern, dass der Benutzer überhaupt ein Zellensignal hat. Und Sie müssten alle IDs der Mobilfunkmasten in der Region kennen - bei allen Netzwerkanbietern - oder Sie laufen Gefahr, ein falsches Negativ zu erhalten.
quelle
Versuchen Sie diesen Code, es ist sehr einfach und nützlich
quelle
Dieser Scrip funktioniert für alle Android-Versionen und ich finde ihn nach vielen Suchen
quelle
Mithilfe der Google Maps Geolocation-API können Sie zusätzliche Überprüfungen basierend auf der Triangulation des Zellturms oder Informationen zu WLAN-Zugangspunkten hinzufügen
Der einfachste Weg, um Informationen über CellTowers zu erhalten
Sie können Ihre Ergebnisse mit der Website vergleichen
Informationen zu Wifi Access Points erhalten
quelle