GPS 欺骗的工作原理,以及应用为何能检测到它
位置、软件模拟 GPS 和模拟位置标记的实际运作方式,以及为何真实的射频信号能产生无模拟痕迹的真实定位。
“GPS 欺骗”这个词其实指两种完全不同的操作,而两者的区别,正好解释了为什么有些方法会暴露,有些不会。一种是在软件层面注入一个假坐标;另一种是发射真实的卫星信号。下面分别说明它们怎么工作,以及 App 实际会检查什么。
手机是怎么知道自己位置的
GNSS 接收机(GPS,以及它的“兄弟姐妹” Galileo、GLONASS 和 BeiDou)会接收头顶卫星发出的微弱无线电信号。每颗卫星都会广播自己发出信号的时间;接收机测量每个信号到达所花的时间,换算成距离,然后解算出地球上唯一与所有距离一致的那个点。这个解算出来的点就是你的 定位结果(fix)。手机上所有与位置相关的功能——地图、地理围栏、“附近的人”、游戏——都建立在这个结果之上。
软件模拟 GPS:注入一个坐标
模拟 GPS 的 App 并不触碰无线电信号。它利用操作系统的开发者接口,直接塞给系统一个坐标,然后说“就报这个位置”。这种方式简单、免费,但会留下痕迹。在 Android 上,任何通过这种方式产生的位置都会带上 isFromMockProvider 标记,而且启用它需要打开“开发者选项”和“模拟位置”设置。在 iOS 上,Apple 直接禁止这类 App 上架,所以走软件路线通常需要一台电脑、越狱,或者用短期证书侧载一个 App。
App 为什么能检测到
检测成本通常很低,因为软件路线留下的痕迹太明显:
- 模拟标记。 一行代码读取
isFromMockProvider;被标记的位置直接丢弃。仅这一项就能拦住绝大多数普通欺骗者。 - 完整性认证。 Play Integrity(Android)和越狱/开发者模式检测(iOS)会注意到软件路线所必需的被修改过的环境。
- 交叉验证。 一个做了加固的 App 可以把你的 GPS 定位结果与网络 IP、手机能扫描到的 Wi-Fi 和基站、以及运动传感器数据进行比对,如果 GPS 位置与所有这些信息都不一致,或者位置跳变速度超过人类移动极限,就会被标记。
射频仿真:真实信号,真实定位
AnyLocate 工作在更底层。它不是注入一个坐标,而是向设备自身的接收机广播真实的卫星信号,接收机锁定信号后,按正常流程自己计算出定位结果。在模拟位置这一层,这个结果与真实位置完全无法区分:没有注入坐标,因此没有 isFromMockProvider 标记,不需要模拟位置设置,不需要 root 或越狱,所有常见检测手段都找不到它们要找的东西。位置会落在真实道路上,更新也很平滑,因为这是接收机自己算出来的。
VPN ≠ GPS
一个常见的死胡同:VPN 改变的是你的 IP 地址,而不是你的 GPS 定位结果。Snap Map、Pokémon GO 以及大多数地图功能都忽略 IP,直接读取卫星位置,所以 VPN 在地图上什么也移动不了。要移动地图上的位置,就得移动定位结果,那是 GPS 层面的事,不是网络层面的事。
边界在哪里
诚实说明边界,正是关键所在。控制卫星信号,可以设定所有从 GPS 定位结果衍生出来的东西。但它不会改变你的网络 IP、你的账号或账单区域、手机感知到的 Wi‑Fi 和基站环境,也不会改变你的运动传感器数据。因此,任何依赖这些信息来做判断的功能(与登录账号绑定的区域锁、IP 检测、融合 Wi‑Fi 定位、步数计交叉验证等),都是另一回事。卫星信号层是 AnyLocate 能干净、完整控制的一层;它不会声称自己能控制其他层。