引自https://www.cnblogs.com/zuimeiyujianni/p/8511719.html

public class Main implements IXposedHookLoadPackage
{/*拦截方法一:实现hook操作:使用hook类的名称进行内部查找hook_method(类型,类加载器,方法名,参数类型和调用 )类加载器 作用:将java类加载到java虚拟机Object... 作用:这是java的varag功能,允许方法拥有一个可变长度的参数列表,起始实际上这个参数就是一个数组*/private void hook_method(String className,ClassLoader classLoader,String methodName,Object...parameterTypesAndCall){try{//找到要拦截的方法并且拦截这个方法XposedHelpers.findAndHookMethod(className,classLoader,methodName,parameterTypesAndCallback);}catch(Exception e){XposedBridge.log(e);}}/*拦截方法二:实现hook操作:使用反射找到要hook的方法hook_methods(类名,方法名,回调方法)回调方法选择 XC_MethodHook 或 XC_MethodReplacementClass<?>clazz = Class.forName(className);注意:每次JVM创建一个对象时候,也创建一个java.lang.Class对象来描述该对象的类型。同一个类的所有实例,都共享同一个Class对象。使用java.lang.Class的静态方法 forName() 可以用给定的className,即类名来创建一个对象。可以使用clazz.newInstance()创建一个className表示的类的实例。这里的Class<?>clazz 表示 clazz 可以是任意类型的Class对象。java.lang.reflect.Modifier.isPublic(int mod)方法判断如果给定mod参数包含public修饰符,则返回true,否则返回falsejava.lang.reflect.Modifier.isAbstract(int mod)方法判定如果整数参数包含abstract修饰符,则返回true,否则返回falsejava.lang.reflect.Method.getModifiers()方法返回由此Method对象表示的方法的Java语言修饰符转为的整数值。 Modifier类应用于解码修饰符。java.lang.Class.getDeclaredMethods() 方法返回一个Method对象的数组,包括公共,保护,默认(包)访问和私有方法,但不包括继承的方法。该方法返回一个长度为0的数组,如果类或接口不声明*/private void hook_methods(String className, String methodName, XC_MethodHook xc_methodHook) {try {Class<?> clazz = Class.forName(className); //反射for (Method method : clazz.getDeclaredMethods())//如果 (通过反射找到的方法名和准备hook的方法名相同 && 方法判定如果整数参数包含abstract修饰符,则返回true,否则返回false &&// 方法判断如果给定参数包含public修饰符,则返回true,否则返回false )if (method.getName().equals(methodName) && !Modifier.isAbstract(method.getModifiers()) && Modifier.isPublic(method.getModifiers())) {XposedBridge.hookMethod(method, xc_methodHook); }} catch (Exception e) {XposedBridge.log(e);}}/*java.lang.Throwable 类是在Java语言中所有错误和异常的超类。只有在这个类(或它的一个子类)的实例对象由Java虚拟机抛出,也可以由Java throw语句抛出对于回调过来的参数MethodHookParam param一般有以下2种用处:1.param.args[0]:得到被拦截方法的第一个参数,返回值是Object2.param.getResult():得到被拦截方法的执行结果,返回值是Object*/@Overridepublic void handleLoadPackage(final LoadPackageParam lpp )throws Throwable{//函数内部只调用了一个方法,就是前面两个方法中的一个,这里是使用了使用了第一个hook方法,在参数中传入了一个匿名类hook_method("android.telephony.TelephonyManager",lpp.classLoader,"getDeviceId",new XC_MethodHook(){@Override //MethodHookParam 钩子方法参数protected void afterHookedMethod(MethodHookParam param) throws Throwable{/*具体的逻辑例如:Object obj = param.getResult();param.setResult("chen sheng");*/}});}
}***********************************************************************************************************************************
上面是hook了系统的imei信息,下面是Hook系统的地理位置信息:
方法1:在初始化的时候调用getLastKnowLocation()方法获取最后一个系统中的地理位置信息。
方法2:监听地理位置变化的回调借口中的onLocationChanged()回调方法LocationListener locationListener = new LocationListener(){............//回调方法@Overridepublic void onLocationChanged(Location location){showLocation(location);}}Hook方法一:hook_methods("android.location.LocationManager","getLastKnowLocation",new XC_MethodHook(){@Overrideprotected void afterHookMethod(MethodHookParam param) throws Throwable{Location l = new Location(LocationManager.PASSIVE_PROVIEDR);double lo = -10000d;double la = -10000d;l.setLatitude(lo);l.setLongitude(la);param.setResult(l);}});Hook方法二:思路:首先找到添加监听位置的方法requestLocationUpdates()然后通过反射得到这个回调对象,然后在进行操作因为回调方法是通过参数把Location对象传递过来,这里需要修改参数hook_methods("android.location.LocationManager","getLastKnowLocation",new XC_MethodHook(){@Overrideprotected void afterHookMethod(MethodHookParam param) throws Throwable{if(param.args.length == 4 && (param.args[0] instanceof String)){LocationListener ll = (LocationListener)param.args[3];Class<?> clazz = LocationListener.class;Method m = null;for(Method method: clazz.getDeclaredMethods()){if(method.getName.equals("onLocationChanged")){m = method;break;}}try{if(m != null){Object[] args = new Object[1];Location l = new Location(LocationManager.PASSIVE_PROVIDER);double lo = -10000d;double la = -10000d;l.setLatitude(lo);l.setLongitude(la);args[0]=l;m.invoke(ll,args);}}catch(Exception e){XposedBridge.log(e);}}}});

Xposed模块编写方法相关推荐

  1. Android Studio Xposed模块编写(二)

    阅读本文前,假设读者已经看过Android Studio Xposed模块编写(一)  相关环境已经搭建完成.本文演示案例与上文环境一致,不在赘述. 1.概述 Xposed是非常牛叉的一款hook框架 ...

  2. xposed模块编写教程_新手不要再被误导!这是一篇最新的Xposed模块编写教程

    在互联网上,关于Xposed模块编写的教程可谓是一抓一大把.但由于时间的推移,很多工具和方法都发生了变化(如Eclipse退出安卓编程舞台,AndroidStudio 不断升级导致其一些设置也随之变化 ...

  3. 《移动安全》(8)为挂钩而战-Xposed模块编写

    1.Xposed框架 Xposed是Android平台上的一个常用的HOOK框架,可以在不改变程序源代码的前提下,影响程序的运行.一个支持Xposed的Android应用程序被称为一个Xposed模块 ...

  4. 最新的Xposed模块编写教程

    原标题:新手不要再被误导!这是一篇最新的Xposed模块编写教程 查看全文 http://www.taodudu.cc/news/show-5139296.html 相关文章: smartbi问题_S ...

  5. Android Studio Xposed模块编写(一)

    1.环境说明 本文主要参考https://my.oschina.net/wisedream/blog/471292?fromerr=rNPFQidG的内容,自己实现了一遍,侵权请告知 已经安装xpos ...

  6. xposed模块编写教程_最新的Xposed模块编写教程

    前言:最近看了很多的Xposed的入门教程,根据的我的实践,写此教程,希望对新手有所帮助. 1.编写一个被Hook的App.代码 1 packagecom.example.hookdemo;2 3 i ...

  7. Xposed 模块编写

    1.在app的build.gradle的dependencies内添加 compileOnly 'de.robv.android.xposed:api:82' compileOnly 'de.robv ...

  8. xposed模块编写教程_太极xposed模块使用教程

    今天给大家分享一下太极xposed模块使用教程.很多小伙伴说下载不到Xposed模块,这个网上其实很多,但是第三方的下载站就算了吧.我也是一个深受其害的网瘾少年,只要是下载站的软件,一不留心一次性电脑 ...

  9. 安卓逆向 -- Xposed模块编写

    一.新建一个无界面项目 二.下载xposedBridgeAPI模块 https://github.com/924587628/XposedBridgeAPI 三.将下载的api拖进libs文件夹 四. ...

最新文章

  1. Atom markdown .md 编写格式技巧
  2. 如何理解并学习javascript中的面向对象(OOP)
  3. 适用于具有Couchbase和WildFly的多容器和多主机应用程序的Docker Machine,Swarm和Compose...
  4. 鸿蒙系统的挑战,简单的讲解下何为鸿蒙系统,可能会挑战你的认知颠覆你的想象...
  5. 单片机的 FIFO循环队列实现
  6. CentOS7安装单机版RabbitMQ集群
  7. HEVC算法和体系结构:预测编码之帧内预测
  8. 零基础入门语义分割-Task5 模型训练与验证
  9. ftp、sftp简介
  10. 计算机图形学概论论文5000字,关于计算机图形学探究的论文
  11. 电脑拆机清灰及机械硬盘安装记录
  12. 量土地用计算机,土地面积计算器
  13. tcp 抓包出现spurious retransmission
  14. 幻境网盾3.40 (skiller)
  15. 【Beta】Scrum Meeting 4
  16. mysql派生表(Derived Table)简单解析使用的小例子
  17. JS + Echarts实现中国地图 China.js
  18. mpc5125 uboot 阅读笔记
  19. 《软件工程导论第6版》--张海藩 牟永敏 课后答案及其详解 第5章 总体设计
  20. Cloudera Manager中安装部署Livy服务

热门文章

  1. 由火车退票制度改革想到的民生问题
  2. 中断使能和清除使能、中断挂起和清除挂起
  3. 读《深入浅出MySQL数据库开发、优化与管理维护(第2版)》笔记2 WITH ROLLUP关键字
  4. mt4的服务器在哪个文件,mt4的服务器地址
  5. 三步骤快速开发 iOS资讯类App
  6. python mkl 锐龙 cpu_Matlab 升级适配 AMD 锐龙,满血性能轻松提升 60%
  7. PDE优化|逆问题中偏微分方程约束优化的惩罚方法(Matlab代码实现)
  8. 程序员装B小技巧——管理你的桌面
  9. Auditbeat日志审计方案
  10. Virtuoso: 最全安装(IC618,IC617等), 问题解决