Hook实现Android 微信、陌陌 、探探位置模拟(附源码下载)

 更新时间:2017年03月15日 11:56:39   作者:Mark_YPQ  
这篇文章主要介绍了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的代码 我们就无需过多解释了 上 源代码

源码下载

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

相关文章

  • Android实现后台开启服务默默拍照功能

    Android实现后台开启服务默默拍照功能

    这篇文章主要为大家详细介绍了Android实现后台开启服务默默拍照功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Android自定义九宫格输入框

    Android自定义九宫格输入框

    这篇文章主要为大家详细介绍了Android自定义九宫格输入框,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • Android利用AsyncTask异步类实现网页内容放大缩小

    Android利用AsyncTask异步类实现网页内容放大缩小

    这篇文章主要为大家介绍了利用AsyncTask异步类实现网页内容放大缩小的相关资料,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • 详解如何魔改Retrofit实例

    详解如何魔改Retrofit实例

    这篇文章主要为大家介绍了详解如何魔改Retrofit实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • Android仿QQ空间主页面的实现

    Android仿QQ空间主页面的实现

    今天模仿安卓QQ空间,打开程序的启动画面和导航页面我就不做了,大家可以模仿微信的那个做一下,很简单。这次主要做一下主页面的实现,感兴趣的朋友可以参考下
    2013-01-01
  • Android自定义View仿QQ健康界面

    Android自定义View仿QQ健康界面

    这篇文章主要为大家详细介绍了Android自定义View仿QQ健康界面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Android之rk3588 开发环境准备及问题解决方法

    Android之rk3588 开发环境准备及问题解决方法

    这篇文章主要介绍了Android中的rk3588 开发环境准备,本文给大家分享遇到的问题及解决方法,本文给大家讲解的非常详细对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-11-11
  • Android自定义实现循环滚轮控件WheelView

    Android自定义实现循环滚轮控件WheelView

    滚轮布局WheelView大家经常使用,比如在选择生日的时候,风格类似系统提供的DatePickerDialog,这篇文章主要为大家详细介绍了Android自定义实现循环滚轮控件WheelView,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • Android GPS定位详解及实例代码

    Android GPS定位详解及实例代码

    这篇文章主要介绍了Android GPS定位详解及实例代码的相关资料,需要的朋友可以参考下
    2016-09-09
  • Android四大组件之广播BroadcastReceiver详解

    Android四大组件之广播BroadcastReceiver详解

    Android开发的四大组件分别是:活动(activity),用于表现功能;服务(service),后台运行服务,不提供界面呈现;广播接受者(Broadcast Receive),勇于接收广播;内容提供者(Content Provider),支持多个应用中存储和读取数据,相当于数据库,本篇着重介绍广播组件
    2021-11-11

最新评论