it-swarm.com.de

Wie ignorieren manche Apps (Wechat) die falsche Position und erkennen dann die tatsächliche Position?

Ich habe eine falsche Standort-App installiert und meinen Standort anders eingestellt. Dann öffnete Google Maps und Wechat App, 

  • Google Maps zeigt meinen Standort als das, was ich eingestellt habe (Fake)
  • Wechat App ignoriert falsche Position und erkennt reale Position (wie?)

Dann wollte ich verhindern, dass Wechat meine zuvor empfangenen und neuen gefälschten Standorte analysiert.

  • Deinstallierte Wechat
  • Gerät neu gestartet
  • Legen Sie meinen Standort als Fälschung fest
  • Wechat erneut installiert

Aber dasselbe Ergebnis erkennt es meinen tatsächlichen Standort.

Ich möchte wirklich verstehen, wie sie das machen. Irgendwelche Ideen?


Was ich versucht habe 

  • Gps-Anbieter-Parodie
  • Netzanbieter-Parodie
  • Fixierte Standortanbieter-Parodie
  • IP-Geolocation-Parodie
  • GPS-Anbieter-Parodie + IP-Geolocation-Parodie

UPDATE

Verwendet GPS, auch wenn es deaktiviert ist. 

 enter image description here

07-02 11: 46: 15.504 2346-2356 /? D/LocationManagerService: request 434a7e28 gps Request [ACCURACY_FINE gps = + 1s0ms fast = + 1s0ms] von com.tencent.mm (10173) angefordert


FAZIT

  • Sie können die Position in älteren Versionen von Wechat (weniger als 6.0) nachahmen.
  • Verwendet so etwas wie BaiduLocationSDK. Es ist von keinem Scheinversuch durch LocationManager und den Fused-Anbieter betroffen.
  • Ich bin mir nicht sicher, aber es scheint, als würde BaiduLocationSDK GPS durch den Hardwarelevel nutzen.
9
blackkara

Ein Standort-SDK von Drittanbietern wie BaiduLocationSDK spiegelt nicht die falsche Standorteinstellung nach System wider.

Es ist aus Sicherheitsgründen. 

3
duanbo1983

Der Grund, warum ich die Fragen in den Kommentaren stellte, ist, dass ich gehofft hatte, Sie hätten getestet, wie Wechat auf verschiedene Bedingungen reagiert.

Es gibt mehrere Möglichkeiten, den Standort des Geräts zu ermitteln, von dem TestProvider keinen Einfluss auf AFAIK haben sollte. Dieses muss getestet werden, aber hier sind einige Ideen:

Edit: Telephony-Manager-Option hinzugefügt.

2
Timur_C

Um nach gefälschten Orten zu suchen, suchen die meisten Anwendungen in den von ihnen empfangenen NMEA (National Marine Electronics Association) - Daten nach GGA und GSV Sätzen. Die gefälschten Standortanbieter senden keine NMEA-Sätze zusammen mit dem Standort, sodass dieser Parameter verwendet werden kann
Wenn sie innerhalb eines bestimmten Zeitraums keine Sätze von GGA und GSV erhalten haben, sagen sie 100 Sekunden, dass sie den aktuellen Standortanbieter rot markieren.
Dieser Vorgang wird wiederholt, bis ein gültiger Satz von NMEA-Sätzen empfangen wurde und dann der entsprechende Ort ausgewählt wird.

Um NMEA-Daten abzurufen, wird LocationManager#addNmeaListener(GpsStatus.NmeaListener listener) aufgerufen und dann im Listener

void onNmeaReceived(long timestamp, String nmea) {
    Log.d("Nmea Data",nmea);
}

weitere Informationen finden Sie unter Hinzufügen eines NmeaListener
Die NMEA-Sätze GGA und GSV sehen wie folgt aus

