用Xposed框架拦截微信、人人、QQ等LBS应用的当前位置

最近在参加第八届全国大学生信息安全竞赛,成功杀入决赛。本人负责核心模块的hook,hook的实现还是用开源框架Xposed。其中的一个需求就是保护用户的敏感数据:当前位置信息。前期做了很多尝试都失败了,这里换一种角度思考,顿时眼前一亮。呵呵,不在这里扯淡了,开始进入正题。LBS应用的定位原理经常用微信、人人的用户会发现,这一类客户端有个比较有意思的功能,就是在你发状态的时候可以添加自己的位置,可以查
摘要由CSDN通过智能技术生成

最近在参加第八届全国大学生信息安全竞赛,成功杀入决赛。本人负责核心模块的hook,hook的实现还是用开源框架Xposed。其中的一个需求就是保护用户的敏感数据:当前位置信息。前期做了很多尝试都失败了,这里换一种角度思考,顿时眼前一亮。呵呵,不在这里扯淡了,开始进入正题。

LBS应用的定位原理

经常用微信、人人的用户会发现,这一类客户端有个比较有意思的功能,就是在你发状态的时候可以添加自己的位置,可以查找“附近的人”,而且定位得相对比较准确。即使不开启手机的GPS服务,它可以定位,用WiFi它仍然可以定位,用运营商的移动网络它依然可以定位,这个功能是不是很强大?

其实,像微信这一类应用的“找朋友”功能的实现上借助的是“基于位置的服务”(Location Based Service,LBS),它是通过电信移动运营商的无线电通讯网络(如GSM网、CDMA网、WIFI热点)或外部定位方式(如GPS)获取到用户实时所在的地理位置(地理坐标),在GIS(Geographic Information System,地理音讯系统)平台的支持下,为用户提供相应服务的一种功能。
LBS是借助手机基站来实现定位。每座手机基站都有自己的独立编号,手机在开机状态下会同时接收到多座基站的信号,往常打电话时它与只其中信号最佳的一座基站建立通讯衔接,但在需求定位时就会丈量周边3个或更多的基站信号,根据三角定位法,推算出手机所处的位置。
可以把手机基站的覆盖范围想像成一个个以基站为圆心的圆,需要定位时,手机就向周边多座基站发送测量信号,并计算这些测量信号抵达基站所需要的时间,推算出手机距离基站的直线距离,再经过数学运算,手机位置坐标就可由3个基站圆的交点来确定。手机定位的准确度与基站密度、现场环境有很大联系,市区内精度范围大致在200米左右,郊区精度范围大致在1000米~2000米左右,随着技术的不时开展,基站的密度增加。在某有些场所下,手机定位的精度已能到达50米。不过,我个人还是不是很理解这种三点定位的方式,呵呵。
原理部分已经介绍完毕,下面就进入我们的正题,如何拦截你的位置,that is a question……

拦截的思路


其实思路比较简单,既然已经知道LBS定位的原理是借助手机基站来实现的。每座手机基站都有自己的独立编号,手机在开机状态下会同时接收到多座基站的信号,在定位时会就会丈量周边neighbour基站的信号,然后利用三角定位的方式,推算出手机所处的位置。所以这类应用在定位的时候,会尝试读取周围基站的信号,那么我们可以这样思考,我们可以尝试着Hook安卓操作系统中有关该基站、网络定位的部分,将其内容全部置空。然后迫使该类应用只能通过GPS来实现定位,那么,我们可以考虑向相关的GPS接口中传入一个假的经纬度的值就可以实现完美的拦截。研究一下Android操作系统中有个基站、网络、GPS定位的源码[这里推荐几个网站,一个是GrepCode,一个是AndroidXref,这两个网站提供Android操作系统各个版本的源码,很强大,为广大程序员“Read the fucking source code”提供了很大的方便,呵呵]。仔细研究一下,会发现需要拦截的东西确实不多,主要是android.net.wifi.WifiManager类的getScanResults方法、android.telephony.TelephonyManager类的getCellLocation和getNeighboringCellInfo方法、以及android.location.LocationManager类的requestLocationUpdates方法、getGpsStatus方法。
需要多说一句,开发安全方面的应用,缺少不了一款开源神器Xprivacy,这款神器可以实时查看每个应用的调用过程,甚至内部的调用函数,可以为开发者寻找解决方案提供很有价值的参考信息,减少不少阻力。下面给出核心的编码实现,主要是针对微信、人人、QQ等提供LBS服务的应用。效果就是修改自己当前的位置信息,制造一个假的地理位置信息。

编码实现


核心实现的源码如下:

package com.whu.gpshook;

import de.robv.android.xposed.*;
import de.robv.android.xposed.XC_MethodHook.MethodHookParam;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;
import de.robv.android.xposed.XposedBridge;

import android.app.Activity;
import android.location.GpsSatellite;
import android.location.GpsStatus;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Binder;
import android.util.Log;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.Proxy;
import java.util.HashMap;
import
  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 41
    评论
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值