Files
2026-09-09 18:10:20 +08:00

232 lines
12 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# iOS-Location-Spoofer-Web
[![License: CC BY-NC-SA 4.0](https://img.shields.io/badge/License-CC%20BY--NC--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-nc-sa/4.0/)
> ### ⚠️ 【防骗与严禁倒卖声明】
> 本项目为 **100% 免费开源项目**(唯一官方开源仓库:[akudamatata/iOS-Location-Spoofer-Web](https://github.com/akudamatata/iOS-Location-Spoofer-Web)),遵循 **CC BY-NC-SA 4.0** 开源许可协议。
> **「严禁任何个人或组织以任何形式进行二次售卖、转售、商业收费代搭建、打包牟利等行为」**。
> 若您是通过闲鱼、淘宝、拼多多、付费微信群等任何渠道付费购买获得本项目的,**您已被欺诈,请立即向购买平台申请退款并举报不良商家!**
📱 基于 **Shadowrocket MITM** 方案的 iOS GPS 模拟定位 Web 管理面板(**个人单用户自建专属**)。
采用 Apple 2026 **Liquid Glass(液态玻璃)** 视觉美学设计,全屏地图选点,后端与核心规则支持 100% 独立自建托管。
---
## 🌟 核心特性
| | 特性 | 说明 |
|---|---|---|
| 🗺 | **多地图切换** | CartoDB / Esri 卫星 / 高德地图 / 高德卫星,支持国内外全域定位 |
| 🎯 | **准星锁定** | 滑动地图对准目标,点击锁定后地图显示蓝色图钉标记已生效坐标 |
| 📍 | **当前位置** | 一键回到当前物理位置并自动纠偏对齐 |
| 🔒 | **后端完全自建** | 内置自托管 `location-spoofer.js` 与规则模块,无需依赖任何外部规则订阅 |
| 👤 | **个人专属架构** | 专为个人单用户设计的极简 Serverless 架构,单实例专属,零维护成本 |
| ⭐ | **智能收藏夹** | 毛玻璃面板,保存常用地点;已收藏位置星标实时高亮,支持一键切换与取消 |
| 🔢 | **高级参数** | 可调节海拔、水平精度、垂直精度(支持按地形自动获取海拔高度)|
| 🔍 | **坐标直跳** | 搜索框直接粘贴经纬度(如 `39.9087, 116.3975`)即刻精准跳转 |
| 🌙 | **深色模式** | 设置面板内一键切换深色/浅色,偏好自动记忆 |
| 📲 | **PWA 支持** | Safari「添加到主屏幕」后全屏运行,体验对齐原生 iOS App |
| ⚡️ | **WLOC 最小改写** | 采用最小改写策略(Minimal Rewrite)与滑窗扫描兜底,稳定适配最新 iOS 系统 |
### 📸 界面预览
<table align="center">
<tr>
<td align="center" width="33%">
<img src="./docs/screenshots/1-map-picker.jpg" alt="全屏地图选点" width="100%"><br>
<sub><b>全屏地图选点</b></sub>
</td>
<td align="center" width="33%">
<img src="./docs/screenshots/2-favorites.jpg" alt="智能收藏夹" width="100%"><br>
<sub><b>智能收藏夹</b></sub>
</td>
<td align="center" width="33%">
<img src="./docs/screenshots/3-shadowrocket-config.jpg" alt="设置与小火箭配置" width="100%"><br>
<sub><b>设置与小火箭配置</b></sub>
</td>
</tr>
<tr>
<td align="center" width="33%">
<img src="./docs/screenshots/4-map-layers.jpg" alt="多图层图源切换" width="100%"><br>
<sub><b>多图层图源切换</b></sub>
</td>
<td align="center" width="33%">
<img src="./docs/screenshots/5-advanced-params.jpg" alt="卫星图与高级参数" width="100%"><br>
<sub><b>卫星图与高级参数</b></sub>
</td>
<td align="center" width="33%">
<img src="./docs/screenshots/6-search-history.jpg" alt="地点搜索与历史" width="100%"><br>
<sub><b>地点搜索与历史</b></sub>
</td>
</tr>
</table>
---
## 📱 系统与客户端兼容性矩阵
| 平台 / 系统 / 软件 | 版本范围 | 支持状态 | 说明 |
|---|---|---|---|
| **iOS / iPadOS** | iOS 12.0 ~ iOS 26.x | 🟢 完美支持 | 覆盖所有主流正式版系统,零 BigInt 纯原生实现,稳定运行 |
| **iOS / iPadOS** | iOS 27 beta 1 ~ beta 5 | 🟢 完美支持 | 已跟进 WLOC 最小改写策略与封装扫描兜底 |
| **iOS / iPadOS** | iOS 27 beta 6 及以上 | ⚠️ 系统受限 | 苹果在系统定位组件开启了强 TLS 证书固定(Pinning),目前所有 MITM 方案均受限 |
| **Shadowrocket** | v2.2.x 及以上版本 | 🟢 完美支持 | 需开启 HTTPS 解密并信任 CA 证书 |
---
## 🌐 外部服务与数据隐私边界
为了在浏览器端提供流畅的地图交互和选点体验,前端 Web 面板在必要时会直接请求以下公开 WebGIS 与基础服务:
1. **地图底图瓦片 (Map Tiles)**:
- 高德地图 / 高德卫星(国内推荐,加载高德官方公开瓦片)
- CartoDB / Esri World Imagery(国外底图与高精度卫星影像)
2. **地点搜索接口 (Geocoding)**:
- 高德 Web 服务 API(如配置 `AMAP_KEY`,用于国内地名关键字联想)
- OpenStreetMap Nominatim(未配置高德 Key 时的国际搜索备用源)
3. **地形海拔查询**:
- Open-Meteo Elevation API(点击地图时自动获取目标坐标的真实地形海拔)
4. **静态前端资源 CDN**:
- `unpkg.com`(Leaflet 地图基础库)、`Google Fonts`(Inter 字体)
> 💡 **数据安全声明**:所有自建配置、Token 鉴权、当前定位坐标与收藏夹数据均仅保存在您私有部署的 Cloudflare KV 中,绝不向任何第三方上传您的私有定位坐标记录。
---
## 🐳 Docker 自托管
Docker 版本内置一个零依赖 Node.js 后端,用本地 JSON 文件替代 Cloudflare Pages Functions 与 KV,原有网页、API 路径和 Shadowrocket 模块链接保持不变。
```bash
git clone https://github.com/你的账号/iOS-Location-Spoofer-Web.git
cd iOS-Location-Spoofer-Web
cp .env.example .env
```
编辑 `.env`,至少设置一个足够长的随机 `TOKEN`,然后启动:
```bash
docker compose up -d --build
curl http://127.0.0.1:8080/healthz
```
默认监听 `0.0.0.0:8080`,坐标和收藏夹保存在 Docker volume `spoofer_data`。生产环境请在容器前配置 Nginx、Caddy 或其他 HTTPS 反向代理,并把 `X-Forwarded-Proto` 和 `X-Forwarded-Host` 传给应用,以便生成正确的 Shadowrocket 模块链接。
环境变量:
| 变量 | 必填 | 默认值 | 说明 |
|---|---:|---|---|
| `TOKEN` | 是 | 无 | 网页和所有定位 API 的访问密码;未设置时服务拒绝启动 |
| `AMAP_KEY` | 否 | 空 | 高德 Web 服务 Key |
| `PORT` | 否 | `8080` | 宿主机暴露端口 |
| `LISTEN_ADDRESS` | 否 | `0.0.0.0` | 宿主机监听地址;只供本机反代时可设为 `127.0.0.1` |
升级时执行:
```bash
git pull
docker compose up -d --build
```
---
## 🛠 快速部署 (Cloudflare Pages)
本项目专为 **Cloudflare Pages** 设计,部署于全球边缘节点,实现 **零维护、零服务器成本、个人专属**。
### 1. 准备工作
- 注册并登录 [Cloudflare](https://dash.cloudflare.com/) 账号。
- 在 Cloudflare Dashboard 左侧菜单找到 **Workers & Pages** -> **KV**。
- 创建一个新的 KV 命名空间,命名为 `SPOOFER_DATA`。
### 2. Fork 仓库
点击右上角的 Fork,将本仓库 Fork 到您的 GitHub 账号下。
### 3. 创建 Pages 项目
1. 在 Cloudflare Dashboard 侧边栏进入 **Workers & Pages** -> **Overview**,点击右上角 **Create application** (创建应用程序)。
2. ⚠️ **关键:请务必点击顶部的「Pages (网页)」标签卡**(切勿停留在默认的 Workers 标签卡上),然后点击 **Connect to Git** (连接到 Git)。
3. 授权连接您的 GitHub,选择您刚才 Fork 的仓库。
4. 在构建设置 (Build settings) 页面:
- **Framework preset** (框架预设): 选择 `None`
- **Build command** (构建命令): 填写 `exit 0`
- **Build output directory** (构建输出目录): 填写 `public`
5. 展开 **Environment variables (advanced)** (环境变量),添加以下变量:
- `TOKEN`: 您的私有访问密码(必填,用于面板访问与接口鉴权,服务端已做安全脱敏保护)
- `AMAP_KEY`: 您的高德地图 Web 服务 Key(用于国内高精度地名搜索,可选但强烈推荐)
6. 点击 **Save and Deploy**(保存并部署)。首次部署由于尚未绑定 KV 会提示无法保存数据,这是正常的,请继续下一步。
### 4. 绑定 KV 命名空间
1. 部署完成后,进入该 Pages 项目的详情页,点击顶部的 **Settings** -> **Functions**。
2. 往下滚动找到 **KV namespace bindings**。
3. 点击 **Add binding**:
- **Variable name (变量名称)**: 填入 `SPOOFER_DATA` (必须完全一致)
- **KV namespace (KV 命名空间)**: 选择您在第一步创建的 `SPOOFER_DATA`。
4. 重新部署一次生效:回到该项目的 **Deployments (部署)** 页面,点击列表最上面一次部署右侧的 `...` 图标 -> **Retry deployment (重试部署)**。
部署完成后,您将获得一个类似 `https://your-project.pages.dev` 的专属域名,可直接通过手机访问面板!
---
## 📲 Shadowrocket 配置指南
### 1. 添加为模块 (Module)
1. 在手机浏览器打开面板,输入您的 Token 登录。
2. 点击页面右上角 **「⚙️ 设置」** 图标,复制**模块链接**。
3. 打开 Shadowrocket → 底部 **「配置」** 标签页 → 点击进入 **「模块 (Modules)」**。
4. 点击右上角 **「+」** → 粘贴刚才复制的链接 → 点击**下载**。
5. 确保下载好的 `iOS Location Spoofer` 模块开关处于**开启**状态。
### 2. 开启 HTTPS 解密与安装证书
点击当前配置文件进入详情 → **「HTTPS 解密」**:
1. 开启 **「HTTPS 解密」** 开关
2. 开启 **「通过 HTTP/2 进行中间人攻击 (MitM)」** 开关
3. 点击 **「证书」** → **「生成新的 CA 证书」** → **「安装证书」**
4. 前往 iPhone **「设置 → 通用 → 关于本机 → 证书信任设置」**,找到 Shadowrocket 证书并**完全信任**
### 3. 启动 VPN
回到小火箭首页,开启 VPN 开关,模式保持 **「配置 (Config)」** 即可。
---
## 🧭 日常使用流程
1. **打开面板**:手机浏览器访问面板地址,输入 Token 登录(登录后 30 天内免密直接进入)
2. **选点**:拖动地图准星,或顶部搜索框输入地名 / 直接粘贴经纬度(如 `39.9087, 116.3975`)
3. **锁定**:点击 **「锁定」** 按钮,地图上出现蓝色图钉,提示"位置已锁定"
4. **刷新定位**:前往 iPhone **「设置 → 隐私与安全 → 定位服务」**,关闭后等 10 秒再重新开启
5. **验证**:打开高德地图、微信或系统地图,此时模拟定位已顺利生效 ✅
> **换位置**:重复步骤 2-4 即可,无需重启小火箭。
> **收藏常用地点**:锁定位置后点击准星旁的 ⭐ 星标即可收藏,再次点击实心星可取消收藏。
> **夜间使用**:点击设置面板底部的「深色模式」开关,偏好自动记忆。
> **添加到主屏幕 (PWA)**:在 Safari 中点击「分享」→「添加到主屏幕」,即可像 App 一样全屏使用。
---
## ⚖️ 项目声明与免责条款
1. **原创研发**:本项目全量源码(包括 Liquid Glass Web 前端设计、Cloudflare Pages Serverless 后端 API 体系、以及基于纯 JS 原生实现的 `location-spoofer.js` 核心代理拦截改写引擎)均为**100% 独立自主设计与研发编写**。
2. **免责声明**:本项目仅供开发者用于地图开发测试、地理位置接口调试以及技术性学习研究,请勿用于非法用途。因违规使用产生的一切风险与后果由使用者自行承担。
---
## 📄 开源授权与使用条款
本项目采用 **[Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0)](https://creativecommons.org/licenses/by-nc-sa/4.0/)** 许可协议。
**核心约束条款:**
* **署名 (Attribution)**:在衍生项目、教程或分享中必须保留原作者信息及本项目 GitHub 仓库链接。
* **非商业性使用 (Non-Commercial)**:**「严禁以任何形式进行二次售卖、转售、商业收费代搭建、打包牟利等行为」**。
* **相同方式共享 (Share-Alike)**:若您修改、转换或以此代码为基础进行创作,必须采用相同或兼容的 CC 协议进行开源共享。
---
## 🔗 友情链接
- [LINUX DO - 新的理想型社区](https://linux.do/)