国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Android > 正文

Hook實(shí)現(xiàn)Android 微信、陌陌 、探探位置模擬(附源碼下載)

2019-10-23 18:34:32
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

Hook實(shí)現(xiàn)Android 微信、陌陌 、探探位置模擬

 最近需要對(duì)微信,陌陌等程序進(jìn)行位置模擬 實(shí)現(xiàn)世界各地發(fā)朋友圈,搜索附近人的功能,本著站在巨人肩膀上的原則 愛(ài)網(wǎng)上搜索一番。

 也找到一些 代碼和文章,但是代碼大都雷同而且都有一個(gè)弊端 比如說(shuō) 微信 對(duì)目標(biāo)函數(shù)實(shí)現(xiàn)hook之后第一次打開(kāi)微信 第一次定位是可以改變的

  但是 我如果想更換地址的話 就需要重啟手機(jī)了,重新加載hook了,試了很多次都是這樣滿(mǎn)足不了需求。

為了改進(jìn)這個(gè)地方我們從gps定義的源代碼流程開(kāi)始看尋找hook系統(tǒng)函數(shù)的突破口 

 我也是看完之后才找到hook的地方 LocationMangerService  這個(gè)類(lèi)

@Override public void reportLocation(Location location, boolean passive) { checkCallerIsProvider(); //檢測(cè)權(quán)限和uid if (!location.isComplete()) {  Log.w(TAG, "Dropping incomplete location: " + location);  return; }  //發(fā)送位置信息 mLocationHandler.removeMessages(MSG_LOCATION_CHANGED, location); Message m = Message.obtain(mLocationHandler, MSG_LOCATION_CHANGED, location); m.arg1 = (passive ? 1 : 0); mLocationHandler.sendMessageAtFrontOfQueue(m); }

那么我們可以hook掉這個(gè)location的參數(shù) 修改為我們想要定位的地方就可以實(shí)現(xiàn)效果了,

 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("實(shí)際 系統(tǒng) 經(jīng)度"+location.getLatitude() +" 系統(tǒng) 緯度"+location.getLongitude() +"系統(tǒng) 加速度 "+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 系統(tǒng) 經(jīng)度"+location.getLatitude() +" 系統(tǒng) 緯度"+location.getLongitude() +"系統(tǒng) 加速度 "+location.getAccuracy());  }  } });

如果我想主動(dòng)調(diào)用這個(gè)函數(shù) 必須要得到這個(gè)LocationMangerService 的對(duì)象 獲取這個(gè)對(duì)象可以通過(guò)hook LocationManager 的構(gòu)造函數(shù)獲取,

 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(" 對(duì) "+getProgramNameByPackageName(context)+" 模擬位置");   //把權(quán)限的檢查 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 主動(dòng)調(diào)用 對(duì)象的 reportLocation 方法 可以去模擬提供位置信息   //這里代碼中并沒(méi)有涉及到主動(dòng)調(diào)用   Object locationManagerService = param.args[1];  }  } });

Hook實(shí)現(xiàn)Android,微信、陌陌,、探探位置模擬,Hook位置模擬,Android

Hook實(shí)現(xiàn)Android,微信、陌陌,、探探位置模擬,Hook位置模擬,Android

當(dāng)然還需要hook一些其他的輔助函數(shù) ,這些函數(shù)都可以在 Android studio 中看到Java的代碼 我們就無(wú)需過(guò)多解釋了 上 源代碼

源碼下載

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開(kāi)發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 满洲里市| 吉林省| 郑州市| 堆龙德庆县| 思南县| 东安县| 兴安县| 郯城县| 于田县| 江西省| 肃宁县| 淄博市| 资溪县| 富川| 广平县| 萨迦县| 双桥区| 呼图壁县| 马公市| 大新县| 库尔勒市| 平顶山市| 蓬莱市| 西盟| 石台县| 观塘区| 平定县| 宁国市| 福泉市| 湟中县| 宝鸡市| 文昌市| 万安县| 嘉荫县| 新和县| 青州市| 隆昌县| 安塞县| 靖州| 满洲里市| 微山县|