Back to home

iOS 定位修改 · 完整指南

本教程教你用 Shadowrocket(小火箭) 把 iPhone 的定位改到世界任何地方,无需越狱、无需电脑、无需开发者账号。跟着一步步做即可。

原理一句话:iPhone 靠周围 Wi-Fi、基站问苹果服务器"我在哪",本模块在苹果回坐标的半路上把坐标改成你指定的地方,iPhone 就以为自己在那里。


开始前你需要

  • 一台 iPhone
  • Shadowrocket(小火箭)App(App Store 付费应用,需先买好装好)
  • 能正常联网

此方法适用于包括 iOS 27 beta 在内的各系统版本。改坐标后按第六步"关开定位、多试几次"即可生效。


第一步:导入模块

  1. 打开 Shadowrocket
  2. 底部点 「配置」
  3. 找到 「模块」,点右上角 「+」
  4. 「来自 URL」,粘贴下面这个地址:
    https://raw.githubusercontent.com/mekos2772/ios-location-spoofer/main/ios-location-spoofer.sgmodule
  5. 保存。回到模块列表,确认这条 「iOS Location Spoofer」前面是勾选/启用 状态(右侧有个 ✓)

✅ 模块导入完成。


第二步:打开 HTTPS 解密

  1. Shadowrocket 底部点 「设置」 → 进 「HTTPS 解密」
  2. 「HTTPS 解密」 开关打开(变蓝)

    注意:有的版本这里只有 一个 开关,那是正常的,它本身就是中间人解密。旧教程截图里多出的"HTTP/2 MitM"开关是可选项,没有不影响。

  3. 看中间的 「域名」 列表,确认包含这四个(导入模块后通常会自动出现):
    gs-loc.apple.com
    gs-loc-cn.apple.com
    bluedot.is.autonavi.com
    bluedot.is.autonavi.com.gds.alibabadns.com
    如果没有,点绿色 「+」,把上面这串用逗号分隔粘进去,再点右上角 ✓ 保存

✅ 解密开关和域名就绪。


第三步:安装并信任证书(最关键,别漏)

这一步分 三个小步骤,少一步定位就改不了。

3.1 生成并安装证书

  1. 还在 HTTPS 解密页面,点 「证书」
  2. 「生成新的 CA 证书」 → 再点 「安装证书」
  3. 弹出"已下载描述文件",点好

3.2 去系统里安装描述文件

  1. 打开 iPhone 设置 App
  2. 设置 → 通用 → VPN 与设备管理
  3. 找到 Shadowrocket 的描述文件 → 点进去 → 点 「安装」(输入锁屏密码)

3.3 信任证书 ⚠️(90% 的人漏这步)

  1. 设置 → 通用 → 关于本机 → 证书信任设置
  2. Shadowrocket 那个证书的开关打开(启用完全信任)

✅ 三步都做完,解密才能真正工作。


第四步:开启代理

  1. 回到 Shadowrocket 首页
  2. 把顶部的 总开关打开(变绿色 / 显示"已连接")
  3. 第一次会弹"是否允许添加 VPN 配置",点 允许

✅ 代理已开启,上方状态栏会出现 VPN 图标。


第五步:设置你想去的坐标

默认定位是 苹果总部(美国库比提诺)。改成你想要的地点:

  1. Shadowrocket → 配置 → 模块 → 点开 「iOS Location Spoofer」
  2. 找到 argument= 那一行,改里面这两个数字:
    • latitude= → 你的 纬度
    • longitude= → 你的 经度
  3. 保存

几个常用坐标可直接抄:

地点 latitude(纬度) longitude(经度)
北京天安门 39.9087 116.3975
上海外滩 31.2397 121.4900
广州塔 23.1066 113.3245
东京塔 35.6586 139.7454

怎么查任意地点的坐标:用电脑或手机打开 Google 地图 / 高德地图,找到目标位置,右键或长按 → 复制坐标,会得到两个数字。顺序是 纬度在前、经度在后

顺手把海拔等参数也调一下(建议,别只改经纬度)

