Xposed API详解

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() {       //回调函数(方法)
                        @Override
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            super.beforeHookedMethod(param);
                        }

                        @Override
                        protected 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方法执行之前操作
                        @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());

                        }


                    });

        }
    }

}

Hook获取参数与返回值

获取参数
//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());

                        }

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构造函数执行之前操作
                @Override
                protected 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有参构造函数执行之前操作
                        @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());

                        }

                    });


        }
    }

}

Hook复杂函数

在这里插入图片描述

在这里插入图片描述

//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);
                        }
                    });
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.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);
                        }
                    });

            


        }
    }

}

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.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);
                        }
                    }
            );
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);
                        }
                    }
            );


        }
    }

}

Hook替换函数与函数置空

替换函数
 //7、替换函数    @类的字节码文件    @hook的方法名   @使用replace替换原方法
            XposedHelpers.findAndHookMethod(
                    clazz,
                    "replaceFunc",
                    new XC_MethodReplacement() {
                        @Override
                        protected 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() {
                        @Override
                        protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {
                            Log.i("52Hz", "替换后的输出");
                            return null;
                        }
                    }
            );


        }
    }

}

函数置空
 //7、替换函数    @类的字节码文件    @hook的方法名   @使用replace替换原方法
            XposedHelpers.findAndHookMethod(
                    clazz,
                    "replaceFunc",
                    new XC_MethodReplacement() {
                        @Override
                        protected 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() {
                        @Override
                        protected 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() {
                        @Override
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            super.beforeHookedMethod(param);
                        }

                        @Override
                        protected 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() {
                        @Override
                        protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
                            super.beforeHookedMethod(param);
                        }

                        @Override
                        protected 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() {


                        @Override
                        protected 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() {


                        @Override
                        protected 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);

                        }

                    }

            );

        }
    }

}

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值