标签:# 网络协议

不用越狱如何改写系统级 GPS?剖析 iOS-Location-Spoofer-Web 的 WLOC 逆向与纯 JS 编解码架构

在 iOS 生态中进行基于地理位置(LBS)的开发与测试,向来是一件让移动端工程师和逆向研究员颇为头疼的事。无论是验证复杂的多边形地理围栏(Geofencing)、调试出海应用在不同国家/地区的本地化逻辑,还是对依赖 CoreLocation 框架的 App 进行边界条件测试,苹果严密的系统沙箱都构筑了极高的防御壁垒:Xcode 的 LocationSimulation(.gpx 模拟)需要通过数据线连接 Mac,在 iOS 17+ 引入 Developer Mode 与基于 QUIC 的 RemoteXPC/CoreDevice 协议后,这套 USB 联调通道变得更加繁琐脆弱;越狱插件(如 Relocate 或 LocationFaker)虽然强大,但在配备 A12+ 仿生芯片且运行现代 iOS 版本的日常主力机上早已脱离实际;而常规的 VPN 或节点代理仅能修改 IP 出口归属地,面对直接调用系统 GPS 硬件与 Wi-Fi 基站定位的 App 毫无效果。

最近,我深入研究了一个在技术思路上极具启发性的开源项目 —— iOS-Location-Spoofer-Web。它摒弃了依赖电脑数据线联调或越狱注入动态库的传统思路,直接将手术刀切入了苹果私有的定位辅助协议(Apple Location Services,简称 WLOC);通过在 Shadowrocket(小火箭)的 MITM 中间人代理层挂载纯 JavaScript 实现的流式 Protobuf 与 ARPC 封包编解码引擎,并结合一套基于 Cloudflare Pages Serverless 架构的 Liquid Glass(液态玻璃)前端控制面板,实现了一键在手机端修改系统全局 GPS 定位。在本文中,我将以第一视角深入拆解其底层定位劫持原理、纯 JS 64 位 Varint 运算、WLOC 最小改写策略以及 Serverless 边缘协同实践。