Xposed Android hook-方法紹介


他のアプリケーションのプロセスに進む
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 LogLog            , 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     2param.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);
}

未完待续..テキストリンク(テキストをクリックして入力)