乐于分享
好东西不私藏

iOS 定位模拟大揭秘:两代开源方案的硬核技术对决(实测可以丁丁)

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!


        本文仅供技术研究和学习交流,定位模拟技术应合法合规使用。请遵守相关法律法规,不得用于任何违法违规用途。