Android中Xposed框架篇---修改系统位置信息实现自身隐藏功能

本文介绍如何使用Xposed框架修改设备地理位置信息,实现虚拟定位功能。通过拦截GPS、基站及WiFi定位信息,构造虚假Location对象,使系统强制使用GPS定位。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.youkuaiyun.com/jiangwei0910410003/article/details/52836241


一、前言

前文已经介绍了Xposed框架的基本使用规则,本文主要来介绍一个实际案例就是如何通过这个框架来修改系统的地理位置信息来实现隐藏功能,在如今社交工具的发展特别是微信,他有一个实时位置共享功能,那么对于那些不是单身狗的同学来说可能会有些蛋疼,哪天媳妇要查岗发送位置,结果你不在她期望的位置这时候就尴尬了,而且朋友圈在分享内容的时候可以选择当前位置,有的屌丝就像我一样没钱但是又想到处旅游,那么这时候咋们就可以一本正经的装个逼了。


二、定位原理

看到上面说的那么多,感觉这个功能必须要搞起来了,好处太多了,下面咋们就开始操作了,但是在这之前一定要先熟悉Xposed框架的使用规则,还不了解的同学可以去这里查看:Xposed框架的使用规则 在这篇文章中我们了解到了我们只需要在实现了IXposedHookLoadPackage接口的类中的回调方法handleLoadPackage中做拦截操作即可。但是这里我们还得先做一件事,那就是关于Android中的定位系统知识,我们知道手机定位有多种方式,一般有这几种方式:

第一、卫星定位
GPS(Global Positioning System)即全球定位系统,是由美国建立的一个卫星导航定位系统,利用该系统,用户可以在全球范围内实现全天候、连续、实时的三维导航定位和测速;另外,利用该系统,用户还能够进行高精度的时间传递和高精度的精密定位。

第二、基站定位

移动电话测量不同基站的下行导频信号,得到不同基站下行导频的TOA(到达时刻)或 TDOA(到达时间差),根据该测量结果并结合基站的坐标,一般采用三角公式估计算法,就能够计算出移动电话的位置。实际的位置估计算法需要考虑多基站(3个或3个以上)定位的情况,因此算法要复杂很多。一般而言,移动台测量的基站数目越多,测量精度越高,定位性能改善越明显。

第三、WiFi定位
每一个无线AP(路由器)都有一个全球唯一的MAC地址,并且一般来说无线AP在一段时间内不会移动;
设备在开启Wi-Fi的情况下,无线路由器默认都会进行SSID广播(除非用户手动配置关闭该功能),在广播帧包含了该路由器的MAC地址;采集装置可以通过接收周围AP发送的广播信息获取周围AP的MAC信息和信号强度信息,将这些信息上传到服务器,经过服务器的计算,保存为“MAC-经纬度”的映射,当采集的信息足够多时候就在服务器上建立了一张巨大的WiFi信息网络;
当一个设备处在这样的网络中时,可以将收集到的这些能够标示AP的数据发送到位置服务器,服务器检索出每一个AP的地理位置,并结合每个信号的强弱程度,计算出设备的地理位置并返回到用户设备,其计算方式和基站定位位置计算方式相似,也是利用三点定位或多点定位技术;位置服务商要不断更新、补充自己的数据库,以保证数据的准确性。当某些WiFi信息不在数据库中时,可以根据附近其他的WiFi位置信息推断出未知WiFi的位置信息,并上传服务器。


第四、AGPS定位

AGPS(AssistedGPS:辅助全球卫星定位系统)是结合GSM/GPRS与传统卫星定位,利用基地台代送辅助卫星信息,以缩减GPS芯片获取卫星信号的延迟时间,受遮盖的室内也能借基地台讯号弥补,减轻GPS芯片对卫星的依赖度。AGPS利用手机基站的信号,辅以连接远程定位服务器的方式下载卫星星历 (英语:Almanac Data),再配合传统的GPS卫星接受器,让定位的速度更快。是一种结合网络基站信息和GPS信息对移动台进行定位的技术,既利用全球卫星定位系统GPS,又利用移动基站,解决了GPS覆盖的问题,可以在2代的G、C网络和3G网络中使用。


在Android中关于这几种定位都有具体的调用方法,所以如果想修改系统的定位信息,那么就必须先了解这几种调用方式,在之前的一篇文章中也说到了,Hook的最关键一点就是需要找到Hook的地方,这个就需要去阅读源码来查找了。在Android中一般获取位置信息就涉及到下面的几个类和方法:

第一个:采用基站定位信息

android.telephony.TelephonyManager
+getCellLocation
+getPhoneCount
+getNeighboringCellInfo
+getAllCellInfo

android.telephony.PhoneStateListener
+onCellLocationChanged
+onCellInfoChanged

第二个:采用Wifi定位信息
android.NET.wifi.WifiManager

+getScanResults
+getWifiState
+isWifiEnabled

android.Net.wifi.WifiInfo
+getMacAddress
+getSSID
+getBSSID

android.net.NetworkInfo

+getTypeName
+isConnectedOrConnecting
+isConnected
+isAvailable

android.telephony.CellInfo
+isRegistered

第三个:采用GPS定位
android.location.LocationManager

+getGpsStatus
+getLastLocation
+getLastKnownLocation
+getProviders
+getBestProvider
+addGpsStatusListener
+addNmeaListener


三、拦截操作

有了这些方法和类,下面就开始拦截操作了,但是本文采用是这种拦截方式,因为在多次试验之后,发现Android中很多定位app绝大部分都是采用基站+GPS+Wifi这三种混合方式来进行定位的,但是如果我们要去都拦截这三种方式那就太费劲了,所以这里我们这么干,只拦截操作GPS定位,而其他两种方式拦截之后返回值全部设置空,这样让系统强制的使用GPS定位,为什么要采用GPS定位这种方式呢?因为其他的两种方式在拦截之后去构造假的数据有点麻烦,而对于GPS这种方式咋们只需要构造一个假的Location对象就可以了,操作非常方便。到这里咋们思路有了,下面就来开始操作了:


首先咋们先把其他的定位方式信息拦截之后全部返回null值,这样就可以强制系统使用GPS定位数据了,接下来就开始拦截GPS定位系统数据了,因为本人梦想去台湾看看五月天,所以这里就构造一个假的台北数据:


直接构造一个假的Location对象,然后设置成参数即可,因为这里的location对象是通过回调方式传回去的,所以需要修改参数而不是返回值哦。这里如果有同学想去其他地方,又不知道具体的经纬度信息,该怎么办呢?这个可以使用百度地图的拾取器功能:


点击去之后就可以随意选择地理位置了:


选中之后,可以看到了经纬度信息,在右上角处就可以赋值信息了:



好了,到这里咋们就成功了修改了系统中的地理位置信息,接下来咋们就开始运行了,运行步骤也很简单,先运行模块,然后XposedInstaller工具会提示模块更新或者有新模块需要激活,进入工具点击激活或者更新,然后重启设备生效即可。


四、操作结果演示

当我们再次重启之后,打开百度地图惊奇的发现没什么数据?这里不是我们拦截出错了,而是我们在室内,所以GPS定位可能会失败,所以如果想看到数据需要去室外操作即可,下面是我的百度地图的截图:


有了这地图,咋们就要开始真正的装逼了,先搜索一下附近的美女哈:


这台湾的妹子除了会嗲之外,总是喜欢用英文名哈!先不管了,找个妹子聊聊先~

然后咋们再去去朋友圈晒一晒:


这里先选择地理位置哈。


哈哈,看到了,这个逼装的我措手不及,自己都差点相信了,看到这里的定位信息点击去看到也是真实的,而不是我们以往看到的:"该位置由用户自己定义的",到这里咋们这个逼算是装成功了。


项目下载:http://download.youkuaiyun.com/detail/jiangwei0910410003/9655663


五、总结

本文主要介绍了Xposed框架的一个实际使用案例,就是修改设备的地理位置信息,让自己装个逼,但是还是的说,晒图有风险,装逼需谨慎!一切珍重。本文使用了修改地理位置信息实现了周末去一趟台北的愿望功能,也希望大家能够借助这篇文章满足自己多年来的旅游愿望,最后也希望台湾早日回到祖国的怀抱!


参考资源链接:[Xposed框架实战:修改Android系统位置信息隐藏应用功能](https://wenku.youkuaiyun.com/doc/6401ad28cce7214c316ee7f9?utm_source=wenku_answer2doc_content) 在《Xposed框架实战:修改Android系统位置信息隐藏应用功能》一书中,详细介绍了Xposed框架Android系统中如何实现系统位置信息修改。本书不仅涵盖了Xposed框架的基础知识,而且深入探讨了Android定位机制的原理和操作细节,这对于理解如何利用Xposed框架隐藏位置信息具有重要意义。具体步骤如下: 首先,确保你的Android设备已经获取了root权限,并且安装了Xposed Installer和所需的Xposed模块。接下来,通过Xposed Installer激活你的Xposed模块,并重启设备以使更改生效。 其次,编写一个Xposed模块,该模块需要实现IXposedHookLoadPackage接口。在这个接口中,你可以通过hook LoadPackage过程,找到需要修改位置信息的应用(例如微信)的Package名称。 然后,利用LocationManager服务,注册一个位置更新监听器。在监听器中,你可以自由地定义和返回任何地理位置信息。例如,如果你希望在微信中显示自己位于某个虚拟位置,可以创建一个Location对象,并指定相应的经纬度,然后返回这个对象。 最后,当微信等应用请求位置信息时,Xposed模块拦截请求并返回你设定的虚假位置信息,这样就实现隐藏真实位置的目的。 这种技术可以被用于保护个人隐私,或是用于测试等目的,但用户必须确保其使用不违反任何法律法规和社交应用的使用条款。此外,Xposed框架提供了强大的系统修改能力,但使用不当可能会导致系统不稳定或应用异常,因此需要谨慎操作,并确保具备相应的技术知识和理解。 如果你对Xposed框架Android系统定位机制有更深入的兴趣,推荐阅读《Xposed框架实战:修改Android系统位置信息隐藏应用功能》,这本书将是你获取更多实战知识和技能的理想选择。 参考资源链接:[Xposed框架实战:修改Android系统位置信息隐藏应用功能](https://wenku.youkuaiyun.com/doc/6401ad28cce7214c316ee7f9?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值