11

偽の位置情報アプリをインストールして、現在地を別の場所に設定しました。次に、Google マップと Wechat アプリを開き、

  • Googleマップは自分の場所を設定したとおりに表示します(偽物)
  • Wechat アプリは偽の位置情報を無視し、実際の位置情報を検出します (どのように?)

次に、以前に受信した実際の場所と新しい偽の場所をwechatが分析するのを防ぎたいと思いました.

  • アンインストールされた微信
  • デバイスを再起動しました
  • 現在地を偽の場所に設定する
  • Wechatを再インストールしました

しかし、結果は同じで、私の本当の位置を検出します。

彼らがどのようにこれを行うかを本当に理解したいです。何か案は?


私が試したこと

  • GPS プロバイダーのスプーフィング
  • ネットワーク プロバイダーのなりすまし
  • 融合された位置情報プロバイダーのスプーフィング
  • IP ジオロケーション スプーフィング
  • GPS プロバイダーのなりすまし + IP ジオロケーションのなりすまし

アップデート

無効にしても GPS を使用します。

ここに画像の説明を入力

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


結論

  • 古いバージョンの wechat (6.0 未満) では位置を偽造できます。
  • BaiduLocationSDK のようなものを使用します。LocationManager および Fused プロバイダーを介した模擬試行の影響を受けません。
  • よくわかりませんが、BaiduLocationSDK はハードウェア レベルで GPS を使用しているようです。
4

6 に答える 6

4

BaiduLocationSDK のような一部のサード パーティの位置情報 SDK は、システムによって設定された偽の位置情報を反映しません。

安全のためです。

于 2016-07-01T19:57:27.763 に答える
4

偽の位置をチェックするために、ほとんどのアプリケーションは、受信したデータ内の文を検索GGAします。偽のロケーション プロバイダーは、ロケーションと共に NMEA センテンスを送信しないため、このパラメーターを使用し て、しきい値の時間 (たとえば 100 秒) 内にセンテンスを受信しなかった場合、現在のロケーション プロバイダーに警告を発します。 このプロセスは、NMEA センテンスの有効なセットが受信されるまで繰り返され、対応する場所が選択されます。GSVNMEA (National Marine Electronics Association)
GGAGSV

NMEAデータを取得するLocationManager#addNmeaListener(GpsStatus.NmeaListener listener)には、リスナーで呼び出されます

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

詳細については 、NMEA センテンスに NmeaListener を追加する方法を参照してください。次のようになります。
GGAGSV

GGA - 3D 位置と精度データを提供する重要な修正データ。

サンプル :"$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 - 表示中の衛星は、表示マスクとアルマナック データに基づいて、ユニットが検出できる可能性のある衛星に関するデータを示します。また、このデータを追跡する現在の能力も示しています。1 つの GSV センテンスだけで最大 4 つの衛星のデータを提供できるため、完全な情報を得るには 3 つのセンテンスが必要になる場合があることに注意してください。GSV には解の一部として使用されないサテライトが含まれている可能性があるため、GSV センテンスに GGA が示すよりも多くのサテライトを含めることは妥当です。GSV センテンスがすべて順番に現れる必要はありません。データ帯域幅の過負荷を避けるために、一部の受信機は、さまざまなセンテンスをまったく異なるサンプルに配置する場合があります。これは、各センテンスがどのセンテンスであるかを識別するためです。

サンプル:"$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 *

出典:NMEAデータ

于 2016-06-30T19:50:16.043 に答える
2

@本物の

次に、TestProvider を LocationManager から削除して、実際の場所を取得できます。

wechat でさえ、位置の更新を要求する前にこのアプローチを使用して、プロバイダーが他のアプリケーションによってスプーフィングされるのを回避します

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

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

したがって、このアプローチでは、ロケーション フェイカー アプリで IllegalArgumentException がスローされます。その場合でも、この問題を簡単に処理して、再び GPS および NETWORK プロバイダーのなりすましを続けることができます。

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

すべてが完璧に機能しますが、WECHAT は利用できません

于 2016-06-25T10:56:03.187 に答える
1

ALLOW_MOCK_LOCATIONが設定され、TestProviderが に追加されている場合、偽の場所が可能ですLocationManager。実際の場所を取得するには、次の 2 つの手順を実行する必要があります。

  • MockSettings が有効になっているかどうか、および場所を偽造できるアプリがインストールされているかどうかを検出します。
  • TestProvider次に、からを削除してLocationManager、実際の場所を取得できます。

コードでこれがどのように機能するかの例を得るには、Jambaazの回答をチェックしてください。

注:を削除するTestProviderには、アクセス許可が必要であり、 API 23 以降android.permission.ACCESS_MOCK_LOCATIONALLOW_MOCK_LOCATIONは廃止されました。場所が TestProvider からのものであるかどうかを直接から確認できるようになりました。Location.isFromMockProvider()

于 2016-05-12T06:42:39.740 に答える