The project's README from github.com/HuangZhuoRui/LocationSpoofer. As one markdown file: README.md.
基于 KernelSU + LSPosed 的 Android 系统级虚拟定位与无线环境伪装框架
Android system-level location spoofing and wireless environment simulation framework based on KernelSU + LSPosed
📢 加入我们的 Telegram 交流群 进行
技术探讨、催更、吹牛逼、搞抽象。
在现代 Android 系统的风控与反作弊环境中,传统的“模拟位置(Mock Location)”开发者选项已被商业 SDK(如高德风控、腾讯安全、百度定位、网易易盾、各类考勤及打卡风控系统)列为高风险特征。这类检测机制不仅验证 isFromMockProvider / isMock 标志位,还会主动采集并交叉比对设备所处的周围物理环境:
LocationSpoofer 是专为应对深度风控检测而设计的系统级虚拟定位与无线环境模拟方案。 项目基于 KernelSU / APatch / Magisk 获取底层 Root 权限,并利用 LSPosed (libxposed API 101+) 框架在 Zygote 阶段注入目标应用进程,以高物理契合度拦截并伪造所有与位置、卫星、基站、Wi-Fi、蓝牙、传感器相关的底层 API 响应,确保应用获取自洽且真实的虚假环境指纹。
┌─────────────────────────────────────────────────────────────────────────┐
│ LocationSpoofer │
│ 系统级虚拟定位与无线环境模拟 │
└─────────────────────────────────────────────────────────────────────────┘
│ │ │
▼ ▼ ▼
【空间定位与物理仿真】 【无线电与传感器模拟】 【反检测套件】
• 三地图引擎自由切换 • Wi-Fi 扫描与连接态伪装 • Xposed 堆栈调用帧清洗
• WGS-84/GCJ-02/BD-09 自适应 • 2G-5G NR 蜂窝基站小区模拟 • ClassLoader 探测隔离
• Ornstein-Uhlenbeck 抖动 • BLE 蓝牙信标扫描过滤 • isFromMockProvider 抹除
• 步态横向摇摆与高斯噪声 • WiGLE / OpenCellID 云端导入 • AppOps OP_MOCK_LOCATION 隐藏
• 真实路网拟合与红绿灯停候 • 空间反距离加权 (IDW) 插值 • Settings.Secure 开关覆写
• 悬浮窗遥控阻尼摇杆 • 步频与计步传感器联动 • MultiDex 动态 Class 拦截
WGS-84 物理坐标与卫星数据;MyLocationData)自动映射对应坐标系(GCJ-02 / BD-09),规避坐标偏移与 (0.0, 0.0) 兜底问题;WGS-84、GCJ-02 或 BD-09。真实 GPS 芯片输出的坐标因电离层延迟、多径效应及接收机热噪声,天然具有高斯分布的白噪声特征。
Ornstein-Uhlenbeck 随机过程:引入物理学均值回归随机过程模型来生成自然位置抖动,其状态随机微分方程定义为:
$$\mathrm{d}X_t = -\alpha X_t \mathrm{d}t + \sigma \mathrm{d}W_t$$
其中 $\sigma$ 为漂移强度,$\alpha$ 为均值回归系数(设定为 0.05,即每秒将当前漂移拉回 5%)。它产生符合物理规律的低频缓慢漂移,并在 3-Sigma 原则下严格有界(硬性限制在 4 米内),防止漂移发散引发异常。
步频横向抖动(Gait Jitter):步行或跑步模式下,引擎沿当前移动方向的正交横向上施加高斯横向位移:
$$\Delta L_{\text{lateral}} = 0.15 \cdot \mathcal{N}(0, 1) \quad (\text{米})$$
模拟人类真实行走时身体左右晃动的步态特征。
高度(Altitude)与精度(Accuracy)慢漂移:精度值与海拔高度动态波动,模拟大气对流层延迟与卫星几何分布的自然变化。
Throwable.getStackTrace 和 Thread.getStackTrace,自动过滤移除包含 de.robv.android.xposed、io.github.libxposed、org.lsposed 等特征调用帧,阻止反作弊 SDK 在异常堆栈回溯中嗅探 Hook 框架。Class.forName 和 ClassLoader.loadClass,对 Xposed 特征类名的探测统一返回 ClassNotFoundException。ClassLoader.loadClass 动态捕获并安装次级 Dex(如 classes16.dex)中的定位组件,配合 /proc/self/cmdline 锁定宿主进程主包名,避免内嵌 WebView 或插件改变全局上下文。Location.isFromMockProvider() 和 Location.isMock() 永久覆写为 false;Location 内部字段 mMock 和 mIsFromMockProvider 重写为 false,并移除 Extra Bundle 中的 mockLocation 标记;AppOpsManager 的 OP_MOCK_LOCATION (58) 权限查询,返回 MODE_IGNORED (1);Settings.Secure 中 mock_location 及 allow_mock_location 的读取,返回 0;LocationManager 中的虚拟 Test Provider,将其统一伪装为系统原生 gps 提供者。实地扫街扫描器(EnvironmentScanner):后台自动扫描物理世界中的 Wi-Fi 接入点(SSID/BSSID/RSSI/频率/信道/Wi-Fi标准)、基站小区信息(GSM, WCDMA, CDMA, LTE, 5G NR 及 dbm 信号强度)以及附近 BLE 蓝牙信标。
空间反距离加权(IDW)插值:在 Room 数据库中检索周边 50 米范围内的历史采集点,使用反距离平方比作为权重:
$$w_i = \frac{1}{d_i^2}$$
对 Wi-Fi RSSI 信号强度与蜂窝小区 dbm 信号进行平滑插值,保证移动过程中信号连续渐变。
无线电数据精细化管理与手动指定:
Wi-Fi 与基站全接口模拟:
WifiManager.getScanResults()、getConnectionInfo()、getConfiguredNetworks()、getDhcpInfo();TelephonyManager.getAllCellInfo()、getCellLocation()、getNetworkOperator()、getServiceState()、getSignalStrength()、PhoneStateListener、TelephonyCallback;云端数据导入 (WiGLE & OpenCellID):支持配置 WiGLE API 与 OpenCellID API,在线拉取全球指定坐标周边的真实物理 Wi-Fi 与移动基站,自动入库缓存并离线复用。
海量数据空间索引:采用空间索引与分页机制,支持高效检索与存储数千条本地与云端无线电记录,保障界面与后台运行流畅。
GnssStatus 类,模拟 20+ 颗包括 GPS、北斗、GLONASS 的卫星分布矩阵,注入 PRN 标识、信噪比(CNR)、俯仰角、方位角等,并正确汇报 usedInFix 状态。OnNmeaMessageListener / GpsStatus.NmeaListener,根据当前模拟坐标、航向角、速度和卫星信息,动态拼装符合规范的原始 $GPGGA, $GPRMC, $GPGSA, $GPGSV 语句并计算校验和(Checksum)输出。Location 对象时,强制在 getExtras() 中注入 satellites=20, satellites_in_view=20, satellites_used_in_fix=18,防止定位 SDK 判定无卫星搜星而丢弃 GPS 信号。SensorManager,接管 Sensor.TYPE_STEP_COUNTER(总步数)和 Sensor.TYPE_STEP_DETECTOR(单步脉冲)。0.7m/步 换算)自动生成平滑递增的步数事件,适配运动健康与校园跑打卡软件。本项目采用 MVVM + Clean Architecture,并按职责拆分为 6 个 Gradle 模块:
| 模块 | 类型 | 职责 |
|---|---|---|
app |
Android App | 宿主壳工程:Application / MainActivity、签名与打包配置、聚合各模块的 Koin DI;仅把 xposed 模块的产物(LocationHooker 类与 META-INF/xposed/* 元数据)打进最终 APK 供 LSPosed 扫描加载,自身不直接调用其代码 |
app-ui |
Android Library | 全部 Jetpack Compose UI:页面、弹窗、自研“液态玻璃”组件(ui/liquid)与 ViewModel 层 |
service |
Android Library | 前台保活服务 SpoofingService、悬浮摇杆 FloatingJoystickService、开机自启广播等后台/服务层 |
xposed |
Android Library | LSPosed / Xposed 注入模块本体:LocationHooker 入口 + hooks/、hooks/network/ 下的各类 Hook 实现 |
core-data |
Android Library | app / app-ui / service 三端共用的数据与业务层:Room 数据库、各类 Repository,以及 ConfigManager、RootManager、EnvironmentScanner 等核心工具类 |
core-geo |
纯 Kotlin/JVM | 全项目唯一不依赖 Android 的模块:坐标系换算、路线几何与运动真实度引擎,以及 Hook 端与 App 共用的系统识别规则(vendor/) |
两个变体统一通过 libxposed 的远程配置通道传递 JSON,Hook 从内存缓存读取:
┌─────────────────────────────────────────────────────────────────────────┐
│ LocationSpoofer 宿主进程(app / app-ui / service / core-data) │
│ ┌─────────────────────────┐ ┌──────────────────────────────────────┐ │
│ │ Triple Map Engine │ │ RouteStateMachine │ │
│ │ (AMap / Baidu / Google) │ │ (IDLE / READY / RUN / PAUSE) │ │
│ └────────────┬────────────┘ └──────────────────┬───────────────────┘ │
│ │ │ │
│ ┌────────────▼──────────────────────────────────▼───────────────────┐ │
│ │ ConfigManager(core-data) │ │
│ │ 序列化配置与坐标系映射,通过框架发布完整配置快照 │ │
│ └──────────────────────────────────┬────────────────────────────────┘ │
│ ┌──────────────────────────────────▼────────────────────────────────┐ │
│ │ SpoofingService(service) │ │
│ │ 前台保活服务、悬浮摇杆控制器与路网 / 步态计算 │ │
│ └───────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────┬───────────────────────────────────┘
│ (ConfigManager 发布远程偏好 / 远程文件)
▼
┌─────────────────────────────────────────────┐
│ 框架管理的远程偏好 / 配置文件 │
└──────────────────────┬──────────────────────┘
│ (框架通知 → 后台解码 → 原子更新内存缓存)
▼ LSPosed / libxposed (API 101+) 注入
┌─────────────────────────────────────────────────────────────────────────┐
│ 目标 App 进程 │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ LocationHooker │ │
│ │ • Location/GNSS:BaseLocationHooker、GnssStatusHooker 等 │ │
│ │ • 地图 SDK:AMapHooker / BaiduMapHooker / TencentMapHooker │ │
│ │ • hooks/network/:Wifi* / Cellular* / Bluetooth*Hooker 等 │ │
│ │ • SensorStepHooker(计步)/ AntiDetectionHooker(反检测) │ │
│ └───────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
[!NOTE] 跨进程通信 (IPC) 设计:
ConfigManager使用XposedService.getRemotePreferences()发布完整 JSON 快照;UTF-8 配置超过 128 KiB 时先写入框架管理的独立远程文件,再原子发布文件指针,避免大配置占满 Binder 事务。全局与非全局版共用这一通道,无需修改 SELinux 策略或向公共临时目录写配置。 Hook 在模块加载时获取初始快照并注册配置变化监听,由后台线程解码、归一化后替换内存缓存;Hook 调用只读缓存。后台每秒检查框架偏好的内存快照以重试启动时的失败,路线派发和服务发现仍由独立定时器执行。 App 私有偏好保存最新期望状态,发布失败自动重试,框架重连后重新发布;停止或暂停请求不会被较早的活动配置覆盖。新通道发布成功后会清理旧配置、探针及脚本。框架仍负责配置持久化,此方案并非完全不落盘。 需要框架实现远程配置能力。升级后安装对应变体、启用模块并重启设备,再开始模拟;全局版可在“系统适配 → Hook 运行状态”检查配置来源为libxposed:remote-preferences或libxposed:remote-file,并核对各进程的发布时间。此次通道迁移尚需真机复验。
全局方案直接 Hook 系统服务,不同厂商 / 系统版本的内部实现不一样,需要逐个适配:
# 1. 克隆代码仓库
git clone https://github.com/your-username/LocationSpoofer.git
# 2. 编译 Debug APK 并直接安装到设备
./gradlew installDebug
WGS-84、GCJ-02 或 BD-09,Hook 层将自动根据目标 App 进行转换。app / app-ui / service / xposed / core-data / core-geo 六个 Gradle 模块(详见系统架构)top.yukonga.miuix.kmp)提供的毛玻璃模糊底层能力,并在此之上自研 ui/liquid 组件包(改编自开源项目 AndroidLiquidGlass / ILoveWork,Apache-2.0)实现悬浮底栏、透镜折射与阻尼拖拽等 Liquid Glass 交互效果coreDataModule / serviceModule / viewModelModule 三个子模块,由 app 模块的 appModules 统一聚合注册core-data 模块)xposed 模块的 hooks/ 与 hooks/network/ 子包本程序仅供学习研究、技术交流以及个人合法合规测试(如开发者定位测试、设备兼容性调试)使用。 使用者请勿将本工具用于任何违法违规或违反相关平台服务协议的活动(包括但不限于虚假打卡、网络考试作弊、商业欺诈等)。 使用本模块造成的任何账号封禁、数据丢失、法律纠纷或其他直接/间接损失,均由使用者自行承担,作者不对此承担任何责任。
本项目基于 GNU General Public License v3.0 协议开源。
Copyright (C) 2026 SuseOAA