Xpoded 开发
1:修改静态变量内容.
//包名+类名
Class<?> clazz = XposedHelpers.findClass("com.popsky.demo",loadPackageParam.classLoader);
//MyInt为静态变量名,整形
XposedHelpers.setStaticIntField(clazz,"MyInt",10000);
//设置字符串
XposedHelpers.setStaticObjectField(clazz,"MyStr","Popsky");2:Hook构造函数,构造函数分了两个,一个是无参数构造函数,还有一个是有参数String构造函数
//Hook无参构造函数
XposedHelpers.findAndHookConstructor(clazz, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//HOOK前执行
Log.d("DEMO","这个是无参数构造函数Hook执行前");
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
Log.d("DEMO","这个是无参数构造函数Hook执行后");
}
});
//Hook有参构造函数(参数类型是一个String,无论参数是什么,后面加个.class即可)
XposedHelpers.findAndHookConstructor(clazz, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Log.d("DEMO",String.valueOf(param.args[0])); //打印传递进来的第0号参数
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
Log.d("DEMO","这个是有参数构造函数Hook执行后");
}
});3:HOOK普通方法
//HOOK普通方法
XposedHelpers.findAndHookMethod(clazz, "FangFaMing", String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Log.d("DEMO",String.valueOf(param.args[0])); //打印传递进来的第0号参数
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
Log.d("DEMO","Hook普通方法执行后!");
}
});4:参数带有自定义类
//参数带有自定义类(支持抽象类)
//Class aniClass = loadPackageParam.classLoader.loadClass("com.DEMO.ani"); //第一种写法
//Class aniClass = XposedHelpers.findClass("com.DEMO.ani",loadPackageParam.classLoader); //第二种写法
Class aniClass = Class.forName("com.DEMO.ani",false,loadPackageParam.classLoader); //第三种写法
//方法名为Inner
//第四种写法,aniClass处直接写上"com.DEMO.ani"
XposedHelpers.findAndHookMethod(clazz, "Inner", aniClass, String.class, new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
Log.d("DEMO","Hook自定义类参数!");
}
});5:替换方法执行
//替换方法执行
XposedHelpers.findAndHookMethod(clazz, "FangFaMing", String.class, new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {
new Throwable().printStackTrace();
XposedHelpers.callMethod(clazz.newInstance(),"Fangfa1"); //需要实例化
XposedHelpers.callStaticMethod(clazz,"FangFa2");
return null;
}
});6:获取内部类,匿名内,父类后面加上$,例如"DEMO$ZI"
7:主动调用方法。(主动调用方法时,不分私有公有,只分静态和动态)
XposedHelpers.callMethod(clazz.newInstance(),"Fangfa1"); //需要实例化 XposedHelpers.callStaticMethod(clazz,"FangFa2");
8:打印栈
StringWriter out = new StringWriter();
new Throwable().printStackTrace(new PrintWriter(out));
String description = out.toString();
目录 返回
首页
- 评论列表