argument= 里除了经纬度,还有几个参数一起构成"完整的一次定位"。只改经纬度、海拔却停在默认的 530 米,跑到上海(近海平面)或拉萨(3600 米)时就会明显对不上、容易露馅。建议按目标地点顺手调一下:

参数 默认值 含义 建议
altitude 530 海拔(米),支持负数 改成目标地点的真实海拔(下面教你查)。上海≈4、北京≈44、拉萨≈3650、吐鲁番可为负
horizontalAccuracy 39 水平精度(米),越小越"精准" 想更像 GPS 可设 5~15;保持 39 也正常
verticalAccuracy 1000 垂直精度(米) 配了真实海拔后可调小到 10~30,让海拔显得更可信

怎么查目标地点海拔:浏览器搜"地名 海拔",或用高德/Google 地图;也可以打开这个免费接口直接看(把经纬度换成你的):

https://api.open-meteo.com/v1/elevation?latitude=31.2397&longitude=121.4900

返回里的 elevation 就是海拔(米)。

改法和经纬度一样:在 argument= 那行找到对应参数改数字,保存即可。其余参数(motionActivityType 等运动状态)一般不用动。


第六步:让定位生效

改完坐标不会立刻生效,需要"逼" iPhone 重新向苹果请求定位。方法很简单:

  1. 打开 设置 → 隐私与安全性 → 定位服务
  2. 整个关掉,等 10 秒以上,再打开
  3. 打开 地图天气 App 查看定位
  4. 没变就重复关/开定位几次,多试几遍就会生效

苹果对定位有缓存,需要重新发请求才会被拦截修改,所以有时要多关开几次、多试几遍才命中。生效后通常会稳定保持,不用一直关开。

补充触发技巧:还可以彻底杀掉地图/天气 App 再重开,或用 Apple 自带「地图」点右下角定位箭头强制重新定位。


进阶(可选):用网页地图选点,告别手动改参数

前面第五步是手动去模块里改 latitude / longitude / altitude 数字——偶尔换一次没问题,但经常换、还要每次查海拔就很烦

项目自带一个 网页地图选点工具location-picker/server.js),把这些全自动化了:

  • 手指点地图哪里,定位就到哪里,不用手查经纬度
  • 海拔按地形自动获取(点哪自动填哪的真实海拔),不用自己查
  • 水平精度 / 垂直精度 在网页上直接调,点「保存」即可
  • 支持 高德 / 卫星 / 国外地图 切换,自动处理国内地图偏移
  • 搜索地名能列出 多个候选,像真地图一样选
  • 一键"恢复真实定位":不用去关模块,网页点一下就让脚本放行、回到真实位置(再点一下恢复伪造)

用它需要什么

  • 一台能 长期运行的服务器 / VPS / NAS(用来跑这个小工具)
  • 有一点点动手能力(会用 SSH、systemd)

如果你没有服务器、只是偶尔改一次定位 → 不用装这个,按第五步手动改数字就够了。
如果你经常换地方、想"点地图就搞定" → 值得装。

怎么装

  1. 把项目里的 location-picker/server.js 上传到你的服务器运行(文件开头的注释写了启动命令,支持自带 https 复用已有证书)
  2. 在 Shadowrocket 模块的 argument= 末尾追加(前面的参数都保留):
    &configUrl=https://你的域名:端口/loc.json?token=你的密码
  3. 之后改定位就是:打开网页 → 点地图 → 按第六步关开定位生效

详细部署步骤(systemd 常驻、证书、端口、Cloudflare 等)都写在 location-picker/server.js 文件顶部的注释里,跟着做即可。

配置环境变量(必读)

server.js 通过环境变量控制,TOKEN 不设进程会直接退出,不会用弱口令兜底——这是防呆设计,避免你部署完忘了改默认密码被人扫。

变量 是否必设 默认值 说明
TOKEN 必设 网页端和模块 configUrl 里的 token= 必须一致。建议 openssl rand -hex 24 生成
PORT 8080 监听端口;1024 以下需 root
CERT HTTPS 证书 fullchain 路径;与 KEY 同时设置才走 https
KEY HTTPS 私钥路径;与 CERT 同时设置才走 https

启动示例:

# http(先跑通流程,再用 https)
TOKEN=$(openssl rand -hex 24) PORT=8080 node server.js

# https(复用 acme.sh 证书,续期无需重启,进程每 12 小时自动热加载)
TOKEN=$(openssl rand -hex 24) PORT=8443 \
CERT=/root/cert/example.com/fullchain.pem \
KEY=/root/cert/example.com/privkey.pem \
node server.js

然后模块 argument= 末尾的 configUrl 写成:

&configUrl=https://example.com:8443/loc.json?token=上面那个TOKEN

数据文件 loc.json 自动落在 server.js 同目录,记录当前坐标 / 海拔 / 精度;已写入 .gitignore,不会污染仓库。

⚠️ 不要把 TOKEN 直接写在命令行里——推荐用 systemd 的 Environment=.env + direnv,避免 historyps aux 泄露出去。

⚠️ iPhone 的 Shadowrocket 第一次访问 configUrl 时会弹一次"是否信任证书",点信任。


常见问题排查

Q:定位一直不变?
按这个顺序查:

  1. 证书信任设置里的开关有没有真的打开(第 3.3 步,最常见原因)
  2. 模块是不是在「模块」里且 已启用(右侧有 ✓)
  3. HTTPS 解密开关是否打开、四个苹果域名是否都在
  4. 有没有多试几次关/开定位(苹果有缓存,往往要重复几遍才生效)
  5. 把模块 argument= 里的 debug=false 改成 debug=true,去 Shadowrocket「数据/日志」看有没有拦截到 wloc 请求——能看到说明拦截成功

Q:模块导入后域名没自动出现?
手动在 HTTPS 解密页面把那四个域名加进去,记得点右上角 ✓ 保存。

Q:可以恢复真实定位吗?
可以。关掉模块(取消 ✓)或关掉 Shadowrocket 总开关,然后按第六步刷新一次定位即可恢复。


操作顺序速查

导入模块 → 开HTTPS解密+加域名 → 装证书并信任 → 开代理 → 改坐标保存
→ 关定位等10秒再开(没变就多试几次) → 打开地图验证

祝配置顺利。卡在哪一步,对照上面"常见问题排查"逐条检查即可。



项目说明(iOS Location Spoofer)

用代理软件的 HTTPS 解密功能,把 Apple 地图定位骗到世界任何角落。

参考项目

本项目基于 acheong08/ios-location-spoofer 的核心研究。原始项目是用 Go 写的独立 iOS App,通过自建 VPN + MITM 代理实现定位欺骗。

本仓库将其核心逻辑移植为 JavaScript,适配到 Shadowrocket / Surge / Loon / Quantumult X / Stash 五个代理平台,免编译、免开发者账号,即导即用。

相比原版新增的功能

  • 多平台支持 — 从单一 iOS App 扩展到五个代理软件,覆盖更多用户
  • 蜂窝基站坐标修改 — 原版 Go 只改了 WiFi 热点坐标,JS 版额外处理了 CellTower(字段 22/24)的坐标替换
  • 多响应格式兼容 — 自动检测 Apple 回应的封装格式(ARPC / synthetic / marker / bare),确保改后还能被 iOS 正确识别
  • 运动状态伪造 — 一并改写 motionActivityType 和 motionActivityConfidence,减少被系统识破的可能

怎么回事

iPhone 看 Wi-Fi 信号和基站信号,拿着 BSSID 列表去问 Apple 这些设备在什么位置。Apple 回一份坐标清单,iOS 根据这些坐标算出自己在哪里。

这套配置做的事情很简单:在 Apple 发回坐标的路上拦截下来,全部改成你想要的数字。iPhone 拿到改造过的坐标,算出来就是你指定的地方。


支持哪些软件

软件 文件 导入方法 状态
Shadowrocket(小火箭) ios-location-spoofer.sgmodule 配置 → 右上角 + ✅ 实测通过
Surge ios-location-spoofer.sgmodule 首页 → 模块 → 安装新模块 🟡 待测试
Loon ios-location-spoofer.lnplugin 设置 → 插件 → 添加插件 ✅ 实测通过
Quantumult X ios-location-spoofer.snippet 设置 → 重写 → 添加 🟡 待测试
Stash ios-location-spoofer.stoverride 覆写 → 安装覆写 🟡 待测试

欢迎测过的佬友在 Issue 区报实测结果;不通的地方欢迎直接提 PR 改 —— 至少写明 哪个软件、哪个版本、什么系统、报错的日志原文


怎么用

  1. 软件里打开 HTTPS 解密 / MITM 开关
  2. 安装并信任 CA 证书(设置 → 通用 → VPN 与设备管理 → 安装 → 证书信任设置 → 启用)
  3. 导入模块文件,勾上启用
  4. 断开重连 VPN,开关定位服务
  5. 打开地图 App 验证

Loon 额外说明

  1. 导入 ios-location-spoofer.lnplugin 后,在 设置 → 插件 里打开插件配置页
  2. 可直接填 纬度 / 经度地址搜索 由每 15 分钟的定时任务联网解析并缓存(首次请直接填经纬度,或保存地址后等一轮 cron)
  3. 必须开启 Loon 的 MITM 并信任证书,且插件内 [mitm] 四个域名生效
  4. 插件含 Prepare 请求脚本(设置 Accept-Encoding: identity,避免 gzip 引发 zip decompress error / 脚本超时)
  5. 改坐标后关开定位;调试打开 调试日志,在 Loon 日志搜 Location spoofer

日志若出现 Evaluate script timeoutzip decompress error:-3:更新插件并重载 Loon,确认三条脚本(Prepare / Response / Geocode cron)均已启用。


改坐标

默认 Apple Park(37.3349, -122.00902)。在模块参数里改:

latitude=39.9042&longitude=116.4074

参数:

名字 默认值 说明
latitude 37.3349 目标纬度
longitude -122.00902 目标经度
address (空) 地址搜索(Loon 插件 UI 填写,联网解析为经纬度,优先于手动经纬度)
horizontalAccuracy 39 水平精度
verticalAccuracy 1000 垂直精度
altitude 530 海拔
failOpen true 出错放行原数据
debug false 调试日志

文件清单

ios-location-spoofer.sgmodule    # Shadowrocket / Surge
ios-location-spoofer.lnplugin    # Loon
ios-location-spoofer.snippet     # Quantumult X
ios-location-spoofer.stoverride  # Stash
location-spoofer.js              # 核心脚本(四平台共用)
location-spoofer-qx.js           # QX 专用
location-spoofer-config.json     # 配置样板
使用教程.md                       # 小白保姆级图文教程
location-picker/                 # 进阶(可选):网页地图选点(Node 或 Cloudflare Worker)
location-picker/worker/          # Cloudflare Worker 版(免 VPS,支持 Loon configUrl)

进阶:网页地图选点工具

经常换定位、懒得手动查坐标改参数?项目自带 location-picker/ 地图选点工具:点地图即定位、海拔自动、精度可调,Loon / Shadowrocket 通过 configUrl 读取。

两种部署方式:

方式 目录 适合
Cloudflare Worker(推荐) location-picker/worker/ 免 VPS、自带 HTTPS
Node 自托管 location-picker/server.js 有自己的 VPS / NAS

Loon 插件 远程配置 URL 示例:

https://你的worker.workers.dev/loc.json?token=你的TOKEN

友情链接

本项目接受 LINUX DO 社区佬友监督与反馈:LINUX DO


location-picker 服务端配置

location-picker/server.js 通过环境变量控制,TOKEN 不设进程会直接退出,不会用弱口令兜底

变量 是否必设 默认值 说明
TOKEN 必设 访问口令和 Shadowrocket 模块 argument= 末尾的 configUrl 里的 token= 必须一致。建议 openssl rand -hex 24 生成
PORT 8080 监听端口;1024 以下需 root
CERT HTTPS 证书 fullchain 路径;与 KEY 同时设置才走 https