Xposed Android hook-方法紹介
他のアプリケーションのプロセスに進む
IXposedHookLoadPackageクラスを継承するクラスを作成し、handleLoadPackageメソッドを上書きします.xposedのこのメソッドは、どのアプリケーションが起動しても呼び出されるので、どのアプリケーションのプロセスにもアクセスできますが、一般的には特定のアプリケーションにのみ適用されます.たとえば、qqのプロセスに入る限り:
ある方法をブロックする
1.comをブロックする.tencent.mobileqq.app.message.QQQMessageFacadeクラスのaメソッド.このメソッドには2つのパラメータがあり、タイプはそれぞれArrayList、booleanである.一般的にブロックに使用されるコールバックオブジェクトはXC_です.MethodHook.
2.元のメソッドを実行できない場合は、メソッドの実行ロジックを直接置き換えることができます.コールバック時にXC_を使用します.MethodReplacementオブジェクトを処理すればよい.
インストールされているすべてのアプリケーションを取得
コンテキストを取得
未完待续..テキストリンク(テキストをクリックして入力)
IXposedHookLoadPackageクラスを継承するクラスを作成し、handleLoadPackageメソッドを上書きします.xposedのこのメソッドは、どのアプリケーションが起動しても呼び出されるので、どのアプリケーションのプロセスにもアクセスできますが、一般的には特定のアプリケーションにのみ適用されます.たとえば、qqのプロセスに入る限り:
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XposedBridge;
public class XposedInit implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable {
if (!loadPackageParam.packageName.contains("com.tencent.mobileqq")) // :
return;
XposedBridge.log("Loaded app: " + loadPackageParam.packageName);
}
}
ps: XposedBridge.log Log ,Log , XposedBridge.log xposed , xposed log 。
ある方法をブロックする
1.comをブロックする.tencent.mobileqq.app.message.QQQMessageFacadeクラスのaメソッド.このメソッドには2つのパラメータがあり、タイプはそれぞれArrayList、booleanである.一般的にブロックに使用されるコールバックオブジェクトはXC_です.MethodHook.
findAndHookMethod("com.tencent.mobileqq.app.message.QQMessageFacade", loadPackageParam.classLoader, "a", ArrayList.class, boolean.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
try {
//
} catch (Throwable t) {
XposedBridge.log(t);
}
}
});
ps: (beforeHookedMethod) (afterHookedMethod), , , 。
2.元のメソッドを実行できない場合は、メソッドの実行ロジックを直接置き換えることができます.コールバック時にXC_を使用します.MethodReplacementオブジェクトを処理すればよい.
findAndHookMethod("com.tencent.mobileqq.app.message.QQMessageFacade", loadPackageParam.classLoader, "a", ArrayList.class, boolean.class, new XC_MethodReplacement() {
@Override
protected Object replaceHookedMethod(MethodHookParam methodHookParam) throws Throwable {
try {
//
} catch (Throwable t) {
XposedBridge.log(t);
}
}
});
ps:
MethodHookParam param 2 :
param.args[0]: , Object
param.getResult(): , Object
インストールされているすべてのアプリケーションを取得
findAndHookMethod("android.app.ApplicationPackageManager", loadPackageParam.classLoader, "getInstalledApplications", int.class, new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
@SuppressWarnings("unchecked")
List applicationInfoList = (List) param.getResult();
}
});
コンテキストを取得
try {
Class> ContextClass = findClass("android.content.ContextWrapper", loadPackageParam.classLoader);
findAndHookMethod(ContextClass, "getApplicationContext", new XC_MethodHook() {
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
super.afterHookedMethod(param);
if (applicationContext != null)
return;
applicationContext = (Context) param.getResult();
XposedBridge.log("CSDN_LQR--> ");
}
});
} catch (Throwable t) {
XposedBridge.log("CSDN_LQR--> ");
XposedBridge.log(t);
}
未完待续..テキストリンク(テキストをクリックして入力)