Android 一些应用程序(微信)如何忽略虚假位置,然后检测到真实位置?

Android 一些应用程序(微信)如何忽略虚假位置,然后检测到真实位置?,android,location,android-gps,Android,Location,Android Gps,我安装了一个假的位置应用程序,并将我的位置设置为不同的位置。然后打开谷歌地图和微信应用 谷歌地图显示我设置的位置(假) 微信应用程序忽略假位置,并检测真实位置(如何?) 然后我想阻止微信分析我以前收到的真实位置和新的假位置 卸载的微信 重新启动我的设备 把我的位置设为假的 再次安装微信 但同样的结果,它检测到了我的真实位置 我真的很想知道他们是怎么做到的。有什么想法吗 我尝试过的 Gps提供商欺骗 网络提供商欺骗 融合位置提供程序欺骗 IP地理定位欺骗 Gps提供商欺骗+IP地理位置

我安装了一个假的位置应用程序,并将我的位置设置为不同的位置。然后打开谷歌地图和微信应用

  • 谷歌地图显示我设置的位置(假)
  • 微信应用程序忽略假位置,并检测真实位置(如何?)
然后我想阻止微信分析我以前收到的真实位置和新的假位置

  • 卸载的微信
  • 重新启动我的设备
  • 把我的位置设为假的
  • 再次安装微信
但同样的结果,它检测到了我的真实位置

我真的很想知道他们是怎么做到的。有什么想法吗


我尝试过的

  • Gps提供商欺骗
  • 网络提供商欺骗
  • 融合位置提供程序欺骗
  • IP地理定位欺骗
  • Gps提供商欺骗+IP地理位置欺骗

更新

即使禁用,也会使用GPS

07-02 11:46:15.504 2346-2356/?D/LocationManagerService:从com.tencent.mm(10173)请求434a7e28全球定位系统请求[请求的精度/精细全球定位系统=+1s0ms最快=+1s0ms]


结论

  • 您可以在旧版本的微信(低于6.0)上伪造位置
  • 使用类似于BaiduLocationSDK的东西。它不受LocationManager和Fused provider的任何模拟尝试的影响
  • 我不确定,但似乎BaidLocationSDK通过硬件级别使用GPS

如果设置了,并且在
LocationManager
中添加了一个
TestProvider
,则可能出现假位置。要获得真实位置,您需要执行以下两个步骤:

  • 检测MockSettings是否已启用,以及是否已安装应用程序。如何伪造位置
  • 然后您可以从
    LocationManager
    中删除
    TestProvider
    ,并获取实际位置
签出以获取代码中的示例

注意:要删除
TestProvider
您需要android.Permission.ACCESS\u MOCK\u LOCATION的权限,自API 23以来,该权限已被弃用。您现在可以直接从

@善意地检查位置是否来自TestProvider

然后您可以从LocationManager中删除TestProvider并获取 实际位置

即使是微信也会在请求位置更新之前使用这种方法,以避免提供商被其他应用程序欺骗,如下面的内容

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

// WECHAT REQUESTING LOCATION UPDATES
// ....
因此,这种方法会导致在location faker应用程序上抛出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) {}
}

除了微信之外,一切都很完美

我在评论中问这些问题的原因是我希望你测试微信对不同情况的反应

还有两种检测设备位置的方法,
TestProvider
不应影响AFAIK。这个需要测试,但这里有一些想法:

  • -这允许您强制使用例如GPS提供商并获取缓存数据
  • ,和a-这些API允许使用从GPS硬件侦听低级事件
  • IP地址地理定位
  • 您可以通过获取国家级地理位置

编辑:添加了电话管理器选项。

要检查假位置,大多数应用程序在收到的
NMEA(国家海洋电子协会)
数据中查找
GGA
GSV
语句。假位置提供程序不随位置一起发送NMEA语句,因此,如果在阈值时间内(例如100秒)未收到和
GGA
GSV
语句,则可以使用此参数来标记当前位置提供程序。
重复此过程,直到收到一组有效的NMEA句子,然后选择相应的位置

要检索NMEA数据
LocationManager#addNmeaListener(GpsStatus.NmeaListener listener)
,将调用该函数,然后将其放入侦听器中

void onNmeaReceived(long timestamp, String nmea) {
    Log.d("Nmea Data",nmea);
}
有关更多信息,请参见
NMEA的句子,
GGA
GSV
如下所示

GGA-提供3D位置和精度数据的基本固定数据。

示例:
“$GPGGA,1235194807.038,N,01131.000,E,1,08,0.9545.4,M,46.9,M,,*47”


来源:

某些第三方位置sdk(如BaidLocationSDK)没有反映系统的假位置设置


这是为了安全

我成功地用微信和zalo欺骗了位置,这两个看起来都很难

我会加载一个模拟位置和假gps应用程序。设置我的位置。检查地图,看看它是否正确,甚至可以在世界各地移动,而且它工作正常

但是微信和zalo不同意,他们说我在地下室lol

然后我卸载假gps应用程序(可能可以强制停止和禁用),然后转到微信和清除位置等,再试一次,它通常会将我移动到假gps位置。不过,在关闭微信应用程序后,情况不会一直如此。这是暂时的


这可能不容易做到,但可能会给某人一个提示或路径来查看。

我想知道这是否取决于应用程序用于获取位置的api。据推测,谷歌地图将使用谷歌播放api,就像大多数使用位置的应用程序一样。微信可能在本机sdk中使用android location manager,这可能不受假冒location应用程序的影响。给它一个测试。我们可以理解接收到的位置是假的还是真的,没有问题。问题是,当LocationManager和FusedLocationProvider提供固定的假位置时,微信如何检测真实位置。Downvoter,这个问题有什么问题吗
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 *
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 *