🎯 WLOC 可通过 Shadowrocket 修改 Apple Wi-Fi/基站网络定位返回的坐标。它作用于网络定位服务,适合开发、地图和室内定位测试。

iPhone WLOC 网络定位修改


📌 WLOC 是什么

WLOC 用代理模块拦截 Apple 网络定位服务请求,修改 Wi-Fi 与基站定位返回的坐标。整个过程无需越狱,也无需连接电脑。

它作用于 Apple 网络定位层,硬件 GPS 仍然会返回真实坐标。室内或 Wi-Fi 定位占主导时效果更稳定;室外 GPS 信号强时,系统可能优先采用真实 GPS。

项目说明
项目地址Yu9191/wloc
代理工具Shadowrocket(小火箭)
模块名称Apple WLOC 定位修改
修改对象Apple Wi-Fi/基站网络定位
MITM 域名gs-loc.apple.comgs-loc-cn.apple.com
设置方式地图分享快捷指令、在线选点页面
系统要求iPhone、可用代理节点、已信任的 MITM 证书

🧰 准备工具

开始前准备以下内容:

  1. 一台 iPhone。
  2. 已安装 Shadowrocket,并配置可正常连接的代理节点。
  3. WLOC 的 Shadowrocket 模块。
  4. “设置位置”和“清理恢复位置”两个快捷指令。
  5. Safari,用于打开在线选点页面或安装快捷指令。

Shadowrocket 模块地址

https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.module

两个快捷指令

在线选点页面

公共页面存在请求限额。长期使用可按项目文档自建 Cloudflare Worker 或 Pages 实例。


🔧 导入模块并开启 HTTPS 解密

第一步:导入 Apple WLOC 模块

  1. 打开 Shadowrocket。
  2. 进入“配置”。
  3. 打开“模块”。
  4. 点击右上角“+”。
  5. 粘贴上面的 .module 地址并下载。
  6. 找到“Apple WLOC 定位修改”,打开右侧开关。

模块包含两条脚本规则:

规则拦截路径用途
Apple WLOC/clls/wloc解析并修改 Apple 定位响应
WLOC Settings/wloc-settings/save将选中的坐标写入持久化存储

第二步:开启 HTTPS 解密

  1. 进入当前使用的 Shadowrocket 配置文件。
  2. 打开“HTTPS 解密”。
  3. “通过 HTTP/2 进行中间人攻击”可暂时保持关闭。
  4. 确认 MITM 主机名包含 gs-loc.apple.comgs-loc-cn.apple.com

第三步:安装并完全信任证书

已经安装过证书,且证书页面显示系统已信任时,可继续使用原证书。

首次配置时按以下顺序操作:

  1. 在 Shadowrocket 的 HTTPS 解密页面生成 CA 证书。
  2. 按提示下载并安装描述文件。
  3. 打开“设置 → 通用 → VPN 与设备管理”,确认描述文件安装成功。
  4. 打开“设置 → 通用 → 关于本机 → 证书信任设置”。
  5. 为 Shadowrocket CA 证书开启“完全信任”。

⚠️ 每次重新生成证书,都需要重新安装并信任。保留正常工作的证书可减少重复配置。


📍 用快捷指令设置位置

快捷指令是最方便的切换方式,可直接从地图 App 将目标位置发送给 WLOC。

Apple 地图

  1. 打开 Apple 地图。
  2. 长按地图放置大头针。
  3. 打开地点详情,点击“共享”。
  4. 选择“wloc 设置地理位置”。
  5. 等待快捷指令返回设置成功提示。

高德地图

  1. 打开高德地图并选中目标位置。
  2. 点击“分享”。
  3. 选择“更多”。
  4. 运行“wloc 设置地理位置”。

高德分享地址通常是短链,坐标位于跳转信息中,并采用 GCJ-02 坐标系。WLOC 的解析服务会跟随跳转、提取坐标,再转换为 WGS84。

中国大陆的 Apple 地图链接也可能采用 GCJ-02 坐标。解析服务会按区域判断是否需要转换,境外坐标保持原样。

快捷指令使用的解析接口为:

https://wloc-spoofer.wloc.workers.dev/api/parse

该接口接收地图链接,解析后返回经纬度。项目代码已经开源,可自行部署并在快捷指令中替换为自己的 Worker 域名。

使用快捷指令的前提:代理已连接、WLOC 模块已启用,并且 MITM 证书已信任 Apple 定位域名。


🗺️ 用在线页面选点

快捷指令之外,也可在 Safari 打开在线选点页面。

  1. 保持 Shadowrocket 连接,并启用 WLOC 模块和 HTTPS 解密。
  2. 用 Safari 打开 https://wloc-pages.pages.dev/
  3. 点击地图、搜索地名,或粘贴地图分享链接。
  4. 确认经纬度后点击“储存到设备”。
  5. 页面显示成功,说明坐标已经写入代理工具的持久化存储。
  6. 重新触发 Apple 定位请求,并打开 Apple 地图检查结果。

选点页面支持以下输入:

  • 直接点击地图
  • 搜索地名
  • Apple Maps 分享链接
  • Google Maps 分享链接
  • 高德地图分享链接
  • 百度地图分享链接
  • 经纬度文本
  • 浏览器当前位置

收藏位置

