wloc:优雅修改 Apple 网络定位的代理模块
📅 2026年06月27日 · 技术
iOS 网络定位的工作原理
苹果设备在室内或 GPS 信号不佳的环境下,会通过 WiFi 和基站的网络定位服务(Apple 称之为 gs-loc)来估算位置。这个请求会发送到 Apple 的服务器 gs-loc.apple.com,服务器根据周围的 WiFi 热点和基站信息返回坐标数据。
GitHub 上的 wloc 项目利用 MITM(中间人)机制,拦截并修改这个响应,让 iOS 设备返回你指定位置的坐标,从而实现网络层面的虚拟定位。这比传统的越狱后改 GPS 更优雅,因为完全不需要越狱设备。
支持哪些工具?
wloc 是一套代理模块,完美支持主流的代理工具生态:
- Surge:通过 .sgmodule 模块文件订阅
- Quantumult X:通过 .conf 配置文件订阅
- Loon:通过 .lpx 模块文件订阅
- Stash:通过 .stoverride 覆写文件订阅
- Egern:可直接使用 Surge 模块
亮点设计:快捷指令一键切换
这个项目最巧妙的设计是提供了两个 iOS 快捷指令(Shortcuts),让用户不需要手动输入经纬度就能切换位置:
- wloc 设置地理位置:在苹果地图或高德里长按选点 → 共享 → 选择快捷指令,即可自动切换定位。支持高德短链解析和 GCJ-02 到 WGS84 坐标系转换。
- wloc 清理恢复位置:一键恢复真实定位。
背后的实现也很精巧。高德地图分享出来的是短链,真实坐标藏在 302 跳转的 Location 头里,而且使用的是 GCJ-02 偏移坐标系。快捷指令本身读不到跳转头,也无法做坐标换算,所以项目部署了一个 Cloudflare Worker 来统一处理链接解析、跳转跟踪、和坐标转换,最终返回 WGS84 经纬度。
隐私与安全考量
项目的 Worker 解析接口 /api/parse 是纯转发模式——收到链接后跟踪跳转、解析坐标、返回 JSON,全程不写存储、不记日志、不缓存,处理完即丢弃。如果你不放心,Worker 源码完全开源,可以自行部署。
需要注意的是,iOS 26 及以上版本大幅强化了 locationd 的定位缓存机制。系统会将之前获取的真实定位缓存在内存中并长时间复用。这意味着安装模块后,即使日志显示"已修改",系统仍可能使用缓存旧坐标。解决方法是重启设备——重启会清空 locationd 的内存缓存。飞行模式开关或关闭定位服务在 iOS 26+ 上均无法清除缓存。
使用前提
- 设备上已安装并启用上述任一代理工具
- 已开启 MITM 功能并信任
gs-loc.apple.com - 已订阅对应平台的模块文件
这是一个设计精巧、文档完善的开源项目,将网络定位修改的门槛降到了最低,适合有虚拟定位需求的开发者和技术爱好者研究学习。