2016-05-11 3 views
9

Я установил приложение для фальшивого местоположения и установил свое местоположение другим. Затем открыл Google Maps и WeChat приложения,Как некоторые приложения (wechat) игнорируют поддельное местоположение, а затем обнаруживают реальный?

  • Google Maps показывает мое местоположение, как то, что я установил (фиктивный)
  • WeChat приложения игнорирует поддельного расположение и обнаруживает реальное местоположение (как?)

Тогда я хотел предотвратить wechat проанализировать мои ранее полученные реальные местоположения и новое поддельное местоположение.

  • Ого WeChat
  • Restarted моего устройство
  • Установить мое место, как поддельные
  • установлены WeChat снова

Но тот же результат, он обнаруживает свое реальное местоположение.

Я действительно хочу понять, как они это делают. Есть идеи?


Что я попробовал

  • поставщик Gps пародийного
  • сеть провайдер пародийного
  • Плавленого поставщик места пародия
  • IP геолокации пародия
  • поставщик Gps пародийной + IP геолокация spoof

UPDATE

использует GPS, даже когда они отключены.

enter image description here

07-02 11: 46: 15,504 2346-2356 /? D/LocationManagerService: запрос 434a7e28 GPS Запрос [ACCURACY_FINE GPS запрошенный = + 1s0ms быстрый = + 1s0ms] из com.tencent.mm (10173)


ЗАКЛЮЧЕНИЕ

  • Вы можете подделать расположение на более старые версии wechat (ниже 6.0)
  • Использует что-то вроде BaiduLocationSDK. Это не влияет на какую-либо пробную попытку через LocationManager и Fused provider.
  • Я не уверен, но, похоже, BaiduLocationSDK использует GPS через аппаратный уровень.
+0

Интересно, зависит ли оно от api, которое приложение использует для получения местоположения. Предположительно, карты google будут использовать api google play, как и большинство приложений, использующих местоположение. Возможно, wechat использует диспетчер местоположения android в родном sdk и, возможно, на него не влияет приложение поддельного местоположения. Дайте ему тест. – Maslada

+0

Мы можем понять, что полученное местоположение является поддельным или реальным, проблем нет. Вопрос в том, как wechat обнаруживает реальное местоположение, в то время как LocationManager и FusedLocationProvider дают закрепленное поддельное местоположение. – Blackkara

+2

Downvoter, что случилось с этим вопросом? – Blackkara

ответ

1

Поддельные места возможны, если ALLOW_MOCK_LOCATION устанавливается и TestProvider добавляется к LocationManager. Чтобы получить реальное местоположение, вам необходимо выполнить следующие два действия:

  • Определить, включены ли MockSettings и установлены ли приложения, как можно подделать местоположение.
  • Затем вы можете удалить TestProvider из LocationManager и получить фактическое местоположение.

Оформить заказ Jambaaz answer, чтобы получить пример, как это работает в коде.

Примечание: Чтобы удалить TestProvider вам нужно разрешение android.permission.ACCESS_MOCK_LOCATION и ALLOW_MOCK_LOCATION теперь устаревшим, так как API 23. Теперь вы можете проверить, если Место это от TestProvider непосредственно из Location.isFromMockProvider()

+0

Я хочу проверить ответ Джамбаза.Но для метода removeTestProvider() требуется разрешение android.permission.ACCESS_MOCK_LOCATION. Вы когда-нибудь проверяли это? – Blackkara

+0

Да, к сожалению, это разрешение. Я сам не пробовал, но он должен работать технически, и это было сделано для Джамбааза. –

+0

Я проверил все разумные способы определения местоположения спуфинга, но мне не повезло о wechat. На моем втором посту я объяснил, как преодолеть ответ Джамбааза. – Blackkara

2

@Bona Fide

Затем вы можете удалить 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 и сетевых провайдеров снова,

// 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

2

Причина я задавала вопросы комментарии в том, что я надеялся, что вы проверили, как Wechat отвечает на разные условия.

Существует несколько других способов определения местоположения устройства, которое TestProvider не должно влиять на AFAIK. Это нуждается в тестировании, но вот некоторые идеи:

  • LocationManager.getLastKnownLocation(String provider) - это позволяет принудительно, используя, например, поставщик GPS и получить кэшированные данные.
  • GPS NMEA listener и new one in API 24 - эти API позволяют прослушивать события низкого уровня с аппаратного обеспечения GPS с использованием NMEA 0183 protocol.
  • IP-адрес геолокации.
  • Вы можете получить геолокацию на уровне страны через Telephony Manager.

