Android虚假定位的实现与防护

Android中常用的定位方式

一,GPS定位

定义:全球卫星定位系统,直接和卫星交互,获取设备经纬度

优点:

  • 走卫星通信通道,无需打开Wifi或流量就能获得位置信息

  • 精确度最高,几米到几十米

缺点:

  • 需要手机支持GPS模块(大部分智能机基本都有)

  • 耗电量大

  • 大部分用户可能关闭GPS

  • 定位慢,特别是从GPS模块启动到获取到第一次定位数据,需要的时间较长

  • 室内、地下室基本无法使用 

二,Network定位

三角定位:由于每个基站的位置是固定的,手机通过扫描到附近的三个基站的信号,因其必然在这三个基站的共同覆盖范围内,从而利用电磁波在这三个基站间中转所需要时间,来算出手机所在的准确坐标。但因大部分手机都只能获取到单个基站的ID,所以此方法基本无法实行

单基站定位:利用获取最近的基站的信息,其中包括基站ID,lac、mcc、mnc和信号强度,将这些数据发送到Google的定位Web服务里,就能拿到当前所在的位置信息,误差一般在几十米到几百米之内。其中信号强度这个数据很重要

优点:

  • 只要网络通畅即可定位

  • 可以在室内使用

缺点:

  • 精确度很差,一般有几百米,甚至上千米的误差。误差和基站的信号覆盖半径有关,Wifi覆盖半径大概100米左右,而基站则到千米级别

三,WIFI定位

根据一个固定的WifiMAC地址,通过收集到的该Wifi热点的位置,然后访问网络上的定位服务以获得经纬度坐标。因为它和基站定位其实都需要使用网络,所以在Android也统称为Network方式。

优点:

  • 精度相对GPS差一点,但也能到十几米、几十米的误差

  • 低耗电

四,IP定位

根据设备上获得的IP地址,访问网络上的定位服务以获得经纬度坐标

五,AGPS定位

辅助全球卫星定位系统,结合GSM或GPRS与传统卫星定位,利用基站代送辅助卫星信息,缩减GPS芯片获取卫星信号的延迟时间,受遮盖的室内也能借基站讯号弥补,减轻GPS芯片对卫星的依赖度

优点:

  • 在室外等空旷地区,其精度在正常的GPS工作环境下,可达10米左右,堪称目前定位精度最高的一种定位技术

  • 首次捕获GPS信号的时间一般仅需几秒,不像GPS的首次捕获时间可能要2~3分钟

缺点:

  • 需要在手机内增加GPS接收机模块,并改造手机天线,同时要在移动网络上加建位置服务器、差分GPS基准站等设备。如果要提高该方案在室内等GPS信号屏蔽地区的定位有效性,该方案还提出需要增添类似于EOTD方案中的位测量单元(LMU)。

虚拟定位与检测防护 

一,开发者模式下,打开设置里面的模块位置开关,进行虚拟定位。

防护措施:

1,通过系统Api可检测到是否打开了模拟定位开关

Settings.Secure.getInt(context.getContentResolver(),Settings.Secure.ALLOW_MOCK_LOCATION, 0) != 0;

2,在定位前先调用removeTestProvider方法,移除虚拟定位。

二,使用模拟器进行虚假定位

在PC上安装模拟器,使用一些特定软件模拟虚假IP,达到虚拟定位的效果

防护措施:

在Android中通过系统Api检测当前设备是否是模拟器,进行相关的提醒与限制。

boolean isEmulator = Build.FINGERPRINT.contains("generic")|| Build.FINGERPRINT.contains("vbox")|| Build.FINGERPRINT.contains("generic_x86")|| Build.FINGERPRINT.contains("emulator")|| Build.FINGERPRINT.contains("simulator");

三,使用xposed对获取定位的软件进行Hook修改获取的经纬度

xposed使用的前提是需要当前设备拥有root权限,针对root过的设备进行hook修改系统的api,致使获取经纬度的应用获取到虚假的经纬度

防护措施:

针对此种方案,目前只能检测当前设备是否root,做相应的提醒或限制处理,无法做到实质的防护处理。

检测当前设备是否Root