[~ # ~] gga [~ # ~] - Wichtige Fixdaten, die 3D-Positions- und Genauigkeitsdaten liefern.

Stichprobe : "$GPGGA,123519,4807.038,N,01131.000,E,1,08,0.9,545.4,M,46.9,M,,*47"

Where:
 GGA          Global Positioning System Fix Data
 123519       Fix taken at 12:35:19 UTC
 4807.038,N   Latitude 48 deg 07.038' N
 01131.000,E  Longitude 11 deg 31.000' E
 1            Fix quality: 0 = invalid
                           1 = GPS fix (SPS)
                           2 = DGPS fix
                           3 = PPS fix
                           4 = Real Time Kinematic
                           5 = Float RTK<br/>
                           6 = estimated (dead reckoning) (2.3 feature)
                           7 = Manual input mode>
                           8 = Simulation mode
 08           Number of satellites being tracked
 0.9          Horizontal dilution of position
 545.4,M      Altitude, Meters, above mean sea level
 46.9,M       Height of geoid (mean sea level) above WGS84 ellipsoid
 (empty field) time in seconds since last DGPS update
 (empty field) DGPS station ID number
 *47          the checksum data, always begins with *


[~ # ~] gsv [~ # ~] - Satelliten in Ansicht zeigt Daten zu den Satelliten an, die das Gerät möglicherweise kann Finden Sie anhand der Ansichtsmaske und der Almanachdaten. Es zeigt auch die aktuelle Fähigkeit, diese Daten zu verfolgen. Beachten Sie, dass nur ein GSV-Satz Daten für bis zu 4 Satelliten bereitstellen kann und daher möglicherweise 3 Sätze für die vollständige Information erforderlich sind. Es ist vernünftig, dass der GSV-Satz mehr Satelliten enthält, als GGA möglicherweise angibt, da GSV möglicherweise Satelliten enthält, die nicht als Teil der Lösung verwendet werden. Es ist nicht erforderlich, dass die GSV-Sätze alle nacheinander angezeigt werden. Um eine Überlastung der Datenbandbreite zu vermeiden, können einige Empfänger die verschiedenen Sätze in völlig unterschiedlichen Abtastwerten platzieren, da jeder Satz identifiziert, um welchen es sich handelt.

Stichprobe:"$GPGSV,2,1,08,01,40,083,46,02,17,308,41,12,07,344,39,14,22,228,45*75"

Where:
  GSV          Satellites in view
  2            Number of sentences for full data
  1            sentence 1 of 2
  08           Number of satellites in view

  01           Satellite PRN number
  40           Elevation, degrees
  083          Azimuth, degrees
  46           SNR - higher is better
               for up to 4 satellites per sentence
  *75          the checksum data, always begins with *

Quelle: NMEAData

2
Sakchham

@Bona Fide

Dann können Sie den TestProvider aus dem LocationManager entfernen und .__ abrufen. der tatsächliche Standort.

Sogar Wechat würde diesen Ansatz anwenden, bevor er Standortaktualisierungen anfordert, , um zu verhindern, dass Anbieter von anderen Anwendungen gefälscht werden, wie z

// HERE WECHAT APP
// WECHAT REMOVES THEM IF ANY (just supposition)
locationManager.removeTestProvider(LocationManager.GPS_PROVIDER);
locationManager.removeTestProvider(LocationManager.NETWORK_PROVIDER);

// WECHAT REQUESTING LOCATION UPDATES
// ....

Bei diesem Ansatz wird also eine IllegalArgumentException in der Location Faker-App ausgelöst. Selbst in diesem Fall kann ich dieses Problem problemlos lösen und die GPS- und NETWORK-Anbieter erneut spoofen,

// HERE LOCATION FAKER APP
// LOCATION FAKER APP SETS FAKE LOCATIONS 
while (mRunning){
    try {
        locationManager.setTestProviderLocation(LocationManager.GPS_PROVIDER, gpsLocation);
    } catch (IllegalArgumentException e){
        locationManager.addTestProvider(LocationManager.GPS_PROVIDER, false, false, false, false, false, true, true, 1, 1);
        locationManager.setTestProviderEnabled(LocationManager.GPS_PROVIDER, true);
    }

   try {
        locationManager.setTestProviderLocation(LocationManager.NETWORK_PROVIDER, networkLocation);
    } catch (IllegalArgumentException e){
        locationManager.addTestProvider(LocationManager.NETWORK_PROVIDER, false, false, false, false, false, true, true, 1, 1);
        locationManager.setTestProviderEnabled(LocationManager.NETWORK_PROVIDER, true);
    }

    gpsLocation.setTime(System.currentTimeMillis());
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        gpsLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
    }

    networkLocation.setTime(System.currentTimeMillis());
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
        networkLocation.setElapsedRealtimeNanos(SystemClock.elapsedRealtimeNanos());
    }

    try {
        Thread.sleep(500);
    } catch (Exception e) {}
}

Alles funktioniert perfekt außer WECHAT 

2
blackkara

Falsche Positionen sind möglich, wenn ALLOW_MOCK_LOCATION gesetzt ist und eine TestProvider zur LocationManager hinzugefügt wird. Um den tatsächlichen Standort zu ermitteln, müssen Sie die folgenden zwei Schritte ausführen:

  • Ermitteln Sie, ob MockSettings aktiviert sind und ob Apps installiert sind, die den Speicherort fälschen könnten.
  • Dann können Sie die TestProvider aus der LocationManager entfernen und den tatsächlichen Speicherort abrufen.

Checkout Jambaaz answer um ein Beispiel zu erhalten, wie dies im Code funktioniert.

Hinweis: Um eine TestProvider zu entfernen, benötigen Sie die Berechtigung Android.permission.ACCESS_MOCK_LOCATION und ALLOW_MOCK_LOCATION ist seit API 23 veraltet. Sie können jetzt überprüfen, ob der Speicherort von einem TestProvider direkt von Location.isFromMockProvider() stammt.

1
Bona Fide

Ich habe es geschafft, den Standort mit Wechat und Zalo zu fälschen, beide scheinen genauso schwierig zu sein.

Ich würde eine Scheinposition laden und eine gps-App fälschen. meinen Standort festlegen Sehen Sie sich die Karten an und stellen Sie fest, dass sie korrekt sind. Sie können sich sogar um die Welt bewegen und funktionieren.

Aber Wechat und Zalo stimmen nicht überein, sie sagen, ich bin in meinem Keller.

DANN deinstalliere ich die gefälschte gps-app (kann möglicherweise stoppen und deaktivieren) und gehe zum wechat und clear location usw. und versuche es erneut und oft werde ich zu einer gefälschten gps-position bewegt. Nach dem Schließen der Wechat-App wird es jedoch nicht so bleiben. es ist vorübergehend.

Es ist möglicherweise nicht leicht zu machen, aber es kann jemandem einen Hinweis oder einen Pfad geben, den er betrachten kann.

0
user10373225