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…

awk用法

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

【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文档) 优质的网络安全科普系统不仅可以单纯的满足工作人员管理的日常工作需求,还可以满足用户的需求。可以降低工作人员的工作压力,提高效…

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…

Python数值计算(1)

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

通信系统的均衡技术

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

基于tkinter的学生信息管理系统之登录界面和主界面菜单设计

目录 一、tkinter的介绍 二、登陆界面的设计 1、登陆界面完整代码 2、部分代码讲解 3、登录的数据模型设计 4、效果展示 三、学生主界面菜单设计 1、学生主界面菜单设计完整代码 2、 部分代码讲解 3、效果展示 四、数据库的模型设计 欢迎大家进来学习和支持&#xff01…

灯具外贸公司用什么企业邮箱好

灯具外贸公司面对海外市场的推广、产品销售、客户沟通、市场信息收集等多重需求&#xff0c;选择一个合适的企业邮箱显得尤为重要。本文将介绍灯具外贸公司为什么应选择Zoho Mail企业邮箱&#xff0c;并详细探讨其优势和功能。 一、公司背景 广东省深圳市光明新区&#xff0c…

Redis 安装和数据类型

Redis 安装和数据类型 一、Redis 1、Redis概念 redis 缓存中间件&#xff1a;缓存数据库 nginx web服务 php 转发动态请求 tomcat web页面&#xff0c;也可以转发动态请求 springboot 自带tomcat 数据库不支持高并发&#xff0c;一旦访问量激增&#xff0c;数据库很快就…

vTESTstudio中如何添加DLL文件?

文章目录 一、CANoe添加DLL二、vTESTstudio中添加DLL1.手动添加2.代码添加 一、CANoe添加DLL 在CANoe中添加DLL的路径如下图&#xff0c;在Simulation Setup中选择需要添加的节点&#xff0c;右键选择Configuration进行添加DLL。 二、vTESTstudio中添加DLL 1.手动添加 在打…

java中 VO DTO BO PO DAO

VO、DTO、BO、PO、DO、POJO 数据模型的理解和实际使用_vo dto bo-CSDN博客 深入理解Java Web开发中的PO、VO、DTO、DAO和BO概念_java dto dao-CSDN博客

【计算机网络】WireShark和简单http抓包实验

一&#xff1a;实验目的 1&#xff1a;熟悉WireShark的安装流程和界面操作流程。 2&#xff1a;学会简单http的抓取和过滤&#xff0c;并分析导出结果。 二&#xff1a;实验仪器设备及软件 硬件&#xff1a; Windows 2019操作系统的计算机等。 软件&#xff1a;WireShark、…

【算法/训练】:动态规划(线性DP)

一、路径类 1. 字母收集 思路&#xff1a; 1、预处理 对输入的字符矩阵我们按照要求将其转换为数字分数&#xff0c;由于只能往下和往右走&#xff0c;因此走到&#xff08;i&#xff0c;j&#xff09;的位置要就是从&#xff08;i - 1&#xff0c; j&#xff09;往下走&#…

前端面试基础题(微信公众号:前端面试成长之路)

BFC、IFC、GFC、FFC CSS2.1中只有BFC和IFC, CSS3中才有GFC和FFC。 到底什么是BFC、IFC、GFC和FFC Whats FC&#xff1f; 一定不是KFC&#xff0c;FC的全称是&#xff1a;Formatting Contexts&#xff0c;是W3C CSS2.1规范中的一个概念。它是页面中的一块渲染区域&#xff0c;并…