public boolean isRooted() {Process process = null;try {process = Runtime.getRuntime().exec(new String[]{"su", "-c", "whoami"});BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));String line;while ((line = reader.readLine()) != null) {if (line.trim().equals("root")) {return true;}}return false;} catch (IOException e) {return false;} finally {if (process != null) {process.destroy();}}
}

四,反编译App,修改源码,植入虚拟定位相关逻辑

防护措施:

1,针对定位核心代码进行混淆处理,对apk进行加固,增加破解难度。

2,检测当前设备是否安装了模拟定位的软件。

fun areThereMockPermissionApps(context: Context): Boolean {var count = 0val pm = context.packageManagerval packages = pm.getInstalledApplications(PackageManager.GET_META_DATA)for (applicationInfo in packages) {try {val packageInfo = pm.getPackageInfo(applicationInfo.packageName,PackageManager.GET_PERMISSIONS)            // Get Permissions         val requestedPermissions = packageInfo.requestedPermissionsif (requestedPermissions != null) {for (i in requestedPermissions.indices) {if (requestedPermissions[i] == "android.permission.ACCESS_MOCK_LOCATION" && applicationInfo.packageName != context.packageName) {count++}}}} catch (e: NameNotFoundException) {Log.e("Got exception " + e.getMessage())}}return count > 0
}

五,重新编译修改Android系统,然后烧录相关设备

防护措施:

暂无解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51455.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java面试八股之Spring AOP 和 AspectJ AOP 的区别

Spring AOP 和 AspectJ AOP 的区别 Spring AOP 和 AspectJ AOP 是两种不同的面向切面编程(Aspect-Oriented Programming, AOP)实现。它们各有特点,适用于不同的场景。下面是一些主要的区别: 1. 实现机制 Spring AOP: 基于代理…

为Mac配置Alfred

参考资料: Alfred神器使用手册 | louis blogMacOS神器之Alfred workflow概览GitHub - arpir/Alfred-Workflows-Collection: 一些好用的 Alfred Workflow 一、修改快捷键 Spotlight的默认快捷键是Command Space Alfred的默认快捷键是Option Space 可以将Alfred和…

Alternating Sum

Problem - 963A - Codeforces 处理式子 显然中间式子是等比数列 // Problem: A. Alternating Sum // Contest: Codeforces - Tinkoff Internship Warmup Round 2018 and Codeforces Round 475 (Div. 1) // URL: https://codeforces.com/problemset/problem/963/A // Memory Lim…

DBMS-1.1 关系模型

关系数据库基本概念 一.关系 1.关系:关系数据库是由表的集合构成的,因此在关系数据库中,表又称为关系。 2.属性:表的每一列称为一个属性。 (1)一个有n个属性的关系,称为n元关系。 3.元组&…

awk用法

文章目录 一、awk工具awk工作原理AWK程序的结构awk内置变量 二、案例1.基础案列2.BEGIN END 运算3.数值与字符串的比较4.awk高级用法5. awk if语句6.BEGIN END 流程7.AWK 数组8.awk 循环 一、awk工具 awk工作原理 当读到第一行时,匹配条件,然后执行指定…

Mojo模型的端到端加密:数据安全的终极防线

Mojo模型的端到端加密:数据安全的终极防线 在数字化时代,数据安全已成为企业和个人最为关注的问题之一。Mojo模型,作为一个先进的数据处理框架,其端到端加密(E2EE)功能为数据传输提供了坚不可摧的安全保障…

【C++11】C++11新纪元:深入探索右值引用与移动语义

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C “ 登神长阶 ” 🤡往期回顾🤡:位图与布隆过滤器 🌹🌹期待您的关注 🌹🌹 ❀C11 📒1. C11简介…

【Qt】修改窗口的标题和图标

以下操作仅对顶层 widget(独⽴窗口),有效。 修改窗口的标题 一.windowTitle属性 1.概念 是一种在用户界面中显示窗口的标题的属性。它可以用来设置窗口的标题栏文本。 2.API API说明windowTitle()获取到控件的窗⼝标题.setWindowTitle(const QString& title)设置控件的…

10 BERT

目录 1 综述 1.1 BERT的核心思想 1.2 BERT的关键技术:预训练阶段 1.3 微调阶段 2 BERT的架构 2.1 输入处理 3. 特征选择/学习模块 BERT 的自注意力过程 4. 预训练任务:同时进行 4.1 Next Sentence Prediction (NSP) 4.2 Masked Language Model…

基于微信小程序+SpringBoot+Vue的网络安全科普系统(带1w+文档)

基于微信小程序SpringBootVue的网络安全科普系统(带1w文档) 基于微信小程序SpringBootVue的网络安全科普系统(带1w文档) 优质的网络安全科普系统不仅可以单纯的满足工作人员管理的日常工作需求,还可以满足用户的需求。可以降低工作人员的工作压力,提高效…

rust 初探 -- 常用的集合

rust 初探 – 常用的集合 Vector 存储在堆内存上的数据&#xff0c;运行时可以动态变大或者变小。 Vec 特性&#xff1a; 由标准库提供&#xff0c;可以存储多个相同类型的值&#xff0c;并且值在内存中连续存放 Vector 的创建 fn main() {// Vec::new()let v: Vec<i32…

Mojo模型的自动调参:深度学习优化的新境界

Mojo模型的自动调参&#xff1a;深度学习优化的新境界 深度学习模型的参数调优是提高模型性能的关键步骤之一&#xff0c;但同时也是一个耗时且复杂的过程。Mojo模型作为一个先进的深度学习框架&#xff0c;其设计理念包含了自动化调参的概念&#xff0c;以简化模型训练流程并…

2024.7.29 作业

1> 写一个日志文件&#xff0c;将程序启动后&#xff0c;每一秒的时间写入到文件中 #include <myhead.h> int main(int argc,const char *argv[]) {FILE *fp NULL;if((fpfopen("./log.txt","r"))NULL) {perror("open error1");return…

解决 Git 访问 GitHub 时的 SSL 错误

引言 在使用 Git 进行版本控制时&#xff0c;我们可能会遇到各种网络相关的错误。其中一种常见的错误是 SSL 连接问题&#xff0c;这会导致 Git 无法访问远程仓库。本文将介绍一个具体的错误 OpenSSL SSL_read: SSL_ERROR_SYSCALL, errno 0&#xff0c;以及如何通过禁用 SSL 证…

Python数值计算(1)

准备总结一下通过Python进行数值计算的环境&#xff0c;先说一下数值计算的基本语法和库。 1.基本运算 Python中提供基本运算符&#xff0c;常见的加减乘除&#xff0c;唯一需要注意的是除法&#xff0c;整数除法和浮点数除法不一样。 一般除法/&#xff0c;无论参与运算的数…

【嵌入式英语教程--3】C语言中的基本数据类型

C语言中的基本数据类型 英文原文 In the C programming language, basic data types form the building blocks of any program. These include int, float, char, and bool. The int type is used for integer values, float for floating-point numbers, char for single c…

相机拍摄如何正确曝光

不同场景下的曝光思路 数码时代&#xff0c;我们并不需要准确曝光&#xff0c;我们只需要用单张或者多张照片&#xff0c;记录下场景的全部亮度信息直方图可以辅助我们确认&#xff0c;是否完整记录下了场景的亮度信息正常光比环境&#xff0c;提倡“向右曝光”。大光比环境&a…

通信系统的均衡技术

1、摘要 在通信系统中&#xff0c;信号从发送端发出&#xff0c;经过信道&#xff0c;到达接收端&#xff0c;而在传输的过程中&#xff0c;信号会发生失真&#xff0c;产生失真的原因有很多&#xff0c;包括阻抗不匹配&#xff0c;干扰等。为了优化信号质量&#xff0c;需要进…

【PyTorch笔记】训练时显存一直增加到 out-of-memory?真相了!

最近用 Pytorch 训模型的过程中&#xff0c;发现总是训练几轮后&#xff0c;出现显存爆炸 out-of-memory 的问题&#xff0c;询问了 ChatGPT、查找了各种文档。。。 在此记录这次 debug 之旅&#xff0c;希望对有类似问题的小伙伴有一点点帮助。 问题描述&#xff1a; 训练过…