-
$ hook指定目标函数加载 前/后以及执行顺序
$ 参数/返回值打印
$ 参数/返回值替换
$ 调用栈打印
$ 通过param.thisObject 来获取实例
$ 获取类的两种方法:
1. XposedHelpers.findClass 2. loadPackageParam.classLoader.loadClass(className)
-
Hook XposedBridge hookAllMethods方法
$ 使用hookAllMethods Hook住指定方法
$ 通过hook类的实例方法获得类的实例
$ 主动调用动态方法
-
Hook 带壳App
xpose 不能直接hook到带壳app下的类。$ Hook壳原理
$ Hook到目标类
-
$ Hook构造方法并挂钩
$ 获取实例
$ 返回给定对象实例中对象字段的值
-
$ callMethod
$ getObjectField
$ getStaticIntField
-
$ 过滤系统版本
$ 打印进程名
$ 打印包名
$ 获取ClassLoader,用于查找包名等。
-
$ hook 多dex问题
$ findAndHookMethod可以指定参数类型指定hook特定的重载方法
-
$ XposedHelpers.callStaticMethod 主动调用
$ 反射主动调用
$ context构造
-
$ 使用http服务暴露算法
-
获取实例的三种方式
$ Hook一个实例方法来获取实例
$ 获取构造方法来获取实例
还可以findConstructorExact获得构造函数,然后.newInstance() 获取实例 mNotificationLightConstructor = XposedHelpers.findConstructorExact(CLASS_NOTIFICATION_RECORD+".Light", mContext.getClassLoader(),int.class, int.class, int.class); return mNotificationLightConstructor.newInstance(color, onMs, offMs);
$ xposed.newInstance(clazz) 获取实例
-
为什么HookMessage类在 com.example.xposed1包下,查看包下面所有的类却没有HookMessage?
因为 HookMessage implements IXposedHookLoadPackage, 此类实现了接口,所以搜索不到,他不属于原本的包。
-
HookMessage下的XC_MethodHook 就是 HookMessage$1 ,他是匿名的内部类,它有 beforeHookedMethod和 afterHookedMethod 两个方法,如果想hook XC_MethodHook 函数,那么就需要hook HookMessage$1, 假如一个类有多个hook 方法比如多个XC_MethodHook ,那么就具有多个HookMessage内部类,比如HookMessage$1、HookMessage$2等。
-
如何定位className、XC_MethodHook 是属于哪个进程的内部类。
if (loadPackageParam.packageName.equals("com.example.xposed1")) {
查看进程名等于谁,就可以找到。hook 的包名为com.example.xposed1 -
java初始化设置属性的时候,是用构造函数来设置的。new DemoHelper("123") 给类传参数。 XposedHelpers.findConstructorExact(CLASS_SHOW_STACK_ACTION_BUTTON_EVENT, cl, boolean.class).newInstance(true));