iOS 定位模拟大揭秘:两代开源方案的硬核技术对决(实测可以丁丁)
当你的 iPhone 精准地知道你在哪,这是便利,还是隐患?从隐私保护到应用测试,从开发者调试到安全研究——iOS 定位模拟一直是技术圈的热门话题。今天,我们深度拆解两个完全不同的开源方案,看它们如何用截然不同的技术路径,实现同一个目标:让 iPhone 相信它在别处。
一、先搞清楚:iPhone 是怎么定位的?
在讨论”绕过定位检测”之前,得先理解 iPhone 的定位机制。
iPhone 的定位不是只靠 GPS。它是一套多源融合系统:
关键在于:Wi-Fi 和基站定位需要联网向苹果服务器。iPhone 扫描到周围的 Wi-Fi BSSID 列表和基站 Cell ID 后,会向 gs-loc.apple.com(国际)或 gs-loc-cn.apple.com(国内)发送请求,苹果服务器返回一份坐标清单,iPhone 根据这些坐标算出自己的位置。
这就是突破口——只要在苹果服务器返回坐标的路上拦截并改写数据,就能模拟定位。
二、两位选手登场
选手 A:ios-location-spoofer
–**项目地址**:mekos2772/ios-location-spoofer
–**技术栈**:JavaScript 脚本,运行在网络代理工具内
–**核心思路**:利用网络代理工具的 HTTPS 解密(MITM)能力,拦截苹果定位服务的响应,改写坐标
–**前身**:基于 acheong08/ios-location-spoofer 的 Go 版核心逻辑,用 JS 重写并扩展
选手 B:OpenHRTT WLoc
–**项目地址**:/OpenHRTT/wloc
–**技术栈**:Swift 原生应用,Packet Tunnel Extension + 本地 HTTPS 代理
–**核心思路**:自建网络隧道(Packet Tunnel),在设备内部搭建只匹配苹果定位域名的 HTTPS 代理,拦截并改写坐标
–**亮点**:完全独立的 App,自带地图 UI,支持 iOS 27.0
三、技术架构深度拆解
3.1 ios-location-spoofer:寄生式架构
+----------------------------------------------+| 网络代理工具(Shadowrocket 等) || +------------------------------------------+ || | HTTPS MITM 解密引擎 | || | +--------------------------------------+ | || | | location-spoofer.js (核心脚本) | | || | | - 拦截 gs-loc.apple.com 响应 | | || | | - 拦截 gs-loc-cn.apple.com 响应 | | || | | - 拦截高德定位域名响应 | | || | | - 解析 ARPC/synthetic/marker/bare | | || | | - 替换坐标 + 运动状态 | | || | +--------------------------------------+ | || +------------------------------------------+ |+----------------------------------------------+
工作流程:
1. 用户在网络代理工具中导入模块文件(“.sgmodule“/ “.lnplugin“等)
2. 网络代理工具的 MITM 引擎解密发往苹果定位域名的 HTTPS 流量
3. 核心脚本“location-spoofer.js“解析苹果返回的定位响应
4. 脚本将所有坐标替换为目标坐标(包括 Wi-Fi 热点坐标和基站坐标)
5. 同时改写运动状态(“motionActivityType“/“motionActivityConfidence“)
6. 改写后的响应返回给 iOS,系统据此计算位置
技术细节:
–**多响应格式兼容**:苹果的定位响应有多种封装格式(ARPC / synthetic / marker / bare),脚本能自动检测并处理
–**基站坐标修改**:原版 Go 只改了 Wi-Fi 热点坐标,JS 版额外处理了 CellTower(字段 22/24)的坐标替换
–**高德定位覆盖**:除了苹果自有定位服务,还拦截“bluedot.is.autonavi.com“等高德定位域名
–**运动状态伪造**:一并改写运动类型和置信度,减少被系统识破的可能
3.2 OpenHRTT WLoc:独立式架构
+------------------------------------------------------+| WLoc App (Swift) || +------------+ +--------------+ +--------------+ || | 地图 UI | | 坐标转换引擎 | | 证书管理 | || | 搜索/选点 | | WGS84/GCJ02 | | 本机下载服务 | || | 收藏/快恢 | | BD-09/Apple | | | || +-----+------+ +------+-------+ +------+-------+ || | | | || v v v || +-----------------------------------------------+ || | App Group 共享状态 | || +---------------------+-------------------------+ || | || +---------------------v-------------------------+ || | Packet Tunnel Extension (网络隧道) | || | +-------------------------------------------+ | || | | 本地 HTTPS 代理 (仅匹配定位域名) | | || | | - gs-loc.apple.com | | || | | - gs-loc-cn.apple.com | | || | | -> 解析 Protobuf 响应 -> 替换坐标 -> 返回| | || | +-------------------------------------------+ | || +-----------------------------------------------+ |+------------------------------------------------------+
工作流程:
1. 用户在 App 地图界面搜索或点选目标位置
2. 坐标写入 App Group 共享状态(App 与 Extension 之间的通信桥梁)
3. 用户点击”锁定位置”,App 请求系统创建 网络隧道配置
4. Packet Tunnel Extension 启动,建立本地 HTTPS 代理
5. 代理只拦截“gs-loc.apple.com“和“gs-loc-cn.apple.com“ 的流量
6. 解析苹果定位服务的 Protobuf 响应,替换坐标
7. 改写后的响应返回给 iOS,系统据此计算位置
技术细节:
–**Packet Tunnel API**:利用 Apple 的 NetworkExtension 框架,创建系统级 网络隧道,不需要第三方网络代理工具
–**自生成证书**:每个开发者必须在本机生成独立的根证书(“generate_apple_wloc_p12.sh“),证书私钥不会被提交到仓库
–**坐标转换引擎**:内置 WGS84、GCJ-02、BD-09、Apple Map 四种坐标系转换,国内地图坐标偏移问题自动处理
–**URL Scheme 导入**:支持 “wlocapp://“ 外部链接导入位置,可集成到快捷指令
–**本机证书服务**:App 内置 GCDWebServer,在设备上提供根证书下载,无需电脑传输
四、硬核对比:谁更强?
4.1 核心维度对比
| 维度 | ios-location-spoofer | OpenHRTT WLoc ||------|---------------------|---------------|| **技术路线** | 寄生在网络代理工具里的 JS 脚本 | 独立原生 App + Packet Tunnel || **开发语言** | JavaScript | Swift || **是否需要网络代理工具** | 必须(Shadowrocket 等) | 不需要,自建网络隧道 || **是否需要开发者账号** | 不需要 | 需要(Network Extensions 权限) || **是否需要编译** | 不需要,导入即用 | 需要 Xcode 编译 || **是否需要电脑** | 不需要,手机端完成 | 首次编译需要 Mac || **覆盖定位域名** | 苹果 + 高德(4 个域名) | 仅苹果(2 个域名) || **基站坐标修改** | 支持 | 未提及 || **运动状态伪造** | 支持 | 未提及 || **坐标系转换** | 需手动输入 WGS84 坐标 | 内置四系转换 || **地图选点 UI** | 无(需外部工具或手动输入) | 内置地图搜索/点选 || **收藏位置** | 无 | 支持 || **URL Scheme** | 无 | ``wlocapp://`` || **macOS 支持** | 无 | 原生支持 || **最低 iOS 版本** | 取决于网络代理工具 | iOS 12.0(声明) || **最新 iOS 支持** | 取决于网络代理工具 兼容性 | iOS 27.0 || **开源协议** | AGPL-3.0 | MIT |
4.2 上手门槛对比
ios-location-spoofer:
购买网络代理工具 -> 导入模块 -> 配置 MITM -> 安装信任证书 -> 改坐标 -> 刷新定位
门槛评级:低(但需要付费网络代理工具)
OpenHRTT WLoc:
有 Mac + 开发者账号 -> clone 代码 -> pod install -> 生成证书 -> 配置签名 ->Xcode 编译 -> 安装 App -> 安装信任证书 -> 选点锁定 -> 刷新定位
门槛评级:高(纯开发者向)
4.3 安全性对比
关键区别:WLoc 的代理只匹配gs-loc.apple.com和gs-loc-cn.apple.com,不应被当作通用网络隧道 或通用 HTTPS 流量分析工具。这意味着你的银行 App、社交软件等流量完全不受影响。而 ios-location-spoofer 依赖的网络代理工具的 MITM 范围取决于用户配置,配置不当可能拦截更多流量。
五、各自适合谁?
ios-location-spoofer 适合:
–**已有网络代理工具的普通用户**:如果你已经在用 Shadowrocket 或 Surge,导入一个模块就能用
–**不想折腾编译的人**:没有 Mac、没有开发者账号,也能用
–**需要覆盖高德定位的场景**:国内 App 很多使用高德定位 SDK,JS 版能一并拦截
–**需要运动状态伪造**:改写“motionActivityType“,让定位数据更”真实”
–**快速切定位的玩家**:配合 location-picker 网页工具,点地图即生效
OpenHRTT WLoc 适合:
–**iOS 开发者**:有 Mac、有开发者账号,编译运行是日常操作
–**安全研究人员**:需要完全掌控代理行为,只拦截定位域名
–**追求原生体验的人**:自带地图 UI、收藏、URL Scheme,不需要手动查坐标
–**macOS 用户**:同时需要在 Mac 上模拟定位
–**对隐私极度敏感的人**:自建隧道,所有流量本地处理,不经过第三方代理
六、技术深挖:为什么两个方案都选择了 MITM?
你可能注意到,两个方案的核心都是MITM(流量拦截技术)——拦截 HTTPS 流量,改写响应数据。这不是巧合,而是 iOS 定位系统的架构决定的。
6.1 iOS 定位请求链路
iPhone 扫描 Wi-Fi/基站|发送 BSSID/Cell ID 列表到 gs-loc.apple.com|苹果服务器返回坐标清单(Protobuf 格式)|iOS CoreLocation 框架计算位置|App 通过 CLLocationManager 获取位置
可以动手脚的位置:
1.**网络层**(两个方案的选择):拦截 HTTPS 响应,改写坐标 — 两个方案都选了这里
2.**系统框架层**:Hook CoreLocation(需要 Jailbreak 或 TrollStore)
3.**App 层**:在 App 内部 Mock CLLocationManager(只影响单个 App,Xcode 调试模式可用)
4.**硬件层**:外置 GPS 模拟器发射假信号(成本高,但最难被检测)
6.2 为什么不选其他方案?
| 方案 | 优点 | 缺点 ||------|------|------|| Jailbreak Hook CoreLocation | 全局生效,最彻底 | 需要 Jailbreak,安全风险大,新 iOS 难以 Jailbreak || Xcode Simulate Location | 官方支持,安全 | 只影响调试 App,需要 Mac,不能全局 || 外置 GPS 模拟器 | 最难被检测 | 硬件成本高,操作复杂 || **MITM 拦截** | **无需 Jailbreak,全局生效,成本低** | **需要安装证书,部分 App 可检测** |
MITM 是在”不需要 Jailbreak”和”全局生效”之间的最佳平衡点。
6.3 苹果的防御:isSimulatedBySoftware
从 iOS 15 开始,CLLocation 增加了 isSimulatedBySoftware 属性,App 可以检测位置是否被软件模拟。但这个标记目前主要在 Xcode 调试模式下触发,MITM 方式改写的定位不会触发此标记——因为从 iOS 的角度看,它收到的就是”真实”的苹果服务器响应。
苹果开发者在论坛中明确表示:无法保证能检测所有定位模拟工具,建议开发者通过 Feedback Report 报告问题。
七、实战建议
7.1 如果你只是想试试
直接用ios-location-spoofer,5 分钟搞定。前提是你已经有网络代理工具。
7.2 如果你是开发者,想深入研究
两个都装。先用 ios-location-spoofer 快速验证效果,再用 WLoc 深入理解 Packet Tunnel 和 Protobuf 解析的技术细节。
7.3 关于”被检测”的真相
–**普通 App(地图、天气、社交)**:基本不检测,两种方案都能骗过
–**金融类 App**:可能检测 网络隧道状态或证书信任链,但一般不检测定位真实性
–**游戏类 App(如 位置类游戏)**:有专门的定位异常检测,MITM 方案可能被识别
–**企业级 App(企业办公 App等)**:部分有 Wi-Fi 指纹验证,单纯改坐标可能不够
7.4 恢复真实定位
| 方案 | 恢复方式 ||------|---------|| ios-location-spoofer | ``enabled=false`` 或关模块或关网络代理工具 || WLoc | 退出 App 自动断开网络隧道,或手动断开 |
八、总结:技术路线之争,没有绝对赢家
| | ios-location-spoofer | OpenHRTT WLoc ||---|---|---|| **一句话评价** | 低门槛的"寄生者" | 高门槛的"独立者" || **技术哲学** | 复用已有基础设施,最小化用户成本 | 从零构建完整方案,最大化控制力 || **适合人群** | 有网络代理工具的普通用户 | 有开发能力的 iOS 研究者 || **最大优势** | 上手简单,覆盖面广 | 安全可控,原生体验 || **最大劣势** | 依赖第三方网络代理工具 | 编译门槛高 |
两个项目代表了两种截然不同的技术哲学:
–**ios-location-spoofer**是”站在巨人肩膀上”——利用网络代理工具已有的 MITM 能力,用最少的代码实现最多的功能。它的价值在于**可及性**:让更多人能用到定位模拟技术。
–**OpenHRTT WLoc**是”从地基开始盖楼”——自建网络隧道、自生成证书、自绘地图 UI,一切尽在掌控。它的价值在于**自主性**:不依赖任何第三方,代码和行为完全透明。
它们不是竞争关系,而是互补关系。一个降低了使用门槛,一个提升了技术上限。对于 iOS 定位模拟这个领域来说,两个项目都是重要的贡献。
九、项目链接
–**ios-location-spoofer**:mekos2772/ios-location-spoofer
–**OpenHRTT WLoc**:OpenHRTT/wloc
如果觉得有用,去项目主页给作者点个 Star!
本文仅供技术研究和学习交流,定位模拟技术应合法合规使用。请遵守相关法律法规,不得用于任何违法违规用途。
夜雨聆风