Yu9191/wloc
效率与系统工具通过代理模块拦截 Apple WLOC 响应,修改 iOS 的 WiFi 与基站定位坐标。
项目介绍
这个项目改的是 Apple 网络定位服务(gs-loc.apple.com / gs-loc-cn.apple.com)返回的坐标,让 iOS 的 WiFi 和基站定位落到指定位置。它本身不做界面,而是以 Surge、Quantumult X、Loon、Stash、Shadowrocket 的模块形式存在:在网页地图上选好点,模块会在后续 WLOC 请求里改写 protobuf 响应。GPS 硬件定位不受影响,因此室内、以 WiFi 定位为主的场景效果最明显。
模块包含两条脚本规则,一条拦截 /clls/wloc 响应并替换坐标,另一条保存选点页面提交的坐标到持久化存储(工作原理)。坐标统一以 WGS84 为准,苹果地图、Google、高德、百度的链接会按来源和地区换算:中国大陆的 GCJ-02 需要偏移,港澳台的苹果和 Google 链接保持 WGS84(坐标系说明)。
快速使用
前提:所用代理工具已开启 MITM,并信任了 gs-loc.apple.com 和 gs-loc-cn.apple.com 的证书;使用选点页面时 Safari 要走代理。
- 按工具订阅模块:Surge、Quantumult X、Loon、Stash、Shadowrocket。Egern 可直接用 Surge 模块;Stash 直接订阅
.stoverride,不需要经过 Script Hub 转换。 - 打开在线选点页面(建议添加到主屏幕),在地图上选点、搜索地名或粘贴地图链接。
- 点击「储存到设备」。
- 触发一次定位;iOS 15~18 通常无需重启即可生效,iOS 26+ 因为
locationd缓存通常要重启设备。
模块已启用时,用快捷指令切换更快:在地图 App 长按选点后共享,运行 wloc 设置地理位置;恢复真实位置运行 wloc 清理恢复位置。高德地图的入口是选点后分享 → 更多。快捷指令的链接解析走一个 Cloudflare Worker,负责跟随跳转并把 GCJ-02 转成 WGS84,声明不写存储、不记日志、不缓存;源码在 worker/src/parse.js,也可以自行部署。
模块参数包括 longitude、latitude、accuracy(默认 25 米)、randomRadius(默认 0,开启后每次定位在半径内随机偏移)和 logLevel。优先级为在线选点储存的坐标高于模块参数,模块参数高于默认值。
使用约束
- 必须能 MITM 拦截 Apple 的 WLOC 域名,证书不受信任就不会生效。
- 2026-11-04 起,多个 iOS 26 和 iOS 18 版本的用户反馈拦截失效并提示证书无效,部分设备在重启后出现,原因尚未确认(跟踪 Issue)。
- iOS 27 beta 6 起,Apple 在
locationd的 TLS 校验层拒绝非 Apple CA 签发的证书,软路由、网关透明代理都绕不过去,这些版本无法使用(测试记录)。 - 只改网络定位,GPS 信号强时系统可能忽略修改后的结果。
- iOS 26+ 有定位缓存,切换坐标后可能要重启才能看到变化;而 2026-11-04 之后的版本里重启本身存在上述失效风险。
- 恢复真实定位可以关闭或删除模块,也可以清除持久化键
wloc_settings让脚本进入透传模式;如果改过模块参数里的经纬度,需要先改回默认值才会透传。 - 公共选点页面有请求上限,建议自部署 Worker。一键部署按钮只支持 Workers;Pages 要在
worker/目录执行npm run pages:deploy,直接wrangler pages deploy dist会丢掉 compatibility 配置。 - 采用 AGPL-3.0,未经授权不得用于商业产品或上架应用商店。
HotRepo 点评
2026-11-06 该项目在 JavaScript 日榜排到第 5,当天新增 127 Star,总 Star 10,611、Fork 2,627。README 的维护节奏与这个曝光度相称:对 2026-11-04 的证书失效和 iOS 27 的 TLS 限制都给出了带日期的说明,并链到对应版本的 Issue;更新记录里也列明了百度地图支持、GCJ 换算修复、随机扰动和 Stash 响应格式修复等外部贡献者。真正影响选择的是版本覆盖:同一条拦截路径在 iOS 18、iOS 26 和 iOS 27 beta 6+ 上都被记录为失效或不可靠,能否使用很大程度上取决于设备的系统版本。
本文由 AI 根据项目 README 生成,更新于 ,以项目官方文档为准。