Редактировать: добавлена ​​опция диспетчера телефонии.

+0

** getLastKnownLocation (поставщик строк): ** При непрерывном спуфинге провайдеров GPS и NETWORK метод getLastKnownLocation (String Provider) возвращает макет местоположения для каждого провайдера, а также метод callbackLocationChanged дает макет местоположения. Когда я смотрю приложение Google Maps, оно показывает ложное местоположение, но wechat обнаруживает мое реальное местоположение. ** Геолокация IP-адреса: ** Также при выполнении первого подхода, в то же время, я подделал ip-адрес через приложение VPN. Например, я перешел на ip Singapure. Но wechat stil обнаруживает мое реальное местоположение. – Blackkara

+0

** GPS NMEA прослушиватель: ** Я не тестировал это. Но это источник GPS, и я уже спутываю GPS-провайдер. Так что ничего не отличается. Строка Nmea будет содержать значения моего макетного местоположения. – Blackkara

+0

@Blackkara вы пытались на самом деле физически перемещаться с устройством, спускаясь с места? Правильно ли отслеживается Wechat во время движения? Насколько точны местоположение Wechat? Если на уровне страны вы можете использовать Phone Manager (см. Мой отредактированный ответ). Я думаю, что слушатель NMEA заслуживает тестирования, он может быть на другом уровне и не подменять. –

2

Чтобы проверить наличие фальшивого местоположения, большинство приложений ищут GGA и GSV предложений в полученных NMEA (National Marine Electronics Association) данных. Поддельные провайдеры местоположения не отправляют предложения NMEA вместе с местоположением, поэтому этот параметр можно использовать для
Если они не были получены, а GGA и предложений в пороговом значении времени, скажем, 100 секунд, они краснеют флаг текущего провайдера местоположения.
Этот процесс повторяется до тех пор, пока не будет принят действительный набор предложений NMEA, а затем будет выбрано соответствующее местоположение.

Чтобы извлечь NMEA данные LocationManager#addNmeaListener(GpsStatus.NmeaListener listener) называется, а затем в слушателе

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

для получения дополнительной информации см adding a NmeaListener
в формате NMEA предложения, GGA и GSV выглядеть следующим образом

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 - Спутники в View показывает данные о спутниках, что устройство может быть в состоянии найти на основе его просмотра маски и альманаха данных. Он также показывает текущую способность отслеживать эти данные. Обратите внимание, что одно предложение GSV может предоставлять данные только для 4 спутников, и, возможно, для полной информации может потребоваться 3 предложения. Разумеется, предложение GSV содержать больше спутников, чем может указывать GGA, поскольку GSV может включать спутники, которые не используются как часть решения. Не обязательно, чтобы предложения 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 * 

Источник: NMEAData

+0

** Чтобы проверить наличие поддельных мест, большинство приложений ищут предложения GGA и GSV в полученных NMEA (National Marine Electronics Association) данных: ** Также GPRMC. Но это не правильно. Поскольку некоторые устройства не отправляют эти предложения (или любые из них) Например, мое тестовое устройство (samsung galax s3) отправляет $ PGLOR предложение без spoofing. – Blackkara

+0

** Поддельные провайдеры местонахождения не отправляют предложения NMEA вместе с местоположением: ** Это нормально, когда вы обманываете gps, тогда предложение не будет получено. – Blackkara

+0

** Этот процесс повторяется до тех пор, пока не будет принят действительный набор предложений NMEA, а затем будет выбрано соответствующее местоположение. : ** Даже они отмечают текущий провайдер как поддельный (GPS), нет способа получить предложение nmea после подмены. Кроме того, это означает, что вы не можете найти место. – Blackkara

3

Некоторые третье место партия, как BaiduLocationSDK SDK не отражает поддельные настройки местоположения с помощью системы.

Это для целей безопасности.

+0

Wechat использует Baidu, что правильно. К сожалению, кажется, что невозможно обмануть Wechat. Я прав ? – Blackkara

+0

Это не отвечает, как они это делают. Какие API для Android используют этот BaiduLocationSDK? –

+0

@Timur_C Нет английской документации о BaiduLocationSDK, но я видел несколько китайских блогов, объясняющих, как они получают места. Он не использует LocationManager (или платный провайдер) для получения местоположений. Он использует H.A.L (уровень абстракции оборудования), напрямую обменивается оборудованием GPS, а не API Android. Вот почему Wechat не влияет на спуфинг через LocationManager. – Blackkara