基于 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 架构,利用 Root 权限与系统共享内存通道规避了 Android 11+ 的沙盒可见性隔离,实现零权限跨进程配置传递:
┌─────────────────────────────────────────────────────────────────────────┐
│ LocationSpoofer (宿主 App) │
│ ┌─────────────────────────┐ ┌──────────────────────────────────────┐ │
│ │ Triple Map Engine │ │ RouteStateMachine │ │
│ │ (AMap / Baidu / Google) │ │ (IDLE / READY / RUN / PAUSE) │ │
│ └────────────┬────────────┘ └──────────────────┬───────────────────┘ │
│ │ │ │
│ ┌────────────▼──────────────────────────────────▼───────────────────┐ │
│ │ ConfigManager │ │
│ │ (将完整配置与多坐标系映射写入 /data/local/tmp 共享目录) │ │
│ └──────────────────────────────────┬────────────────────────────────┘ │
│ ┌──────────────────────────────────▼────────────────────────────────┐ │
│ │ SpoofingService │ │
│ │ (前台保活服务、步态引擎、路网计算与悬浮窗控制器) │ │
│ └───────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────┬───────────────────────────────────┘
│ (写入 JSON 配置,chmod 777 + chcon)
▼
┌───────────────────────────┐
│ /data/local/tmp/ 共享文件 │
└─────────────┬─────────────┘
│ (守护线程 1000ms 轮询 + Volatile 缓存)
▼ LSPosed / libxposed (API 101+) 注入
┌─────────────────────────────────────────────────────────────────────────┐
│ 目标 App 进程 │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ LocationHooker │ │
│ │ • BaseLocationHooker (Location / LocationManager / NMEA / GNSS) │ │
│ │ • MapSdkHooker (Baidu BDLocation / AMap / Tencent SDK & 蓝点图层) │ │
│ │ • WifiHooker (WifiManager / ScanResults / Connection / DHCP) │ │
│ │ • CellHooker (TelephonyManager / 2G-5G NR 小区 / 运营商 / 基带) │ │
│ │ • BluetoothHooker (BluetoothLeScanner / BLE Beacons 过滤) │ │
│ │ • SensorStepHooker (StepCounter / StepDetector 计步联动) │ │
│ │ • AntiDetectionHooker (Xposed 堆栈清洗 / ClassLoader 隔离) │ │
│ └───────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
[!NOTE] 跨进程通信 (IPC) 设计: 目标 App 进程在沙盒内运行时,由于 Android 11+ 包可见性及 SELinux 策略,使用
ContentProvider会导致主线程卡顿并产生Failed to find provider info错误。 宿主 App 借助 Root 权限将配置以 JSON 格式写入/data/local/tmp/locationspoofer_config.json,赋予777权限及shell_data_fileSELinux 上下文。 目标沙盒内的LocationHooker启动后台守护线程,每 1000ms 异步读取文件并存储在 Volatile 内存中。主线程的 Hook 方法读取配置时为 0-IO 延迟,避免导致目标 App 丢帧与卡顿。
# 1. 克隆代码仓库
git clone https://github.com/your-username/LocationSpoofer.git
# 2. 编译 Debug APK 并直接安装到设备
./gradlew installDebug
WGS-84、GCJ-02 或 BD-09,Hook 层将自动根据目标 App 进行转换。本程序仅供学习研究、技术交流以及个人合法合规测试(如开发者定位测试、设备兼容性调试)使用。 使用者请勿将本工具用于任何违法违规或违反相关平台服务协议的活动(包括但不限于虚假打卡、网络考试作弊、商业欺诈等)。 使用本模块造成的任何账号封禁、数据丢失、法律纠纷或其他直接/间接损失,均由使用者自行承担,作者不对此承担任何责任。
本项目基于 GNU General Public License v3.0 协议开源。
Copyright (C) 2026 SuseOAA
168 commits
5 commits
Kotlin
100.0%
基于 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 架构,利用 Root 权限与系统共享内存通道规避了 Android 11+ 的沙盒可见性隔离,实现零权限跨进程配置传递:
┌─────────────────────────────────────────────────────────────────────────┐
│ LocationSpoofer (宿主 App) │
│ ┌─────────────────────────┐ ┌──────────────────────────────────────┐ │
│ │ Triple Map Engine │ │ RouteStateMachine │ │
│ │ (AMap / Baidu / Google) │ │ (IDLE / READY / RUN / PAUSE) │ │
│ └────────────┬────────────┘ └──────────────────┬───────────────────┘ │
│ │ │ │
│ ┌────────────▼──────────────────────────────────▼───────────────────┐ │
│ │ ConfigManager │ │
│ │ (将完整配置与多坐标系映射写入 /data/local/tmp 共享目录) │ │
│ └──────────────────────────────────┬────────────────────────────────┘ │
│ ┌──────────────────────────────────▼────────────────────────────────┐ │
│ │ SpoofingService │ │
│ │ (前台保活服务、步态引擎、路网计算与悬浮窗控制器) │ │
│ └───────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────┬───────────────────────────────────┘
│ (写入 JSON 配置,chmod 777 + chcon)
▼
┌───────────────────────────┐
│ /data/local/tmp/ 共享文件 │
└─────────────┬─────────────┘
│ (守护线程 1000ms 轮询 + Volatile 缓存)
▼ LSPosed / libxposed (API 101+) 注入
┌─────────────────────────────────────────────────────────────────────────┐
│ 目标 App 进程 │
│ ┌───────────────────────────────────────────────────────────────────┐ │
│ │ LocationHooker │ │
│ │ • BaseLocationHooker (Location / LocationManager / NMEA / GNSS) │ │
│ │ • MapSdkHooker (Baidu BDLocation / AMap / Tencent SDK & 蓝点图层) │ │
│ │ • WifiHooker (WifiManager / ScanResults / Connection / DHCP) │ │
│ │ • CellHooker (TelephonyManager / 2G-5G NR 小区 / 运营商 / 基带) │ │
│ │ • BluetoothHooker (BluetoothLeScanner / BLE Beacons 过滤) │ │
│ │ • SensorStepHooker (StepCounter / StepDetector 计步联动) │ │
│ │ • AntiDetectionHooker (Xposed 堆栈清洗 / ClassLoader 隔离) │ │
│ └───────────────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────────────┘
[!NOTE] 跨进程通信 (IPC) 设计: 目标 App 进程在沙盒内运行时,由于 Android 11+ 包可见性及 SELinux 策略,使用
ContentProvider会导致主线程卡顿并产生Failed to find provider info错误。 宿主 App 借助 Root 权限将配置以 JSON 格式写入/data/local/tmp/locationspoofer_config.json,赋予777权限及shell_data_fileSELinux 上下文。 目标沙盒内的LocationHooker启动后台守护线程,每 1000ms 异步读取文件并存储在 Volatile 内存中。主线程的 Hook 方法读取配置时为 0-IO 延迟,避免导致目标 App 丢帧与卡顿。
# 1. 克隆代码仓库
git clone https://github.com/your-username/LocationSpoofer.git
# 2. 编译 Debug APK 并直接安装到设备
./gradlew installDebug
WGS-84、GCJ-02 或 BD-09,Hook 层将自动根据目标 App 进行转换。本程序仅供学习研究、技术交流以及个人合法合规测试(如开发者定位测试、设备兼容性调试)使用。 使用者请勿将本工具用于任何违法违规或违反相关平台服务协议的活动(包括但不限于虚假打卡、网络考试作弊、商业欺诈等)。 使用本模块造成的任何账号封禁、数据丢失、法律纠纷或其他直接/间接损失,均由使用者自行承担,作者不对此承担任何责任。
本项目基于 GNU General Public License v3.0 协议开源。
Copyright (C) 2026 SuseOAA
168 commits
5 commits
Kotlin
100.0%