在线页面可以收藏多个位置:

  • 选点后点击“收藏位置”,填写最多 30 个字符的备注。
  • 点击收藏项可让地图快速跳转,再点击“储存到设备”完成切换。
  • 与设备已保存坐标一致的收藏会标记“✓ 当前生效”。
  • 收藏列表保存在浏览器 localStorage
  • 实际生效坐标保存在代理工具的 $persistentStore,键名为 wloc_settings

清除浏览器缓存会移除收藏列表,已经写入设备的生效坐标仍然保留。


✅ 激活与测试

设置坐标后,回到 Shadowrocket 首页:

  1. 将“全局路由”设为“配置”。
  2. 打开连接开关。
  3. 确认状态栏出现 VPN 图标。
  4. 确认 Apple WLOC 模块已经启用。
  5. 确认 HTTPS 解密已经开启。
  6. 重新打开 Apple 地图测试定位。

在 iOS 15~18 上,可以先关闭定位服务约 5 秒,再重新开启,让系统重新请求网络定位。

工作流程

地图分享或在线选点
  → 请求 gs-loc.apple.com/wloc-settings/save?lon=x&lat=y
  → WLOC Settings 规则拦截请求
  → wloc-settings.js 写入 wloc_settings
  → Apple 发起下一次 WLOC 请求
  → wloc.js 读取目标坐标
  → 修改 protobuf 定位响应

默认参数如下:

参数说明默认值
longitude目标经度null/模块默认参数
latitude目标纬度null/模块默认参数
accuracy定位精度(米)25
logLevel日志级别info

坐标使用优先级为:在线选点储存值 > 模块参数 > 默认值。


⚠️ iOS 26/27 缓存与故障排查

Apple 从 iOS 26 开始强化 locationd 定位缓存。脚本日志即使显示“已修改”,系统仍可能复用内存中的旧坐标。

iOS 26/27 的关键处理

⚠️ 重启设备才能可靠清除 locationd 内存缓存。飞行模式开关和单独关闭定位服务通常无法清除这层缓存。

高版本推荐流程一

  1. 先选好目标位置并“储存到设备”。
  2. 开启飞行模式。
  3. 关闭定位服务。
  4. 重启设备。
  5. 开机后关闭飞行模式,并保持 Wi-Fi 关闭。
  6. 连接 Shadowrocket,确认 VPN 图标出现。
  7. 打开定位服务。
  8. 打开地图验证。

高版本推荐流程二

  1. 关闭定位服务。
  2. 在选点页面设置目标位置并储存。
  3. 打开定位服务。
  4. 出现“允许访问位置信息”时,选择“下次询问或在我共享时”。
  5. 打开地图验证。

页面提示储存失败

按顺序检查:

  1. Apple WLOC 模块开关是否启用。
  2. Shadowrocket 代理连接是否正常。
  3. HTTPS 解密是否开启。
  4. CA 证书是否已安装并完全信任。
  5. MITM 主机名是否包含 gs-loc.apple.com
  6. Safari 请求是否确实经过代理。

地图仍显示真实位置

  • 转到室内或 Wi-Fi 环境测试,减少硬件 GPS 的影响。
  • 彻底关闭地图 App 后重新打开。
  • 检查 Shadowrocket 日志是否出现 WLOC 拦截记录。
  • iOS 26/27 执行完整重启流程。

手动写入坐标

也可以在 BoxJS 中直接编辑 wloc_settings

{"longitude":121.4737,"latitude":31.2304,"accuracy":25}

🔄 恢复真实位置与使用边界

方法一:关闭或删除模块

  1. 在 Shadowrocket 中关闭 Apple WLOC 模块,或删除模块。
  2. 关闭代理连接。
  3. iOS 26/27 重启设备,清除系统定位缓存。

模块停止拦截后,系统会恢复使用原始定位响应。

方法二:运行恢复快捷指令

运行 wloc 清理恢复位置,清除已经保存的坐标。持久化数据为空且模块参数保持默认值时,脚本进入透传模式,直接放行 Apple 的原始定位结果。

项目将默认模块参数设为:

longitude=113.94114
latitude=22.544577

这组参数同时承担“未自定义”的判断标记。若手动修改过模块参数,清除 wloc_settings 后脚本仍可能继续使用模块参数。恢复前应保留模块默认参数,或直接关闭模块。

使用限制

  • WLOC 只修改 Apple 网络定位,不影响硬件 GPS。
  • GPS 信号较强时,部分 App 会继续显示真实位置。
  • 各应用采用的定位数据源和风控方式不同,效果无法统一保证。
  • 该工具适合开发测试、地图测试和室内网络定位验证。
  • 请勿用于规避平台地区限制、支付风控、账号验证、考勤规则或其他违规用途。

需要在 iOS 设备上管理多个 eSIM Profile 时,可参考 eSTK.me 实体 eSIM 卡,将兼容的 eSIM Profile 写入实体卡槽,方便不同运营商环境测试。

常见问题

为什么开启模块后没有效果?
先检查代理、模块、HTTPS 解密与证书信任。iOS 26/27 还需要重启清除 locationd 缓存。

所有 App 都会显示修改后的位置吗?
各 App 的定位实现不同。直接读取 GPS 或组合多种信号的应用可能继续显示真实位置。

快捷指令和在线选点需要同时使用吗?
两者任选其一。快捷指令适合从地图分享位置,在线页面适合搜索、收藏和粘贴多种地图链接。

恢复时只关闭 VPN 可以吗?
关闭模块或清除持久化坐标更可靠。iOS 26/27 再重启一次,可清除系统仍在复用的缓存位置。