Android中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定位可能会失败,所以如果想看到数据需要去室外操作即可,下面是我的百度地图的截图:
有了这地图,咋们就要开始真正的装逼了,先搜索一下附近的美女哈:
哈哈,看到了,这个逼装的我措手不及,自己都差点相信了,看到这里的定位信息点击去看到也是真实的,而不是我们以往看到的:"该位置由用户自己定义的",到这里咋们这个逼算是装成功了。

项目源码:源码下载

五、总结

本文主要介绍了Xposed框架的一个实际使用案例,就是修改设备的地理位置信息,让自己装个逼,本文使用了修改地理位置信息实现了周末去一趟台北的愿望功能,以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android编程实现拦截短信并屏蔽系统Notification的方法

    本文实例讲述了Android编程实现拦截短信并屏蔽系统Notification的方法.分享给大家供大家参考,具体如下: 拦截短信有几个关键点: 1.android接收短信时是以广播的方式 2.程序只要在自己的Manifest.xml里加有"接收"SMS的权限 <uses-permission android:name="android.permission.RECEIVE_SMS"> </uses-permission> <uses-p

  • Android中利用Xposed框架实现拦截系统方法

    一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xposed框架是免费的而且还是开源的,网上也有很多文章介绍了Xposed框架的原理实现,不了解的同学可以自行查阅即可,本文主要介绍如何通过这个框架来进行系统方法的拦截功能,比如我们开发过程中,对于一些测试环境很难模拟,特别是测试同学有时候像随机改变设备的imei,mcc等信息用来模拟不同测试场景,这时候

  • Android拦截外拨电话程序示例

    拦截监听外拨的电话,并进行处理: 向外拨打电话时系统会发出一个有序广播,虽然该广播最终会被拔号器里的广播接收者所接收并实现电话拔打,但我们可以在广播传递给拔号广播接收者之前先得到该广播,然后清除传递给拔号广播接收者的电话号码,在拔号广播接收者接收到该广播时,由于电话号码为null,因此取消电话拔打. 复制代码 代码如下: Intent intent = new Intent(Intent.ACTION_CALL,Uri.parse("tel:110"));               

  • android短信拦截的实现代码

    短信拦截的实现主要是使用了广播接收者来实现. BroadcastReceiver  广播接收者   必须指定要接收的广播类型.必须明确的指定action 广播:事件.普通广播: 是异步的.会广播接收者同时接收,不能被中断sendBroadcast()有序广播: 是同步的.会根据广播接收的优先级进行接收,是可以中断   短信到来广播 sendOrderBroadcast()priority的范围是:-1000 ~ 1000如果有序广播明确的指定了广播接收者,他是无法被中断的. 代码实现如下: 1.

  • Android开发四大组件之实现电话拦截和电话录音

    一.问题描述 使用BordercastReceiver和Service组件实现下述功能: 1.当手机处于来电状态,启动监听服务,对来电进行监听录音. 2.设置电话黑名单,当来电是黑名单电话,则直接挂断. 当拨打电话或电话状态发生改变时,系统就会发出有序广播,因此我们可以使用BordercastReceiver接受广播,因BordercastReceiver执行时间短不能执行耗时任务也不能使用子线程,因此我们应启动一个Service来监听电话并进行处理 二.加入AIDL文件 Android没有对外

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

    一.前言 本文主要来介绍一个实际案例就是如何通过这个框架来修改系统的地理位置信息来实现隐藏功能,在如今社交工具的发展特别是微信,他有一个实时位置共享功能,那么对于那些不是单身狗的同学来说可能会有些蛋疼,哪天媳妇要查岗发送位置,结果你不在她期望的位置这时候就尴尬了,而且朋友圈在分享内容的时候可以选择当前位置,有的屌丝就像我一样没钱但是又想到处旅游,那么这时候咋们就可以一本正经的装个逼了. 二.定位原理 看到上面说的那么多,感觉这个功能必须要搞起来了,好处太多了,下面咋们就开始操作了,但是在这之前一

  • Android中XUtils3框架使用方法详解(一)

    xUtils简介 xUtils 包含了很多实用的android工具. xUtils 支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls 最低兼容android 2.2 (api level 8) 今天给大家带来XUtils3的基本介绍,本文章的案例都是基于XUtils3的API语法进行的演示.相信大家对这个框架也都了解过, 下面简单介绍下XUtils3的一些基本知识. XUtils3一共有4大功能:注解模块,网络

  • Android中网络框架简单封装的实例方法

    Android中网络框架的简单封装 前言 Android作为一款主要应用在移动终端的操作系统,访问网络是必不可少的功能.访问网络,最基本的接口有:HttpUrlConnection,HttpClient,而在后续的发展中,出现了Volley,OkHttp,Retrofit等网络封装库.由于各种原因,在实际的项目开发中,我们可能会需要在项目的版本迭代中,切换网络框架.如果对于网络框架没有好的封装,那么当需要切换网络框架时,可能就会有大量的迁移工作要做. 封装网络框架 在架构设计中,面向接口和抽象,

  • Android中Volley框架进行请求网络数据的使用

    问题的阐述:Android SDK中的HttpClient和HttpUrlConnection两种请求方式用来处理网络的复杂的操作,但当应用比较复杂的时候需要我们编写大量的代码处理很多东西:图像缓存,请求的调度等等: 解决:Volley就是为解决这些而生,它与2013年Google I/O大会上被提出:使得Android应用网络操作更方便更快捷:抽象了底层Http Client等实现的细节,让开发者更专注与产生RESTful Request.另外,Volley在不同的线程上异步执行所有请求而避免

  • Android中Volley框架下保持会话方法

    公司经理把我拉出来,死马当活马医,做一个安卓app,作为刚毕业几个月且只是培训了几个月的小白来说,这无疑是一个非常大的挑战,当然最大的挑战不是这个,最大的挑战时两个周做出来.这是最蛋疼的,说实话,对于有两三年的开发经验的人来说,两个周开发一个项目很简单,说不定还有很多时间用来干别的. 于是一上来就把自己给难住了,登陆还是很好做的,只要验证返回的信息就可以跳转,但是在接下来后面的数据接口连接的时候各种报错,整了两天,查了很多信息,还接受了公司老人的嘲讽和谩骂终于做出来了. 这个是基于session

  • Android仿微信图片上传带加号且超过最大数隐藏功能

    1.仿照微信空间上传图片,显示图片数量以及超过最大,上传按钮隐藏功能 2.上效果图 3.上代码,主要是Adapter类 /** * Created by zhangyinlei on 2018/3/2 0002. */ public class AlbumSelectedShowAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> { private static int TYPE_ADD = 0;//添加图片 privat

  • Android 密码 显示与隐藏功能实例

    效果: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android

  • Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能实例

    本文实例讲述了Android开发之多线程中实现利用自定义控件绘制小球并完成小球自动下落功能的方法.分享给大家供大家参考,具体如下: 1.布局界面 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pare

  • PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例

    本文实例讲述了PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能.分享给大家供大家参考,具体如下: <?php header("Content-Type:text/html;charset=gbk"); include "Snoopy.class.php"; $snoopy = new Snoopy; $snoopy->fetch("http://rate.taobao.com/user-rate-f01d9cb1245a22fcea47

  • Android中实现长按修改ListView对象的内容

    实现的效果如下: 我在ListView的Item长按事件内打开一个弹出窗口,窗口内有一个EditText对象,在这个编辑框内输入文本点确定后,直接修改掉ListView对象内某个TextView对象的内容. 示例代码如下: import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.graphics.Color; import android.view.

随机推荐