web-dev-qa-db-fra.com

Comment certaines applications (wechat) ignorent-elles le faux emplacement et détectent-elles le vrai?

J'ai installé une fausse application de localisation et modifié mon emplacement. Ensuite, ouvrez Google Maps et l'application Wechat, 

  • Google Maps indique ma position comme ce que j'ai défini (faux)
  • Wechat app ignore l'emplacement factice et détecte l'emplacement réel (comment?)

Ensuite, je voulais éviter d’analyser mes emplacements réels précédemment reçus et mon nouvel emplacement fictif.

  • Wechat désinstallé
  • Redémarrage de mon appareil
  • Définir mon emplacement comme faux
  • Wechat installé à nouveau

Mais même résultat, il détecte mon emplacement réel.

Je veux vraiment comprendre comment ils font cela. Des idées?


Qu'est-ce que j'ai essayé 

  • Gps fournisseur spoof
  • Fournisseur de réseau parodie
  • Parodie du fournisseur d'emplacement fusionné
  • Usurpation de géolocalisation IP
  • Gps fournisseur spoof + spoof de géolocalisation IP

MISE À JOUR

Utilise le GPS même lorsqu'il est désactivé. 

 enter image description here

07-02 11: 46: 15.504 2346-2356 /? D/LocationManagerService: request 434a7e28 demande de gps [ACCURACY_FINE gps demandé = + 1s0ms le plus rapide = + 1s0ms] de com.tencent.mm (10173)


CONCLUSION

  • Vous pouvez simuler l'emplacement sur les anciennes versions de wechat (inférieures à 6.0)
  • Utilise quelque chose comme BaiduLocationSDK. Il n'est affecté par aucune tentative fictive via LocationManager et le fournisseur fusionné.
  • Je ne suis pas sûr, mais, il semble que BaiduLocationSDK utilise le GPS par le biais du matériel.
9
blackkara

Certains sdk d'emplacement tiers, tels que BaiduLocationSDK, ne reflètent pas la configuration de l'emplacement factice par le système.

C'est pour des raisons de sécurité. 

3
duanbo1983

La raison pour laquelle je posais les questions dans les commentaires, c’est que j’espérais que vous testiez la façon dont Wechat répond à différentes conditions.

Il existe deux autres moyens de détecter l’emplacement du périphérique que TestProvider ne devrait pas affecter AFAIK. Ceci a besoin d'être testé mais voici quelques idées:

Edit: a ajouté l'option du gestionnaire de téléphonie.

2
Timur_C

Pour rechercher un faux emplacement, la plupart des applications recherchent les phrases GGA et GSV dans les données NMEA (National Marine Electronics Association) qu'ils ont reçues. Les faux fournisseurs d’emplacement n’envoient pas de phrases NMEA avec l’emplacement. Ce paramètre peut donc être utilisé pour: 
S'ils n'ont pas reçu et GGA et GSV phrases dans un laps de temps minimal, disons 100 secondes, ils signalent en rouge le fournisseur de localisation actuel.
Ce processus est répété jusqu'à ce qu'un ensemble valide de phrases NMEA ait été reçu, puis l'emplacement correspondant soit sélectionné. 

Pour récupérer les données NMEA, LocationManager#addNmeaListener(GpsStatus.NmeaListener listener) est appelé puis dans le programme d'écoute

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

pour plus d'informations, voir ajout d'un NmeaListener
les phrases NMEA, GGA et GSV se présentent comme suit

GGA - données de réparation essentielles fournissant des données de localisation et de précision 3D.

Exemple: "$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 - Satellites in View affiche les données relatives aux satellites que l'unité peut éventuellement trouver en fonction de son masque de visualisation et de ses données d'almanach. Il montre également la capacité actuelle de suivre ces données. Notez qu'une phrase GSV seulement peut fournir des données pour un maximum de 4 satellites et qu'il peut donc être nécessaire d'avoir 3 phrases pour l'information complète. Il est raisonnable que la phrase GSV contienne plus de satellites que ce que GGA pourrait indiquer, car GSV peut inclure des satellites qui ne font pas partie de la solution. Il n'est pas nécessaire que les phrases GSV apparaissent toutes en séquence. Pour éviter de surcharger la bande passante des données, certains destinataires peuvent placer les différentes phrases dans des échantillons totalement différents, chaque phrase identifiant la phrase en question.

Exemple: "$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 *

Source: NMEAData

2
Sakchham

@Authentique

Ensuite, vous pouvez supprimer TestProvider de LocationManager et obtenir l'emplacement réel.

Même si nous utilisions cette approche avant de demander des mises à jour d'emplacement, pour éviter que les fournisseurs ne soient imités par d'autres applications , comme ci-dessous

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

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

Donc, cette approche provoque le lancement d’une exception IllegalArgumentException sur l’application de localisation faker. Même dans ce cas, je peux facilement gérer ce problème et continuer à usurper à nouveau les fournisseurs de GPS et de réseau ,

// 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) {}
}

Tout fonctionne parfaitement mais hors de WECHAT  

2
blackkara

De faux emplacements sont possibles si ALLOW_MOCK_LOCATION est défini et qu'une TestProvider est ajoutée à la LocationManager. Pour obtenir le véritable emplacement, vous devez suivre ces deux étapes:

  • Détecter si les options de simulation sont activées et si des applications sont installées, comment pourrait-il simuler l'emplacement?.
  • Ensuite, vous pouvez supprimer la TestProvider de la LocationManager et obtenir l'emplacement réel.

Checkout Jambaaz answer pour obtenir un exemple de la manière dont cela fonctionne dans le code.

Remarque: Pour supprimer une TestProvider, vous devez disposer des autorisations Android.permission.ACCESS_MOCK_LOCATION et ALLOW_MOCK_LOCATION est maintenant obsolète depuis l'API 23. Vous pouvez maintenant vérifier si l'emplacement provient d'un fournisseur de test directement à partir de Location.isFromMockProvider()

1
Bona Fide

J'ai réussi à usurper l'emplacement avec wechat et zalo, les deux semblent tout aussi difficiles.

Je voudrais charger un faux emplacement et une fausse application GPS. définir ma position. vérifier les cartes et voir si c'est correct, peut même se déplacer dans le monde et ça marche.

Mais wechat et zalo ne sont pas d'accord, ils disent que je suis dans mon sous-sol lol.

ALORS, je désinstalle une fausse application gps (je peux éventuellement forcer l'arrêt et la désactivation) et je vais sur wechat et effacez l'emplacement, etc. Cela ne restera pas ainsi après la fermeture de l'application wechat. c'est temporaire.

Ce n'est peut-être pas facile à faire, mais cela peut donner à quelqu'un un indice ou un chemin à regarder.

0
user10373225