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

📌 WLOC 是什么
WLOC 用代理模块拦截 Apple 网络定位服务请求,修改 Wi-Fi 与基站定位返回的坐标。整个过程无需越狱,也无需连接电脑。
它作用于 Apple 网络定位层,硬件 GPS 仍然会返回真实坐标。室内或 Wi-Fi 定位占主导时效果更稳定;室外 GPS 信号强时,系统可能优先采用真实 GPS。
| 项目 | 说明 |
|---|---|
| 项目地址 | Yu9191/wloc |
| 代理工具 | Shadowrocket(小火箭) |
| 模块名称 | Apple WLOC 定位修改 |
| 修改对象 | Apple Wi-Fi/基站网络定位 |
| MITM 域名 | gs-loc.apple.com、gs-loc-cn.apple.com |
| 设置方式 | 地图分享快捷指令、在线选点页面 |
| 系统要求 | iPhone、可用代理节点、已信任的 MITM 证书 |
🧰 准备工具
开始前准备以下内容:
- 一台 iPhone。
- 已安装 Shadowrocket,并配置可正常连接的代理节点。
- WLOC 的 Shadowrocket 模块。
- “设置位置”和“清理恢复位置”两个快捷指令。
- Safari,用于打开在线选点页面或安装快捷指令。
Shadowrocket 模块地址
https://raw.githubusercontent.com/Yu9191/wloc/refs/heads/main/modules/wloc.module
两个快捷指令
在线选点页面
公共页面存在请求限额。长期使用可按项目文档自建 Cloudflare Worker 或 Pages 实例。
🔧 导入模块并开启 HTTPS 解密
第一步:导入 Apple WLOC 模块
- 打开 Shadowrocket。
- 进入“配置”。
- 打开“模块”。
- 点击右上角“+”。
- 粘贴上面的
.module地址并下载。 - 找到“Apple WLOC 定位修改”,打开右侧开关。
模块包含两条脚本规则:
| 规则 | 拦截路径 | 用途 |
|---|---|---|
| Apple WLOC | /clls/wloc | 解析并修改 Apple 定位响应 |
| WLOC Settings | /wloc-settings/save | 将选中的坐标写入持久化存储 |
第二步:开启 HTTPS 解密
- 进入当前使用的 Shadowrocket 配置文件。
- 打开“HTTPS 解密”。
- “通过 HTTP/2 进行中间人攻击”可暂时保持关闭。
- 确认 MITM 主机名包含
gs-loc.apple.com和gs-loc-cn.apple.com。
第三步:安装并完全信任证书
已经安装过证书,且证书页面显示系统已信任时,可继续使用原证书。
首次配置时按以下顺序操作:
- 在 Shadowrocket 的 HTTPS 解密页面生成 CA 证书。
- 按提示下载并安装描述文件。
- 打开“设置 → 通用 → VPN 与设备管理”,确认描述文件安装成功。
- 打开“设置 → 通用 → 关于本机 → 证书信任设置”。
- 为 Shadowrocket CA 证书开启“完全信任”。
⚠️ 每次重新生成证书,都需要重新安装并信任。保留正常工作的证书可减少重复配置。
📍 用快捷指令设置位置
快捷指令是最方便的切换方式,可直接从地图 App 将目标位置发送给 WLOC。
Apple 地图
- 打开 Apple 地图。
- 长按地图放置大头针。
- 打开地点详情,点击“共享”。
- 选择“wloc 设置地理位置”。
- 等待快捷指令返回设置成功提示。
高德地图
- 打开高德地图并选中目标位置。
- 点击“分享”。
- 选择“更多”。
- 运行“wloc 设置地理位置”。
高德分享地址通常是短链,坐标位于跳转信息中,并采用 GCJ-02 坐标系。WLOC 的解析服务会跟随跳转、提取坐标,再转换为 WGS84。
中国大陆的 Apple 地图链接也可能采用 GCJ-02 坐标。解析服务会按区域判断是否需要转换,境外坐标保持原样。
快捷指令使用的解析接口为:
https://wloc-spoofer.wloc.workers.dev/api/parse
该接口接收地图链接,解析后返回经纬度。项目代码已经开源,可自行部署并在快捷指令中替换为自己的 Worker 域名。
使用快捷指令的前提:代理已连接、WLOC 模块已启用,并且 MITM 证书已信任 Apple 定位域名。
🗺️ 用在线页面选点
快捷指令之外,也可在 Safari 打开在线选点页面。
- 保持 Shadowrocket 连接,并启用 WLOC 模块和 HTTPS 解密。
- 用 Safari 打开
https://wloc-pages.pages.dev/。 - 点击地图、搜索地名,或粘贴地图分享链接。
- 确认经纬度后点击“储存到设备”。
- 页面显示成功,说明坐标已经写入代理工具的持久化存储。
- 重新触发 Apple 定位请求,并打开 Apple 地图检查结果。
选点页面支持以下输入:
- 直接点击地图
- 搜索地名
- Apple Maps 分享链接
- Google Maps 分享链接
- 高德地图分享链接
- 百度地图分享链接
- 经纬度文本
- 浏览器当前位置
收藏位置
在线页面可以收藏多个位置:
- 选点后点击“收藏位置”,填写最多 30 个字符的备注。
- 点击收藏项可让地图快速跳转,再点击“储存到设备”完成切换。
- 与设备已保存坐标一致的收藏会标记“✓ 当前生效”。
- 收藏列表保存在浏览器
localStorage。 - 实际生效坐标保存在代理工具的
$persistentStore,键名为wloc_settings。
清除浏览器缓存会移除收藏列表,已经写入设备的生效坐标仍然保留。
✅ 激活与测试
设置坐标后,回到 Shadowrocket 首页:
- 将“全局路由”设为“配置”。
- 打开连接开关。
- 确认状态栏出现 VPN 图标。
- 确认 Apple WLOC 模块已经启用。
- 确认 HTTPS 解密已经开启。
- 重新打开 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内存缓存。飞行模式开关和单独关闭定位服务通常无法清除这层缓存。
高版本推荐流程一
- 先选好目标位置并“储存到设备”。
- 开启飞行模式。
- 关闭定位服务。
- 重启设备。
- 开机后关闭飞行模式,并保持 Wi-Fi 关闭。
- 连接 Shadowrocket,确认 VPN 图标出现。
- 打开定位服务。
- 打开地图验证。
高版本推荐流程二
- 关闭定位服务。
- 在选点页面设置目标位置并储存。
- 打开定位服务。
- 出现“允许访问位置信息”时,选择“下次询问或在我共享时”。
- 打开地图验证。
页面提示储存失败
按顺序检查:
- Apple WLOC 模块开关是否启用。
- Shadowrocket 代理连接是否正常。
- HTTPS 解密是否开启。
- CA 证书是否已安装并完全信任。
- MITM 主机名是否包含
gs-loc.apple.com。 - Safari 请求是否确实经过代理。
地图仍显示真实位置
- 转到室内或 Wi-Fi 环境测试,减少硬件 GPS 的影响。
- 彻底关闭地图 App 后重新打开。
- 检查 Shadowrocket 日志是否出现 WLOC 拦截记录。
- iOS 26/27 执行完整重启流程。
手动写入坐标
也可以在 BoxJS 中直接编辑 wloc_settings:
{"longitude":121.4737,"latitude":31.2304,"accuracy":25}
🔄 恢复真实位置与使用边界
方法一:关闭或删除模块
- 在 Shadowrocket 中关闭 Apple WLOC 模块,或删除模块。
- 关闭代理连接。
- 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 再重启一次,可清除系统仍在复用的缓存位置。
