在 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 设备。
工作原理
该项目包含两个主要脚本:
- wloc.js — 拦截来自
/clls/wloc(Apple 定位端点)的响应,解析 protobuf 响应,并将坐标替换为用户定义的值。 - 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.com和gs-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.com 和 gs-loc-cn.apple.com 添加到 MITM 主机名列表中。在您的 iOS 设备上安装生成的 CA 证书并信任它(设置 > 通用 > 关于 > 证书信任设置)。
步骤 3:选择位置
您有两个选择:
选项 A:使用 Web 选择器(手动)
打开公共 Worker 页面:https://wloc-spoofer.wloc.workers.dev/(或您自行部署的实例)。搜索位置,长按地图放置图钉,然后点击“保存到设备”。坐标将存储在代理的持久存储中。
选项 B:使用快捷指令(推荐)
安装两个快捷指令:
- 设置位置:https://www.icloud.com/shortcuts/a82717d8fdad4e6280866fcf911173f7
- 清除位置:https://www.icloud.com/shortcuts/f42632d406504f24a2cd163af4fe012f
要设置位置:打开 Apple 地图或高德地图,长按一个点,点击分享,然后选择“wloc 设置位置”快捷指令。该快捷指令提取坐标(通过 Worker 处理 GCJ-02 到 WGS84 的转换)并将其发送到代理。
步骤 4:验证
打开一个使用网络定位的应用程序(例如天气、地图),检查是否显示伪造的位置。如果没有,请确保代理处于活动状态且 MITM 正常工作。
iOS 26+ 缓存问题
从 iOS 26 开始,Apple 在 locationd 中引入了激进的缓存。即使模块修改了 WLOC 响应,系统也可能重复使用缓存的位置数据。如果您没有看到变化:
- 重启设备 — 这将清除
locationd缓存。仅切换飞行模式或定位服务无效。 - 推荐工作流程:
- 通过快捷指令或 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")
- Surge:
然后重启设备。
自行部署 Worker
公共 Worker 有使用限制。为了可靠性,请在 Cloudflare Workers 或 Pages 上部署您自己的实例:
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 必须通过代理工具路由),以便保存请求被拦截。
致谢
- 原始 WLOC 伪造概念由 FFF686868 提出
- 跨平台脚本框架由 NSNanoCat/Util 提供
通过此设置,您可以轻松伪造 iOS 设备的网络定位,用于测试、隐私或解除地理限制。代理模块和快捷指令的组合使其像分享地图图钉一样简单。
来源
Yu9191/wloc: 修改 Apple 网络定位(gs-loc)返回坐标 · 支持 Surge / Quantumult X / Loon / Stash · 快捷指令一键设置/恢复定位