# Xposed


方法名复制为 xposed 的片段

# 1.Hook 普通方法
修改返回值
XposedHelpers.findAndHookMethod("com.zj.wuaipojie.Demo", loadPackageParam.classLoader, "a", String.class, new XC_MethodHook() { | |
@Override | |
protected void afterHookedMethod(MethodHookParam param) throws Throwable { | |
super.afterHookedMethod(param); | |
param.setResult(999); | |
} | |
}); |
修改参数
XposedHelpers.findAndHookMethod("com.zj.wuaipojie.Demo", loadPackageParam.classLoader, "a", String.class, new XC_MethodHook() { | |
@Override | |
protected void beforeHookedMethod(MethodHookParam param) throws Throwable { | |
super.beforeHookedMethod(param); | |
String a = "pt"; | |
param.args[0] = a; } | |
}); |

# 2.Hook 复杂 & 自定义参数
Class a = loadPackageParam.classLoader.loadClass("类名"); | |
XposedBridge.hookAllMethods(a, "方法名", new XC_MethodHook() { | |
@Override | |
protected void beforeHookedMethod(MethodHookParam param) throws Throwable { | |
super.beforeHookedMethod(param); | |
} | |
});// 可以免填参数 |
# 3.Hook 替换函数
Class a = classLoader.loadClass("类名") | |
XposedBridge.hookAllMethods(a,"方法名",new XC_MethodReplacement() { | |
@Override | |
protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable { | |
return ""; | |
} | |
}); |
# 4.Hook 加固通杀
复制代码 隐藏代码XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() { | |
@Override | |
protected void afterHookedMethod(MethodHookParam param) throws Throwable { | |
Context context = (Context) param.args[0]; | |
ClassLoader classLoader = context.getClassLoader(); | |
//hook 逻辑在这里面写 | |
} | |
}); |
hook 加固应用第一步拿到 classloader
总的 Hook.java
package com.sky.xposeddemo; | |
import android.app.Application; | |
import android.content.Context; | |
import android.util.Log; | |
import de.robv.android.xposed.IXposedHookLoadPackage; | |
import de.robv.android.xposed.XC_MethodHook; | |
import de.robv.android.xposed.XC_MethodReplacement; | |
import de.robv.android.xposed.XposedBridge; | |
import de.robv.android.xposed.XposedHelpers; | |
import de.robv.android.xposed.callbacks.XC_LoadPackage; | |
public class Hook implements IXposedHookLoadPackage { | |
@Override | |
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable { | |
if(!loadPackageParam.packageName.equals("com.zj.wuaipojie")){ | |
return; | |
} | |
/*XposedHelpers.findAndHookMethod ("com.zj.wuaipojie.Demo", loadPackageParam.classLoader, "a", String.class, new XC_MethodHook () {// 要根据实际传入参数的类型 | |
@Override | |
protected void beforeHookedMethod (MethodHookParam param) throws Throwable { | |
super.beforeHookedMethod (param); | |
Log.d ("zj2595",param.args [0].toString ()); | |
XposedBridge.log (param.args [0].toString ()); | |
String a = "pt 嘿嘿嘿参数修改成功"; | |
param.args [0] = a; | |
Log.d ("zj2595",param.args [0].toString ()); | |
} | |
@Override | |
protected void afterHookedMethod (MethodHookParam param) throws Throwable { | |
super.afterHookedMethod (param); | |
Log.d ("zj2595",param.getResult ().toString ()); | |
param.setResult ("返回值修改成功哇哈哈"); | |
} | |
});*/ | |
/* Class a = loadPackageParam.classLoader.loadClass("com.zj.wuaipojie.Demo"); | |
XposedBridge.hookAllMethods(a, "complexParameterFunc", new XC_MethodHook() { | |
@Override | |
protected void beforeHookedMethod(MethodHookParam param) throws Throwable { | |
super.beforeHookedMethod(param); | |
Log.d("zj2595",param.args[0].toString()); | |
} | |
});*/ | |
/*Class a = loadPackageParam.classLoader.loadClass ("com.zj.wuaipojie.Demo"); | |
XposedBridge.hookAllMethods (a,"repleaceFunc",new XC_MethodReplacement () { | |
@Override | |
protected Object replaceHookedMethod (MethodHookParam methodHookParam) throws Throwable { | |
return "";// 可用于去弹窗 | |
} | |
});*/ | |
XposedHelpers.findAndHookMethod(Application.class, "attach", Context.class, new XC_MethodHook() { | |
@Override | |
protected void afterHookedMethod(MethodHookParam param) throws Throwable {// 回调函数 | |
Context context = (Context) param.args[0]; | |
ClassLoader classLoader = context.getClassLoader(); | |
XposedHelpers.findAndHookMethod("com.zj.wuaipojie.Demo", loadPackageParam.classLoader, "a", String.class, new XC_MethodHook() {// 要根据实际传入参数的类型 | |
@Override | |
protected void beforeHookedMethod(MethodHookParam param) throws Throwable { | |
super.beforeHookedMethod(param); | |
Log.d("zj2595",param.args[0].toString()); | |
XposedBridge.log(param.args[0].toString()); | |
String a = "pt嘿嘿嘿参数修改成功"; | |
param.args[0] = a; | |
Log.d("zj2595",param.args[0].toString()); | |
} | |
@Override | |
protected void afterHookedMethod(MethodHookParam param) throws Throwable { | |
super.afterHookedMethod(param); | |
Log.d("zj2595",param.getResult().toString()); | |
param.setResult("返回值修改成功哇哈哈"); | |
} | |
}); | |
//hook 逻辑在这里面写 | |
} | |
}); | |
} | |
} |