Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Hook实现Android 微信、陌陌 、探探位置模拟(附源码下载)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

Hook实现Android 微信、陌陌 、探探位置模拟

 最近需要对微信,陌陌等程序进行位置模拟 实现世界各地发朋友圈,搜索附近人的功能,本着站在巨人肩膀上的原则 爱网上搜索一番。

 也找到一些 代码文章,但是代码大都雷同而且都有一个弊端 比如说 微信 对目标函数实现hook之后第一次打开微信 第一次定位是可以改变的

  但是 我如果想更换地址的话 就需要重启手机了,重新加载hook了,试了很多次都是这样满足不了需求。

为了改进这个地方我们从gps定义的源代码流程开始看寻找hook系统函数的突破口 

 我也是看完之后才找到hook的地方 LOCATIOnmangerservice  这个类

@Override
 public void reportLOCATIOn(LOCATIOn LOCATIOn,Boolean passivE) {
 @R_696_10943@kCallerIsProvider(); //检测权限和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(),"@R_696_10943@kCallingOrSelfPermission",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 @L_772_21@ 可以去模拟提供位置信息
   //这里代码中并没有涉及到主动调用
   Object LOCATIOnManagerservice = param.args[1];
  }
  }
 });

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

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

当然还需要hook一些其他的辅助函数 ,这些函数都可以在 Android studio 中看到Java的代码 我们就无需过多解释了 上 源代码

源码下载

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

大佬总结

以上是大佬教程为你收集整理的Hook实现Android 微信、陌陌 、探探位置模拟(附源码下载)全部内容,希望文章能够帮你解决Hook实现Android 微信、陌陌 、探探位置模拟(附源码下载)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: