Android Hook - Xposed
- Xposed框架的基本概述
- API Reference
Xposed 框架的基本运行环境如下:
1、因为 Xposed 工作原理是在 /system/bin 目录下替换文件,在 install 的时候需要 root 权限,但是运行时不需要 root 权限。
2、需要在 Android 4.0 以上版本的机器中
API Reference 基本Api:
关键类 : IXposedHookLoadPackage
public class HookDeom implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
//loadPackageParam 包含了加载的应用程序的一些基本信息。
关键类 : XposedHelpers
import static de.robv.android.xposed.XposedHelpers.findAndHookMethod;
// 例如获取Android 的FindViewById方法
findAndHookMethod("android.view.View", loadPackageParam.classLoader, "findViewById", int.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
//TODO : 这是方法执行后需要 Hook的位置
}
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
//TODO : 这是方法执行前需要 Hook的位置
}
});
}
findAndHookMethod(Class<?> clazz, // 需要 Hook 的类名
ClassLoader, // 类加载器,可以设置为 null
String methodName, // 需要 Hook 的方法名
Object... parameterTypesAndCallback);
/**
*
*该函数的最后一个参数集,包含了:
*
*(1)Hook 的目标方法的参数 , 譬如:
*
* "com.android.internal.policy.impl.PhoneWindow.DecorView"
* 是方法的参数的类。
*
*( 2 )回调方法:
* b.XC_MethodReplacement
*/
辅助项 API
XposedBridge类:
XposedBridge.log("message or trouble");
//该方法可以将 log 信息以及 Throwable 抛出的异常信息输出到标准的 //logcat 以及 /data/xposed/debug.log这个文件中
hookAllMethods / hookAllConstructors
XposedBridge.hookAllMethods 和XposedBridge.hookAllConstructors
//该方法可以用来hook 某个类中的所有方法或者构造函数,但是不同的 Rom (非 //Android 原生 Rom )会有不同的变种。
该方法可以用来hook 某个类中的所有方法或者构造函数,但是不同的 Rom (非 Android 原生 Rom )会有不同的变种。
XposedHelpers 类
这个类用的也是比较多,可以使用
Window => Preferences => Java => Editor => Content Assist => Favorites => New Type, enter de.robv.android.xposed.XposedHelpers
这种方式将XposedHelpers 这个类加入到 Eclipse 静态调用中方便查阅。
XposedHelpers.findMethod
XposedHelpers.findConstructor /*这是一组用于检索方法的方法。*/
XposedHelpers.findField
XposedHelpers.callMethod
XposedHelpers.callStaticMethod /* 这是一组用于调用方法的方法 ,类似反射*/
XposedHelpers.newInstance