Xposed API详解

Xposed API详解

      • Hook修改变量
      • Hook普通方法
        • 回调函数
          • XC_MethodHook
          • XC_MethodReplacement
      • Hook获取参数与返回值
          • 获取参数
          • 获取返回值
      • Hook构造函数
        • 无参构造
        • 有参构造
      • Hook复杂函数
      • Hook自定义类参数
      • Hook替换函数与函数置空
        • 替换函数
        • 函数置空
      • Hook内部类与匿名类
        • 内部类
        • 匿名类
      • Xposed主动调用

Hook修改变量

  • 静态变量(static):类被初始化,同步进行初始化
  • 非静态变量:类被实例化(产生一个对象的时候),进行初始化

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5GjgzU9d-1636708324463)(F:\Xposed Hook.assets\image-20211110101349782.png)]

package com.hz52.xposeddalvik;/*** @Program: XposedDalvik* @Description:* @Author: 52Hz* @CreationTime: 2021年11月09日 17:21 星期二**/import android.util.Log;import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;public class Demo implements IXposedHookLoadPackage {public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {Log.d("52Hz", "hooking...");//过滤包名if (lpparam.packageName.equals("com.xiaojianbang.xposeddemo")) {final Class clazz = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo", lpparam.classLoader);//1、修改变量: @类的字节码 @变量名 @变量值XposedHelpers.setStaticIntField(clazz, "staticInt", 100);XposedHelpers.setStaticObjectField(clazz, "tage", "52Hz");}}
}

Hook普通方法

回调函数

回调函数常见的两种形式

在这里插入图片描述

XC_MethodHook
  • 自定义Hook执行之前操作
  • 自定义Hook执行之后操作
new XC_MethodHook() {       //回调函数(方法)@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {super.beforeHookedMethod(param);}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {super.afterHookedMethod(param);}});
XC_MethodReplacement
  • 替换函数
package com.hz52.xposeddalvik;/*** @Program: XposedDalvik* @Description:* @Author: 52Hz* @CreationTime: 2021年11月09日 17:21 星期二**/import android.util.Log;import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;public class Demo implements IXposedHookLoadPackage {public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {Log.d("52Hz", "hooking...");//过滤包名if (lpparam.packageName.equals("com.xiaojianbang.xposeddemo")) {final Class clazz = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo", lpparam.classLoader);//1、修改变量: @类的字节码 @变量名 @变量值// XposedHelpers.setStaticIntField(clazz, "staticInt", 100);//XposedHelpers.setStaticObjectField(clazz, "tage", "52Hz");//2、普通方法:@类的字节码 @方法名 @方法参数类型字节码,指明(因为存在重载,不同参数,不同方法)@回调函数XposedHelpers.findAndHookMethod(clazz,                              //hook的类的字节码"publicFunc",         //hook方法名称String.class,                       //hook方法的传入参数类型字节码类型,可扩增new XC_MethodHook() {               //回调函数(方法)//Hook方法执行之前操作@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {Log.d("52Hz", "publicFunc is hooked before");//获取传入参数:param.args是一个列表,获取第一个则param.args[0]Log.d("52Hz", "传入参数:" + param.args[0]);}//Hook方法执行之后操作@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {Log.d("52Hz", "publicFunc is hooked after");//获取返回值:param.getResult()Log.d("52Hz", "传出参数:" + param.getResult());}});}}}

Hook获取参数与返回值

获取参数
//Hook方法执行之前操作@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {Log.d("52Hz", "publicFunc is hooked before");//获取传入参数:param.args是一个列表,获取第一个则param.args[0]Log.d("52Hz", "传入参数:" + param.args[0]);}
获取返回值
//Hook方法执行之后操作@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {Log.d("52Hz", "publicFunc is hooked after");//获取返回值:param.getResult()Log.d("52Hz", "传出参数:" + param.getResult());}

Hook构造函数

构造函数类实例化的时候被调用

在这里插入图片描述

无参构造

在这里插入图片描述

package com.hz52.xposeddalvik;/*** @Program: XposedDalvik* @Description:* @Author: 52Hz* @CreationTime: 2021年11月09日 17:21 星期二**/import android.util.Log;import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;public class Demo implements IXposedHookLoadPackage {public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {Log.d("52Hz", "hooking...");//过滤包名if (lpparam.packageName.equals("com.xiaojianbang.xposeddemo")) {final Class clazz = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo", lpparam.classLoader);//1、修改变量: @类的字节码 @变量名 @变量值
//            XposedHelpers.setStaticIntField(clazz, "staticInt", 100);
//            XposedHelpers.setStaticObjectField(clazz, "tage", "52Hz");//2、普通方法:@类的字节码 @方法名 @方法参数类型字节码,指明(因为存在重载,不同参数,不同方法)@回调函数
//            XposedHelpers.findAndHookMethod(
//                    clazz,                              //hook的类的字节码
//                    "publicFunc",                       //hook方法名称
//                    String.class,                       //hook方法的传入参数类型字节码类型,可扩增
//                    new XC_MethodHook() {               //回调函数(方法)
//
//                        //Hook方法执行之前操作
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked before");
//
//                            //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                            Log.d("52Hz", "传入参数:" + param.args[0]);
//
//                        }
//
//                        //Hook方法执行之后操作
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked after");
//
//                            //获取返回值:param.getResult()
//                            Log.d("52Hz", "传出参数:" + param.getResult());
//
//                        }
//
//
//                    });//3.1、无参构造函数  @回调函数(因为不存在返回值,所以只beforeHookedMethod)XposedHelpers.findAndHookConstructor(clazz, new XC_MethodHook() {//Hook构造函数执行之前操作@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {//获取传入参数:param.args是一个列表,获取第一个则param.args[0]Log.d("52Hz", "构造函数参数:" + param.args[0]);}});}}}

在这里插入图片描述

在这里插入图片描述

有参构造

在这里插入图片描述

在这里插入图片描述

package com.hz52.xposeddalvik;/*** @Program: XposedDalvik* @Description:* @Author: 52Hz* @CreationTime: 2021年11月09日 17:21 星期二**/import android.util.Log;import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;public class Demo implements IXposedHookLoadPackage {public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {Log.d("52Hz", "hooking...");//过滤包名if (lpparam.packageName.equals("com.xiaojianbang.xposeddemo")) {final Class clazz = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo", lpparam.classLoader);//1、修改变量: @类的字节码 @变量名 @变量值
//            XposedHelpers.setStaticIntField(clazz, "staticInt", 100);
//            XposedHelpers.setStaticObjectField(clazz, "tage", "52Hz");//2、普通方法:@类的字节码 @方法名 @方法参数类型字节码,指明(因为存在重载,不同参数,不同方法)@回调函数
//            XposedHelpers.findAndHookMethod(
//                    clazz,                              //hook的类的字节码
//                    "publicFunc",                       //hook方法名称
//                    String.class,                       //hook方法的传入参数类型字节码类型,可扩增
//                    new XC_MethodHook() {               //回调函数(方法)
//
//                        //Hook方法执行之前操作
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked before");
//
//                            //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                            Log.d("52Hz", "传入参数:" + param.args[0]);
//
//                        }
//
//                        //Hook方法执行之后操作
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked after");
//
//                            //获取返回值:param.getResult()
//                            Log.d("52Hz", "传出参数:" + param.getResult());
//
//                        }
//
//
//                    });//3.1、无参构造函数  @回调函数(因为不存在返回值,所以只beforeHookedMethod)
//            XposedHelpers.findAndHookConstructor(clazz, new XC_MethodHook() {
//                //Hook构造函数执行之前操作
//                @Override
//                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                    //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                    Log.d("52Hz", "构造函数参数:" + param.args[0]);
//                }
//            });//3.2、有参构造函数 @参数类型字节码 @参数类型  @回调函数XposedHelpers.findAndHookConstructor(clazz,String.class,new XC_MethodHook() {//Hook有参构造函数执行之前操作@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {Log.d("52Hz", "Constructor is hooked before");//获取传入参数:param.args是一个列表,获取第一个则param.args[0]Log.d("52Hz", "构造函数传入参数:" + param.args[0]);}//Hook有参构造函数执行之后操作@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {Log.d("52Hz", "Constructor is hooked after");//获取返回值:param.getResult()Log.d("52Hz", "构造函数传出参数:" + param.getResult());}});}}}

Hook复杂函数

在这里插入图片描述

在这里插入图片描述

//5、Hook复杂方法:@方法名 @参数类型字节码  @回调函数//  String str,     String[][] strArr,      Map<String,String>,     ArrayList arrayList//  String.class    String[][].class        Map.class               ArrayList.classXposedHelpers.findAndHookMethod(clazz,"complexParameterFunc",//参数-startString.class,       //java.lang.StringString[][].class,   //[[Ljava.lang.StringMap.class,          //Map.classArrayList.class,    //Class.forName("java.util.ArrayList")//参数-endnew XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {super.beforeHookedMethod(param);}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {super.afterHookedMethod(param);}});
package com.hz52.xposeddalvik;/*** @Program: XposedDalvik* @Description:* @Author: 52Hz* @CreationTime: 2021年11月09日 17:21 星期二**/import android.util.Log;import java.util.ArrayList;
import java.util.Map;import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;public class Demo implements IXposedHookLoadPackage {public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {Log.d("52Hz", "hooking...");//过滤包名if (lpparam.packageName.equals("com.xiaojianbang.xposeddemo")) {final Class clazz = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo", lpparam.classLoader);//1、修改变量: @类的字节码 @变量名 @变量值
//            XposedHelpers.setStaticIntField(clazz, "staticInt", 100);
//            XposedHelpers.setStaticObjectField(clazz, "tage", "52Hz");//2、普通方法:@类的字节码 @方法名 @方法参数类型字节码,指明(因为存在重载,不同参数,不同方法)@回调函数
//            XposedHelpers.findAndHookMethod(
//                    clazz,                              //hook的类的字节码
//                    "publicFunc",                       //hook方法名称
//                    String.class,                       //hook方法的传入参数类型字节码类型,可扩增
//                    new XC_MethodHook() {               //回调函数(方法)
//
//                        //Hook方法执行之前操作
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked before");
//
//                            //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                            Log.d("52Hz", "传入参数:" + param.args[0]);
//
//                        }
//
//                        //Hook方法执行之后操作
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked after");
//
//                            //获取返回值:param.getResult()
//                            Log.d("52Hz", "传出参数:" + param.getResult());
//
//                        }
//
//
//                    });//3.1、无参构造函数  @回调函数(因为不存在返回值,所以只beforeHookedMethod)
//            XposedHelpers.findAndHookConstructor(clazz, new XC_MethodHook() {
//                //Hook构造函数执行之前操作
//                @Override
//                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                    //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                    Log.d("52Hz", "构造函数参数:" + param.args[0]);
//                }
//            });//3.2、有参构造函数 @参数类型字节码 @参数类型  @回调函数
//            XposedHelpers.findAndHookConstructor(
//                    clazz,
//                    String.class,
//                    new XC_MethodHook() {
//
//                        //Hook有参构造函数执行之前操作
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "Constructor is hooked before");
//
//                            //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                            Log.d("52Hz", "构造函数传入参数:" + param.args[0]);
//
//                        }
//
//                        //Hook有参构造函数执行之后操作
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "Constructor is hooked after");
//
//                            //获取返回值:param.getResult()
//                            Log.d("52Hz", "构造函数传出参数:" + param.getResult());
//
//                        }
//
//                    });//5、Hook复杂方法:@方法名 @参数类型字节码  @回调函数//  String str,     String[][] strArr,      Map<String,String>,     ArrayList arrayList//  String.class    String[][].class        Map.class               ArrayList.classXposedHelpers.findAndHookMethod(clazz,"complexParameterFunc",//参数-startString.class,       //java.lang.StringString[][].class,   //[[Ljava.lang.StringMap.class,          //Map.classArrayList.class,    //Class.forName("java.util.ArrayList")//参数-endnew XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {super.beforeHookedMethod(param);}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {super.afterHookedMethod(param);}});}}}

Hook自定义类参数

在这里插入图片描述

//6、需要hook的自定义类//final Class cls = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Animal",lpparam.classLoader);final Class cls = Class.forName("com.xiaojianbang.xposeddemo.Animal",false,lpparam.classLoader);//6、    @hook类的字节码文件    @hook的方法    @方法参数1:hook自定义类的字节码文件   @方法参数2:XposedHelpers.findAndHookMethod(clazz,"Inner",cls,        //com.xiaojianbang.xposeddemo.AnimalString.class,new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {super.beforeHookedMethod(param);}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {super.afterHookedMethod(param);}});
package com.hz52.xposeddalvik;/*** @Program: XposedDalvik* @Description:* @Author: 52Hz* @CreationTime: 2021年11月09日 17:21 星期二**/import android.util.Log;import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;public class Demo implements IXposedHookLoadPackage {public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {Log.d("52Hz", "hooking...");//-1、需要hook的apk(包名)if (lpparam.packageName.equals("com.xiaojianbang.xposeddemo")) {//0、需要hook的类final Class clazz = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo", lpparam.classLoader);//1、修改变量: @类的字节码 @变量名 @变量值
//            XposedHelpers.setStaticIntField(clazz, "staticInt", 100);
//            XposedHelpers.setStaticObjectField(clazz, "tage", "52Hz");//2、普通方法:@类的字节码 @方法名 @方法参数类型字节码,指明(因为存在重载,不同参数,不同方法)@回调函数
//            XposedHelpers.findAndHookMethod(
//                    clazz,                              //hook的类的字节码
//                    "publicFunc",                       //hook方法名称
//                    String.class,                       //hook方法的传入参数类型字节码类型,可扩增
//                    new XC_MethodHook() {               //回调函数(方法)
//
//                        //Hook方法执行之前操作
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked before");
//
//                            //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                            Log.d("52Hz", "传入参数:" + param.args[0]);
//
//                        }
//
//                        //Hook方法执行之后操作
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked after");
//
//                            //获取返回值:param.getResult()
//                            Log.d("52Hz", "传出参数:" + param.getResult());
//
//                        }
//
//
//                    });//3.1、无参构造函数  @回调函数(因为不存在返回值,所以只beforeHookedMethod)
//            XposedHelpers.findAndHookConstructor(clazz, new XC_MethodHook() {
//                //Hook构造函数执行之前操作
//                @Override
//                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                    //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                    Log.d("52Hz", "构造函数参数:" + param.args[0]);
//                }
//            });//3.2、有参构造函数 @参数类型字节码 @参数类型  @回调函数
//            XposedHelpers.findAndHookConstructor(
//                    clazz,
//                    String.class,
//                    new XC_MethodHook() {
//
//                        //Hook有参构造函数执行之前操作
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "Constructor is hooked before");
//
//                            //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                            Log.d("52Hz", "构造函数传入参数:" + param.args[0]);
//
//                        }
//
//                        //Hook有参构造函数执行之后操作
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "Constructor is hooked after");
//
//                            //获取返回值:param.getResult()
//                            Log.d("52Hz", "构造函数传出参数:" + param.getResult());
//
//                        }
//
//                    });//5、Hook复杂方法:@方法名 @参数类型字节码  @回调函数//  String str,     String[][] strArr,      Map<String,String>,     ArrayList arrayList//  String.class    String[][].class        Map.class               ArrayList.class
//            XposedHelpers.findAndHookMethod(
//                    clazz,
//                    "complexParameterFunc",
//                    //参数-start
//                    String.class,       //java.lang.String
//                    String[][].class,   //[[Ljava.lang.String
//                    Map.class,          //Map.class
//                    ArrayList.class,    //Class.forName("java.util.ArrayList")
//                    //参数-end
//                    new XC_MethodHook() {
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            super.beforeHookedMethod(param);
//                        }
//
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            super.afterHookedMethod(param);
//                        }
//                    });//6、需要hook的自定义类//final Class cls = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Animal",lpparam.classLoader);final Class cls = Class.forName("com.xiaojianbang.xposeddemo.Animal",false,lpparam.classLoader);//6、    @hook类的字节码文件    @hook的方法    @方法参数1:hook自定义类的字节码文件   @方法参数2:XposedHelpers.findAndHookMethod(clazz,"Inner",cls,        //com.xiaojianbang.xposeddemo.AnimalString.class,new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {super.beforeHookedMethod(param);}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {super.afterHookedMethod(param);}});}}}

Hook替换函数与函数置空

替换函数

 //7、替换函数    @类的字节码文件    @hook的方法名   @使用replace替换原方法XposedHelpers.findAndHookMethod(clazz,"replaceFunc",new XC_MethodReplacement() {@Overrideprotected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {Log.i("52Hz", "替换后的输出");return null;}});
package com.hz52.xposeddalvik;/*** @Program: XposedDalvik* @Description:* @Author: 52Hz* @CreationTime: 2021年11月09日 17:21 星期二**/import android.util.Log;import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;public class Demo implements IXposedHookLoadPackage {public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {Log.d("52Hz", "hooking...");//-1、需要hook的apk(包名)if (lpparam.packageName.equals("com.xiaojianbang.xposeddemo")) {//0、需要hook的类final Class clazz = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo", lpparam.classLoader);//1、修改变量: @类的字节码 @变量名 @变量值
//            XposedHelpers.setStaticIntField(clazz, "staticInt", 100);
//            XposedHelpers.setStaticObjectField(clazz, "tage", "52Hz");//2、普通方法:@类的字节码 @方法名 @方法参数类型字节码,指明(因为存在重载,不同参数,不同方法)@回调函数
//            XposedHelpers.findAndHookMethod(
//                    clazz,                              //hook的类的字节码
//                    "publicFunc",                       //hook方法名称
//                    String.class,                       //hook方法的传入参数类型字节码类型,可扩增
//                    new XC_MethodHook() {               //回调函数(方法)
//
//                        //Hook方法执行之前操作
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked before");
//
//                            //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                            Log.d("52Hz", "传入参数:" + param.args[0]);
//
//                        }
//
//                        //Hook方法执行之后操作
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked after");
//
//                            //获取返回值:param.getResult()
//                            Log.d("52Hz", "传出参数:" + param.getResult());
//
//                        }
//
//
//                    });//3.1、无参构造函数  @回调函数(因为不存在返回值,所以只beforeHookedMethod)
//            XposedHelpers.findAndHookConstructor(clazz, new XC_MethodHook() {
//                //Hook构造函数执行之前操作
//                @Override
//                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                    //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                    Log.d("52Hz", "构造函数参数:" + param.args[0]);
//                }
//            });//3.2、有参构造函数 @参数类型字节码 @参数类型  @回调函数
//            XposedHelpers.findAndHookConstructor(
//                    clazz,
//                    String.class,
//                    new XC_MethodHook() {
//
//                        //Hook有参构造函数执行之前操作
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "Constructor is hooked before");
//
//                            //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                            Log.d("52Hz", "构造函数传入参数:" + param.args[0]);
//
//                        }
//
//                        //Hook有参构造函数执行之后操作
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "Constructor is hooked after");
//
//                            //获取返回值:param.getResult()
//                            Log.d("52Hz", "构造函数传出参数:" + param.getResult());
//
//                        }
//
//                    });//5、Hook复杂方法:@方法名 @参数类型字节码  @回调函数//  String str,     String[][] strArr,      Map<String,String>,     ArrayList arrayList//  String.class    String[][].class        Map.class               ArrayList.class
//            XposedHelpers.findAndHookMethod(
//                    clazz,
//                    "complexParameterFunc",
//                    //参数-start
//                    String.class,       //java.lang.String
//                    String[][].class,   //[[Ljava.lang.String
//                    Map.class,          //Map.class
//                    ArrayList.class,    //Class.forName("java.util.ArrayList")
//                    //参数-end
//                    new XC_MethodHook() {
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            super.beforeHookedMethod(param);
//                        }
//
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            super.afterHookedMethod(param);
//                        }
//                    });//6、需要hook的自定义类//final Class cls = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Animal",lpparam.classLoader);
//            final Class cls = Class.forName("com.xiaojianbang.xposeddemo.Animal",false,lpparam.classLoader);//6、    @hook类的字节码文件    @hook的方法    @方法参数1:hook自定义类的字节码文件   @方法参数2:
//            XposedHelpers.findAndHookMethod(
//                    clazz,
//                    "Inner",
//                    cls,        //com.xiaojianbang.xposeddemo.Animal
//                    String.class,
//                    new XC_MethodHook() {
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            super.beforeHookedMethod(param);
//                        }
//
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            super.afterHookedMethod(param);
//                        }
//                    }
//            );//7、替换函数    @类的字节码文件    @hook的方法名   @使用replace替换原方法XposedHelpers.findAndHookMethod(clazz,"replaceFunc",new XC_MethodReplacement() {@Overrideprotected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {Log.i("52Hz", "替换后的输出");return null;}});}}}

函数置空

 //7、替换函数    @类的字节码文件    @hook的方法名   @使用replace替换原方法XposedHelpers.findAndHookMethod(clazz,"replaceFunc",new XC_MethodReplacement() {@Overrideprotected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {return null;}});
package com.hz52.xposeddalvik;/*** @Program: XposedDalvik* @Description:* @Author: 52Hz* @CreationTime: 2021年11月09日 17:21 星期二**/import android.util.Log;import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodReplacement;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;public class Demo implements IXposedHookLoadPackage {public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {Log.d("52Hz", "hooking...");//-1、需要hook的apk(包名)if (lpparam.packageName.equals("com.xiaojianbang.xposeddemo")) {//0、需要hook的类final Class clazz = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo", lpparam.classLoader);//1、修改变量: @类的字节码 @变量名 @变量值
//            XposedHelpers.setStaticIntField(clazz, "staticInt", 100);
//            XposedHelpers.setStaticObjectField(clazz, "tage", "52Hz");//2、普通方法:@类的字节码 @方法名 @方法参数类型字节码,指明(因为存在重载,不同参数,不同方法)@回调函数
//            XposedHelpers.findAndHookMethod(
//                    clazz,                              //hook的类的字节码
//                    "publicFunc",                       //hook方法名称
//                    String.class,                       //hook方法的传入参数类型字节码类型,可扩增
//                    new XC_MethodHook() {               //回调函数(方法)
//
//                        //Hook方法执行之前操作
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked before");
//
//                            //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                            Log.d("52Hz", "传入参数:" + param.args[0]);
//
//                        }
//
//                        //Hook方法执行之后操作
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked after");
//
//                            //获取返回值:param.getResult()
//                            Log.d("52Hz", "传出参数:" + param.getResult());
//
//                        }
//
//
//                    });//3.1、无参构造函数  @回调函数(因为不存在返回值,所以只beforeHookedMethod)
//            XposedHelpers.findAndHookConstructor(clazz, new XC_MethodHook() {
//                //Hook构造函数执行之前操作
//                @Override
//                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                    //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                    Log.d("52Hz", "构造函数参数:" + param.args[0]);
//                }
//            });//3.2、有参构造函数 @参数类型字节码 @参数类型  @回调函数
//            XposedHelpers.findAndHookConstructor(
//                    clazz,
//                    String.class,
//                    new XC_MethodHook() {
//
//                        //Hook有参构造函数执行之前操作
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "Constructor is hooked before");
//
//                            //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                            Log.d("52Hz", "构造函数传入参数:" + param.args[0]);
//
//                        }
//
//                        //Hook有参构造函数执行之后操作
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "Constructor is hooked after");
//
//                            //获取返回值:param.getResult()
//                            Log.d("52Hz", "构造函数传出参数:" + param.getResult());
//
//                        }
//
//                    });//5、Hook复杂方法:@方法名 @参数类型字节码  @回调函数//  String str,     String[][] strArr,      Map<String,String>,     ArrayList arrayList//  String.class    String[][].class        Map.class               ArrayList.class
//            XposedHelpers.findAndHookMethod(
//                    clazz,
//                    "complexParameterFunc",
//                    //参数-start
//                    String.class,       //java.lang.String
//                    String[][].class,   //[[Ljava.lang.String
//                    Map.class,          //Map.class
//                    ArrayList.class,    //Class.forName("java.util.ArrayList")
//                    //参数-end
//                    new XC_MethodHook() {
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            super.beforeHookedMethod(param);
//                        }
//
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            super.afterHookedMethod(param);
//                        }
//                    });//6、需要hook的自定义类//final Class cls = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Animal",lpparam.classLoader);
//            final Class cls = Class.forName("com.xiaojianbang.xposeddemo.Animal",false,lpparam.classLoader);//6、    @hook类的字节码文件    @hook的方法    @方法参数1:hook自定义类的字节码文件   @方法参数2:
//            XposedHelpers.findAndHookMethod(
//                    clazz,
//                    "Inner",
//                    cls,        //com.xiaojianbang.xposeddemo.Animal
//                    String.class,
//                    new XC_MethodHook() {
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            super.beforeHookedMethod(param);
//                        }
//
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            super.afterHookedMethod(param);
//                        }
//                    }
//            );//7、替换函数    @类的字节码文件    @hook的方法名   @使用replace替换原方法XposedHelpers.findAndHookMethod(clazz,"replaceFunc",new XC_MethodReplacement() {@Overrideprotected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {return null;}});}}}

Hook内部类与匿名类

内部类

内部类一个类里面还有一个类

在这里插入图片描述

在这里插入图片描述

smali

在这里插入图片描述

//8、hook内部类     @hook的内部类:包名+类名+$+类名    @匿名类方法      @匿名类方法参数字节码XposedHelpers.findAndHookMethod(XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo$InnerClass", lpparam.classLoader),"innerFunc",String.class,new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {super.beforeHookedMethod(param);}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {super.afterHookedMethod(param);}});
package com.hz52.xposeddalvik;/*** @Program: XposedDalvik* @Description:* @Author: 52Hz* @CreationTime: 2021年11月09日 17:21 星期二**/import android.util.Log;import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;public class Demo implements IXposedHookLoadPackage {public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {Log.d("52Hz", "hooking...");//-1、需要hook的apk(包名)if (lpparam.packageName.equals("com.xiaojianbang.xposeddemo")) {//0、需要hook的类final Class clazz = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo", lpparam.classLoader);//1、修改变量: @类的字节码 @变量名 @变量值
//            XposedHelpers.setStaticIntField(clazz, "staticInt", 100);
//            XposedHelpers.setStaticObjectField(clazz, "tage", "52Hz");//2、普通方法:@类的字节码 @方法名 @方法参数类型字节码,指明(因为存在重载,不同参数,不同方法)@回调函数
//            XposedHelpers.findAndHookMethod(
//                    clazz,                              //hook的类的字节码
//                    "publicFunc",                       //hook方法名称
//                    String.class,                       //hook方法的传入参数类型字节码类型,可扩增
//                    new XC_MethodHook() {               //回调函数(方法)
//
//                        //Hook方法执行之前操作
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked before");
//
//                            //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                            Log.d("52Hz", "传入参数:" + param.args[0]);
//
//                        }
//
//                        //Hook方法执行之后操作
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked after");
//
//                            //获取返回值:param.getResult()
//                            Log.d("52Hz", "传出参数:" + param.getResult());
//
//                        }
//
//
//                    });//3.1、无参构造函数  @回调函数(因为不存在返回值,所以只beforeHookedMethod)
//            XposedHelpers.findAndHookConstructor(clazz, new XC_MethodHook() {
//                //Hook构造函数执行之前操作
//                @Override
//                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                    //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                    Log.d("52Hz", "构造函数参数:" + param.args[0]);
//                }
//            });//3.2、有参构造函数 @参数类型字节码 @参数类型  @回调函数
//            XposedHelpers.findAndHookConstructor(
//                    clazz,
//                    String.class,
//                    new XC_MethodHook() {
//
//                        //Hook有参构造函数执行之前操作
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "Constructor is hooked before");
//
//                            //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                            Log.d("52Hz", "构造函数传入参数:" + param.args[0]);
//
//                        }
//
//                        //Hook有参构造函数执行之后操作
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "Constructor is hooked after");
//
//                            //获取返回值:param.getResult()
//                            Log.d("52Hz", "构造函数传出参数:" + param.getResult());
//
//                        }
//
//                    });//5、Hook复杂方法:@方法名 @参数类型字节码  @回调函数//  String str,     String[][] strArr,      Map<String,String>,     ArrayList arrayList//  String.class    String[][].class        Map.class               ArrayList.class
//            XposedHelpers.findAndHookMethod(
//                    clazz,
//                    "complexParameterFunc",
//                    //参数-start
//                    String.class,       //java.lang.String
//                    String[][].class,   //[[Ljava.lang.String
//                    Map.class,          //Map.class
//                    ArrayList.class,    //Class.forName("java.util.ArrayList")
//                    //参数-end
//                    new XC_MethodHook() {
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            super.beforeHookedMethod(param);
//                        }
//
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            super.afterHookedMethod(param);
//                        }
//                    });//6、需要hook的自定义类//final Class cls = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Animal",lpparam.classLoader);
//            final Class cls = Class.forName("com.xiaojianbang.xposeddemo.Animal",false,lpparam.classLoader);//6、    @hook类的字节码文件    @hook的方法    @方法参数1:hook自定义类的字节码文件   @方法参数2:
//            XposedHelpers.findAndHookMethod(
//                    clazz,
//                    "Inner",
//                    cls,        //com.xiaojianbang.xposeddemo.Animal
//                    String.class,
//                    new XC_MethodHook() {
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            super.beforeHookedMethod(param);
//                        }
//
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            super.afterHookedMethod(param);
//                        }
//                    }
//            );//7、替换函数    @类的字节码文件    @hook的方法名   @使用replace替换原方法
//            XposedHelpers.findAndHookMethod(
//                    clazz,
//                    "replaceFunc",
//                    new XC_MethodReplacement() {
//                        @Override
//                        protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {
//                            Log.i("52Hz", "替换后的输出");
//                            return null;
//                        }
//                    }
//            );//8、hook内部类     @hook的内部类:包名+类名+$+类名    @匿名类方法      @匿名类方法参数字节码XposedHelpers.findAndHookMethod(XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo$InnerClass", lpparam.classLoader),"innerFunc",String.class,new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {super.beforeHookedMethod(param);}@Overrideprotected void afterHookedMethod(MethodHookParam param) throws Throwable {super.afterHookedMethod(param);}});}}}

匿名类

匿名类没有名称的类

Xposed主动调用

在这里插入图片描述

 //8、hook内部类     @hook的内部类:包名+类名+$+类名    @匿名类方法      @匿名类方法参数字节码XposedHelpers.findAndHookMethod(XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo$InnerClass", lpparam.classLoader),"innerFunc",String.class,new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {Log.i("52Hz", "Xposed主动调用前");//9、xposed主动调用#方法:@不是静态方法需要先实例化大类.newInstance()  @方法名XposedHelpers.callMethod(clazz.newInstance(),        //外面大类进行实例化:大类.newInstance()"refl"//  new Object[0]       //参数列表没有去除);Log.i("52Hz", "Xposed主动调用后");//param.thisObject获取当前所属的对象int cc = XposedHelpers.getIntField(param.thisObject, "innerPublicInt");Log.i("52Hz", "" + cc);}});

param.thisObject获取其所属对象,最终得到InnerClass

在这里插入图片描述

在这里插入图片描述

package com.hz52.xposeddalvik;/*** @Program: XposedDalvik* @Description:* @Author: 52Hz* @CreationTime: 2021年11月09日 17:21 星期二**/import android.util.Log;import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage.LoadPackageParam;public class Demo implements IXposedHookLoadPackage {public void handleLoadPackage(final LoadPackageParam lpparam) throws Throwable {Log.d("52Hz", "hooking...");//-1、需要hook的apk(包名)if (lpparam.packageName.equals("com.xiaojianbang.xposeddemo")) {//0、需要hook的类final Class clazz = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo", lpparam.classLoader);//1、修改变量: @类的字节码 @变量名 @变量值
//            XposedHelpers.setStaticIntField(clazz, "staticInt", 100);
//            XposedHelpers.setStaticObjectField(clazz, "tage", "52Hz");//2、普通方法:@类的字节码 @方法名 @方法参数类型字节码,指明(因为存在重载,不同参数,不同方法)@回调函数
//            XposedHelpers.findAndHookMethod(
//                    clazz,                              //hook的类的字节码
//                    "publicFunc",                       //hook方法名称
//                    String.class,                       //hook方法的传入参数类型字节码类型,可扩增
//                    new XC_MethodHook() {               //回调函数(方法)
//
//                        //Hook方法执行之前操作
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked before");
//
//                            //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                            Log.d("52Hz", "传入参数:" + param.args[0]);
//
//                        }
//
//                        //Hook方法执行之后操作
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "publicFunc is hooked after");
//
//                            //获取返回值:param.getResult()
//                            Log.d("52Hz", "传出参数:" + param.getResult());
//
//                        }
//
//
//                    });//3.1、无参构造函数  @回调函数(因为不存在返回值,所以只beforeHookedMethod)
//            XposedHelpers.findAndHookConstructor(clazz, new XC_MethodHook() {
//                //Hook构造函数执行之前操作
//                @Override
//                protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                    //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                    Log.d("52Hz", "构造函数参数:" + param.args[0]);
//                }
//            });//3.2、有参构造函数 @参数类型字节码 @参数类型  @回调函数
//            XposedHelpers.findAndHookConstructor(
//                    clazz,
//                    String.class,
//                    new XC_MethodHook() {
//
//                        //Hook有参构造函数执行之前操作
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "Constructor is hooked before");
//
//                            //获取传入参数:param.args是一个列表,获取第一个则param.args[0]
//                            Log.d("52Hz", "构造函数传入参数:" + param.args[0]);
//
//                        }
//
//                        //Hook有参构造函数执行之后操作
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            Log.d("52Hz", "Constructor is hooked after");
//
//                            //获取返回值:param.getResult()
//                            Log.d("52Hz", "构造函数传出参数:" + param.getResult());
//
//                        }
//
//                    });//5、Hook复杂方法:@方法名 @参数类型字节码  @回调函数//  String str,     String[][] strArr,      Map<String,String>,     ArrayList arrayList//  String.class    String[][].class        Map.class               ArrayList.class
//            XposedHelpers.findAndHookMethod(
//                    clazz,
//                    "complexParameterFunc",
//                    //参数-start
//                    String.class,       //java.lang.String
//                    String[][].class,   //[[Ljava.lang.String
//                    Map.class,          //Map.class
//                    ArrayList.class,    //Class.forName("java.util.ArrayList")
//                    //参数-end
//                    new XC_MethodHook() {
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            super.beforeHookedMethod(param);
//                        }
//
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            super.afterHookedMethod(param);
//                        }
//                    });//6、需要hook的自定义类//final Class cls = XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Animal",lpparam.classLoader);
//            final Class cls = Class.forName("com.xiaojianbang.xposeddemo.Animal",false,lpparam.classLoader);//6、    @hook类的字节码文件    @hook的方法    @方法参数1:hook自定义类的字节码文件   @方法参数2:
//            XposedHelpers.findAndHookMethod(
//                    clazz,
//                    "Inner",
//                    cls,        //com.xiaojianbang.xposeddemo.Animal
//                    String.class,
//                    new XC_MethodHook() {
//                        @Override
//                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//                            super.beforeHookedMethod(param);
//                        }
//
//                        @Override
//                        protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//                            super.afterHookedMethod(param);
//                        }
//                    }
//            );//7、替换函数    @类的字节码文件    @hook的方法名   @使用replace替换原方法
//            XposedHelpers.findAndHookMethod(
//                    clazz,
//                    "replaceFunc",
//                    new XC_MethodReplacement() {
//                        @Override
//                        protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {
//                            Log.i("52Hz", "替换后的输出");
//                            return null;
//                        }
//                    }
//            );//8、hook内部类     @hook的内部类:包名+类名+$+类名    @匿名类方法      @匿名类方法参数字节码XposedHelpers.findAndHookMethod(XposedHelpers.findClass("com.xiaojianbang.xposeddemo.Demo$InnerClass", lpparam.classLoader),"innerFunc",String.class,new XC_MethodHook() {@Overrideprotected void beforeHookedMethod(MethodHookParam param) throws Throwable {Log.i("52Hz", "Xposed主动调用前");//9、xposed主动调用#方法:@不是静态方法需要先实例化大类.newInstance()  @方法名XposedHelpers.callMethod(clazz.newInstance(),        //外面大类进行实例化:大类.newInstance()"refl"//  new Object[0]       //参数列表没有去除);Log.i("52Hz", "Xposed主动调用后");//param.thisObject获取当前所属的对象int cc = XposedHelpers.getIntField(param.thisObject, "innerPublicInt");Log.i("52Hz", " " + cc);}});}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1620314.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【Python】PySpark

前言 Apache Spark是用于大规模数据&#xff08;large-scala data&#xff09;处理的统一&#xff08;unified&#xff09;分析引擎。 简单来说&#xff0c;Spark是一款分布式的计算框架&#xff0c;用于调度成百上千的服务器集群&#xff0c;计算TB、PB乃至EB级别的海量数据…

Xposed常用逆向函数

1. 创建Xposed工程 在Android Studio中新建一个app工程&#xff0c;修改其中的 AndroidManifest.xml 文件&#xff0c;在<application></application>标签中增加如下代码 <meta-dataandroid:name"xposedmodule"android:value"true" />…

Xposed环境安装

一、Xposed 框架实现 Hook 的原理介绍 Zygote是Android的核心&#xff0c;每运行一个app&#xff0c;Zygote就会fork一个虚拟机实例来运行app&#xff0c; Xposed Framework深入到了Android核心机制中&#xff0c;通过改造Zygote来实现一些很牛逼的 功能。Zygote的启动配置在i…

Xposed 使用教程

Xposed作为Android开发中的神器&#xff0c;功能强大之处就不做过多介绍了&#xff0c;本文主要讲解一些常用的API&#xff0c;基本包含常用的Hook操作。 Hook静态变量 Class cla XposedHelpers.findClass(claName, loadPackageParam.classLoader); XposedHelpers.setStatic…

xposed android 4.4.2,xposed新版54

xposed新版54是一款好用的系统工具&#xff0c;软件安全&#xff0c;无需root权限&#xff0c;下载相对应功能板块即可在应用内实现应用多开、虚拟步数、以及qq&#xff0c;微信等多种功能&#xff0c;方便又实用&#xff01; 软件介绍 系统功能增强&#xff0c;如后台管制&…

Xposed安装

记录一下自己安装xposed的过程。网上很多xposed的安装教程&#xff0c;里面各种都是直接跳转到官网地址下载Xposed&#xff0c;但国内打不开&#xff0c;提示如下&#xff1a; 因此只能下载对应版本zip包进行本地安装&#xff0c;下载对应zip包放到“ /sdcard/Android/data/de…

android8 检测xposed,Xposed检测与自定义Xposed

Xposed检测与自定义Xposed 前言: Xposed检测 1、遍历App安装列表检测 2、自造异常检测堆栈信息。 3、检查关键Java方法是否变为native方法 4、反射XposedHelper类和XposedBridge类 5、检测Xposed相关文件 6、Root检测 7、安全建议 自定义Xposed 一、修改XposedBridge.jar包名 …

xposed android4.4,应用管理Xposed

应用管理Xposed是一款安卓应用管理xposed模块&#xff0c;可以帮助你更好的管理自己手机的各种应用的权限&#xff0c;应用使用需要先阅读了解一下使用的方法&#xff0c;非常强大的一款插件&#xff0c;欢迎大家前来下载。 新版特性 1. 为部分列表也添加基本筛选。 2. 在主页显…

android xposed 简书,Xposed 入坑篇

device-2018-04-12-101001.png 接下来开始敲代码了 美滋滋(皮一下很开心) 上一张整个工程的图 QQ截图20180412102021.png 以下是Test和Tutorial的代码 package com.zed.xposed.demo; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.Xpo…

Xposed 入门

Xposed的原理 Android基于Linux&#xff0c;第一个启动的进程自然是init进程&#xff0c;该进程会 启动所有Android进程的父进程——Zygote(孵化)进程&#xff0c;该进程的启动配置在 /init.rc脚本中&#xff0c;而Zygote进程对应的执行文件是/system/bin/app_process&#xf…

Xposed

[Xposed framework] (概述) 记录学习文章&#xff0c;这里介绍一下Xposed framework&#xff0c;它可以让你修改ROM&#xff0c;无需修改任何APK或flashing.快速入门&#xff0c;请看Xposed上XDA 之android basic 101&#xff1a; http://www.youtube.com/watch?vuRR0Flqx9M8 …

Xposed安装与使用

xposed是什么&#xff1f; 一个很牛逼的框架&#xff0c;可以在不修改APK的情况下影响程序的运行&#xff0c;比如&#xff1a; 直接把APP的界面改成自己想要的样去掉界面里不喜欢的东西&#xff0c;自动抢红包消息防撤回步数修改等等 Xposed的工作原理 在开始修改之前&…

【Android】Xposed 框架解析

前言 Xposed这位老兄大家可能不认识&#xff0c;微信自动抢红包大家听过吧、微信记录器作弊大家听过吧、地理位置模拟大家听过吧&#xff0c;我很负责任的告诉大家&#xff0c;这些都是Xposed干的&#xff0c;对的&#xff0c;就是它&#xff0c;相信大家充着“谁抢我红包”的…

Android之Xposed框架完全使用指南

文章目录 Xposed环境搭建Xposed简介Xposed原理Xposed的安装 Xposed插件开发Xposed插件编写流程Xposed开发之Hook构造函数相关API无参构造函数的hook有参构造函数的hook实际效果 Xposed开发之修改属性相关API修改静态字段和成员字段实际效果 Xposed开发之hook一般函数相关APIhoo…

深入理解Android(三):Xposed详解

编者按&#xff1a;随着移动设备硬件能力的提升&#xff0c;Android系统开放的特质开始显现&#xff0c;各种开发的奇技淫巧、黑科技不断涌现&#xff0c;InfoQ特联合《深入理解Android》系列图书作者邓凡平&#xff0c;开设深入理解Android专栏&#xff0c;探索Android从框架到…

Xposed入门教程

2019年8月27日16时51分47秒以前一直没机会接触Android Hook方式的逆向今天有空试了下&#xff0c;以前也很少写这种东西&#xff0c;今天第一次&#xff0c;认真写下&#xff0c;记录一下?准备 准备搞太极的&#xff0c;但是Xposed都不会&#xff0c;不好搞&#xff0c;所以就…

RabbitMQ---订阅模型-Topic

订阅模型-Topic • Topic类型的Exchange与Direct相比&#xff0c;都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符&#xff01; • Routingkey 一般都是有一个或多个单词组成&#xff0c;多个单词之间以…

PostgreSQL命令行工具psql常用命令

1. 概述 通常情况下操作数据库使用图形化客户端工具&#xff0c;在实际工作中&#xff0c;生产环境是不允许直接连接数据库主机&#xff0c;只能在跳板机上登录到Linux服务器才能连接数据库服务器&#xff0c;此时就需要使用到命令行工具。psql是PostgreSQL中的一个命令行交互…

pyreverse+Graphviz 快速理清整个项目中的代码结构

作用 &#xff1a; 分析代码中的调用关系&#xff0c;帮助快速理清代码。 安装方法&#xff1a;以windows为例 • 从官网下载 https://www.graphviz.org/download/ 安装• 记得将其添加到系统路径• 运行下面命令来检查安装是否完成&#xff1a; dot -V• 安装Pyreverse&…

配置web服务

Web服务器又称为WWW服务器&#xff0c;它是放置一般网站的服务器。一台Web服务器上可以建立多个网站&#xff0c;各网站的拥有者只需要把做好的网页和相关文件放置在Web服务器的网站中&#xff0c;其它用户就可以用浏览器访问网站中的网页了。 LAMP是Linux, Apache, MySQL, PH…