Hook实现Android 微信、陌陌 、探探位置模拟(附源码下载)
作者:Mark_YPQ 发布时间:2022-11-14 14:44:43
标签:Hook,Android,位置模拟
Hook实现Android 微信、陌陌 、探探位置模拟
最近需要对微信,陌陌等程序进行位置模拟 实现世界各地发朋友圈,搜索附近人的功能,本着站在巨人肩膀上的原则 爱网上搜索一番。
也找到一些 代码和文章,但是代码大都雷同而且都有一个弊端 比如说 微信 对目标函数实现hook之后第一次打开微信 第一次定位是可以改变的
但是 我如果想更换地址的话 就需要重启手机了,重新加载hook了,试了很多次都是这样满足不了需求。
为了改进这个地方我们从gps定义的源代码流程开始看寻找hook系统函数的突破口
我也是看完之后才找到hook的地方 LocationMangerService 这个类
@Override
public void reportLocation(Location location, boolean passive) {
checkCallerIsProvider(); //检测权限和uid
if (!location.isComplete()) {
Log.w(TAG, "Dropping incomplete location: " + location);
return;
}
//发送位置信息
mLocationHandler.removeMessages(MSG_LOCATION_CHANGED, location);
Message m = Message.obtain(mLocationHandler, MSG_LOCATION_CHANGED, location);
m.arg1 = (passive ? 1 : 0);
mLocationHandler.sendMessageAtFrontOfQueue(m);
}
那么我们可以hook掉这个location的参数 修改为我们想要定位的地方就可以实现效果了,
XposedHelpers.findAndHookMethod("com.android.server.LocationManagerService", lpparam.classLoader, "reportLocation", Location.class, boolean.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
Location location = (Location) param.args[0];
XposedBridge.log("实际 系统 经度"+location.getLatitude() +" 系统 纬度"+location.getLongitude() +"系统 加速度 "+location.getAccuracy());
XSharedPreferences xsp =new XSharedPreferences("com.markypq.gpshook","markypq");
if (xsp.getBoolean("enableHook",true)){
double latitude = Double.valueOf(xsp.getString("lan","117.536246"))+ (double) new Random().nextInt(1000) / 1000000 ;
double longtitude = Double.valueOf(xsp.getString("lon","36.681752"))+ (double) new Random().nextInt(1000) / 1000000 ;
location.setLongitude(longtitude);
location.setLatitude(latitude);
XposedBridge.log("hook 系统 经度"+location.getLatitude() +" 系统 纬度"+location.getLongitude() +"系统 加速度 "+location.getAccuracy());
}
}
});
如果我想主动调用这个函数 必须要得到这个LocationMangerService 的对象 获取这个对象可以通过hook LocationManager 的构造函数获取,
XposedBridge.hookAllConstructors(LocationManager.class,new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
if (param.args.length==2) {
Context context = (Context) param.args[0]; //这里的 context
XposedBridge.log(" 对 "+getProgramNameByPackageName(context)+" 模拟位置");
//把权限的检查 hook掉
XposedHelpers.findAndHookMethod(context.getClass(), "checkCallingOrSelfPermission", String.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
if (param.args[0].toString().contains("INSTALL_LOCATION_PROVIDER")){
param.setResult(PackageManager.PERMISSION_GRANTED);
}
}
});
XposedBridge.log("LocationManager : " + context.getPackageName() + " class:= " + param.args[1].getClass().toString());
//获取到 locationManagerService 主动调用 对象的 reportLocation 方法 可以去模拟提供位置信息
//这里代码中并没有涉及到主动调用
Object locationManagerService = param.args[1];
}
}
});
当然还需要hook一些其他的辅助函数 ,这些函数都可以在 Android studio 中看到Java的代码 我们就无需过多解释了 上 源代码
源码下载
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://blog.csdn.net/u012889434/article/details/61921933


猜你喜欢
- 1 导入需要渐变的图片如果需要实现图片之间的渐变效果,我们需要两张照片,这样才能实现照片1到照片2的渐变。在路径 /res/values/
- using System;using System.Diagnostics;using System.Runtime.InteropServ
- SpringBoot监控Actuator,关闭redis监测方法当我们导入了spring-boot-starter-actuator这个依赖
- 1.理解装箱简单地说,装箱就是将一个值类型的数据存储在一个引用类型的变量中。假设你一个方法中创建了一个 int 类型的本地变量,你要将这个值
- 本文将带领大家实现第一个用eclipse写的第一个Javaweb项目–简单购物车。文章会在问题分析、具体实现和常见问题这三块为大家详细解说。
- 安装 Tomcat 之前请一定先安装 Java ,然后才能安装 Tomcat 。安装 Java 、环境变量 path 的设置以及 cmd 小
- 对于Android中的手势识别可以从以下三个Listener入手——OnTouchListener、OnGestureListener、On
- 什么是Hystrix在日常生活用电中,如果我们的电路中正确地安置了保险丝,那么在电压异常升高时,保险丝就会熔断以便切断电流,从而起到保护电路
- EditText和TextView一样,也可以进行图文混排。所不同的是,TextView只用于显示图文混排效果,而EditText不仅可显示
- 接口介绍:该请求用于检测和识别图片中的品牌LOGO信息。即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片中LOGO的名称、位置和置
- 映射匹配兼容性前面我们已经能从表中查询出数据,并将数据封装到模型类中,这整个过程涉及到一张表和一个模型类:之所以数据能够成功的从表中获取并封
- springboot+mybatis整合过程中,开启控制台sql语句打印的多种方式:方法一1>(spring+mybatis)在myb
- .NET 4.0中新增了一个System.Runtime.Caching的名字空间,它提供了一系列可扩展的Cache框架,本文就简单的介绍一
- 版本对照各版本的文档说明:https://docs.spring.io/spring-data/elasticsearch/docs/1、在
- 本文实例讲述了Spring实战之清除缓存操作。分享给大家供大家参考,具体如下:一 配置文件<?xml version="1.
- 需求:android存储字符串数据简单的有SharePerfence不过只能存储89kb最多的数据(好像),超过这个数据如果不方便网络存储,
- 前言我们有时候在开发中,遇到这样的问题,就是我们需要小程序授权登录我们自己的后台,通过小程序的信息换取我们自己后台的token,实现账号密码
- maven 常见命令配置maven常用命令#创建项目 -D设置参数mvn archetype:generate -DgroupId=cn.d
- 以前使用HttpServletResponse可以通过输出流的方式来向前台输出图片。现在大部分都是使用springboot,在使用sprin
- Java中的动态和静态编译实例详解首先,我们来说说动态和静态编译的问题。 Q: java和javascript有什么