在 iOS 上伪造 Apple 网络定位(gs-loc):Surge、QX、Loon 和 Stash 完整指南

了解如何修改 Apple 的网络定位服务(gs-loc),使用 Surge、Quantumult X、Loon 和 Stash 等代理工具伪造 iOS 设备的位置。

在 iOS 上伪造 Apple 网络定位(gs-loc):Surge、QX、Loon 和 Stash 完整指南

Apple 的网络定位服务(gs-loc)根据附近的 Wi-Fi 接入点和蜂窝基站确定您设备的大致位置。这与基于 GPS 的定位不同,在 GPS 信号弱或不可用时使用。开源项目 Yu9191/wloc 提供了一种巧妙的方法来拦截和修改来自 gs-loc.apple.com 的响应,从而在 iOS 设备上有效伪造网络定位。

本指南涵盖了您需要了解的所有内容:工作原理、如何使用各种代理工具进行设置,以及如何使用配套的快捷指令一键切换位置。

为什么要伪造网络定位?

伪造网络定位对于以下情况很有用:

  • 无需实际移动即可测试基于位置的应用程序。
  • 绕过依赖网络位置(而不仅仅是 IP)的地理限制。
  • 隐私:防止应用程序在 GPS 关闭时知道您的真实位置。

与 GPS 伪造(需要越狱或特殊硬件)不同,此方法适用于安装了代理工具的普通 iOS 设备。

工作原理

该项目包含两个主要脚本:

  1. wloc.js — 拦截来自 /clls/wloc(Apple 定位端点)的响应,解析 protobuf 响应,并将坐标替换为用户定义的值。
  2. wloc-settings.js — 拦截对 /wloc-settings/save 的请求,并将所需坐标写入持久存储($persistentStore)。

当您使用基于 Web 的选择器(或快捷指令)时,它会向 gs-loc.apple.com/wloc-settings/save?lon=x&lat=y 发送请求。代理模块拦截此请求并存储坐标。在下一次网络定位请求时,wloc.js 读取这些存储的坐标,并在响应到达应用程序之前修补 protobuf 响应。

设置说明

前提条件

  • 代理工具:Surge、Quantumult X、Loon、Stash 或 Shadowrocket。
  • gs-loc.apple.comgs-loc-cn.apple.com 安装并信任 MITM(中间人)证书。
  • 代理必须处于活动状态(VPN 图标可见)。

步骤 1:订阅模块

选择您的工具并订阅相应的模块 URL:

工具 模块 URL
Surge https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.sgmodule
Quantumult X https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.conf
Loon https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.lpx
Stash https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.stoverride
Shadowrocket https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.module

对于 Egern,您可以直接使用 Surge 模块。

步骤 2:启用 MITM

在您的代理工具中,启用 MITM 并将 gs-loc.apple.comgs-loc-cn.apple.com 添加到 MITM 主机名列表中。在您的 iOS 设备上安装生成的 CA 证书并信任它(设置 > 通用 > 关于 > 证书信任设置)。

步骤 3:选择位置

您有两个选择:

选项 A:使用 Web 选择器(手动)

打开公共 Worker 页面:https://wloc-spoofer.wloc.workers.dev/(或您自行部署的实例)。搜索位置,长按地图放置图钉,然后点击“保存到设备”。坐标将存储在代理的持久存储中。

选项 B:使用快捷指令(推荐)

安装两个快捷指令:

要设置位置:打开 Apple 地图或高德地图,长按一个点,点击分享,然后选择“wloc 设置位置”快捷指令。该快捷指令提取坐标(通过 Worker 处理 GCJ-02 到 WGS84 的转换)并将其发送到代理。

步骤 4:验证

打开一个使用网络定位的应用程序(例如天气、地图),检查是否显示伪造的位置。如果没有,请确保代理处于活动状态且 MITM 正常工作。

iOS 26+ 缓存问题

从 iOS 26 开始,Apple 在 locationd 中引入了激进的缓存。即使模块修改了 WLOC 响应,系统也可能重复使用缓存的位置数据。如果您没有看到变化:

  1. 重启设备 — 这将清除 locationd 缓存。仅切换飞行模式或定位服务无效。
  2. 推荐工作流程
    • 通过快捷指令或 Web 选择器设置所需位置。
    • 启用飞行模式,关闭定位服务,然后重启。
    • 重启后,禁用飞行模式(保持 Wi-Fi 关闭),连接到您的代理(VPN 图标出现),然后启用定位服务。
    • 打开地图验证。

恢复真实位置

要恢复您的真实网络位置:

  • 方法 1:禁用或移除模块。脚本停止拦截请求,系统使用真实数据。在 iOS 26+ 上,重启设备以清除缓存。
  • 方法 2:清除持久存储数据。当没有存储自定义坐标且模块参数为默认值时,脚本进入“透传模式”。在代理工具的脚本编辑器中运行以下命令:
    • Surge:$persistentStore.write(null, "wloc_settings")
    • Quantumult X:$prefs.removeValueForKey("wloc_settings")
    • Loon:$persistentStore.write(null, "wloc_settings")

然后重启设备。

自行部署 Worker

公共 Worker 有使用限制。为了可靠性,请在 Cloudflare Workers 或 Pages 上部署您自己的实例:

Workers(一键部署)

部署到 Cloudflare Workers

Workers(手动)

git clone https://github.com/Yu9191/wloc.git
cd wloc/worker
npm install
npx wrangler login
npm run deploy

Pages(手动)

git clone https://github.com/Yu9191/wloc.git
cd wloc/worker
npm install
npx wrangler pages deploy dist --project-name <your-project-name>

部署后,将快捷指令的 Worker URL 更新为您自己的。

配置参数

参数 描述 默认值
longitude 目标经度(Web 选择器覆盖) null(透传)
latitude 目标纬度(Web 选择器覆盖) null(透传)
accuracy 精度(米) 25
logLevel 日志级别 info

优先级:Web 选择器存储 > 模块参数 > 默认值。

隐私考虑

Worker(/api/parse)是一个纯中继:它接收地图链接,跟随重定向,提取坐标,如果需要则将 GCJ-02 转换为 WGS84,并返回 JSON。它不会记录、缓存或存储任何数据。如果您担心,请使用开源代码部署您自己的实例。

限制

  • 仅修改网络定位(基于 Wi-Fi/蜂窝基站),不修改 GPS。如果 GPS 信号强,iOS 可能优先使用 GPS 数据。
  • 在 GPS 信号弱的室内效果最佳。
  • 必须通过代理访问 Web 选择器(Safari 必须通过代理工具路由),以便保存请求被拦截。

致谢


通过此设置,您可以轻松伪造 iOS 设备的网络定位,用于测试、隐私或解除地理限制。代理模块和快捷指令的组合使其像分享地图图钉一样简单。

来源

Yu9191/wloc: 修改 Apple 网络定位(gs-loc)返回坐标 · 支持 Surge / Quantumult X / Loon / Stash · 快捷指令一键设置/恢复定位