From aba57dc40f3c911a7fd482e70460193d520e4ff6 Mon Sep 17 00:00:00 2001 From: solohsu Date: Tue, 30 Apr 2019 00:24:44 +0800 Subject: [PATCH] Add resources hooking support for MIUI --- .../riru/edxp/deopt/InlinedMethodCallers.java | 17 ++++++++++++++++- .../edxp/deopt/PrebuiltMethodsDeopter.java | 6 +++++- .../jni/main/native_hook/native_hook.cpp | 7 +++++++ hiddenapi-stubs/libs/framework-stub.jar | Bin 15372 -> 15372 bytes 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/deopt/InlinedMethodCallers.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/deopt/InlinedMethodCallers.java index 1f0862dd..f2a47671 100644 --- a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/deopt/InlinedMethodCallers.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/deopt/InlinedMethodCallers.java @@ -26,7 +26,22 @@ public class InlinedMethodCallers { */ private static final String[][] BOOT_IMAGE = { // callers of Application#attach(Context) - {"android.app.Instrumentation", "newApplication", "(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Context;)Landroid/app/Application;"} + {"android.app.Instrumentation", "newApplication", "(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Context;)Landroid/app/Application;"}, + + // for MIUI resources hooking + {"android.content.res.MiuiResources", "init", "(Ljava/lang/String;)V"}, + {"android.content.res.MiuiResources", "updateMiuiImpl", "()V"}, + {"android.content.res.MiuiResources", "setImpl", "(Landroid/content/res/ResourcesImpl;)V"}, + {"android.content.res.MiuiResources", "loadOverlayValue", "(Landroid/util/TypedValue;I)V"}, + {"android.content.res.MiuiResources", "getThemeString", "(I)Ljava/lang/CharSequence;"}, + {"android.content.res.MiuiResources", "", "(Ljava/lang/ClassLoader;)V"}, + {"android.content.res.MiuiResources", "", "()V"}, + {"android.content.res.MiuiResources", "", "(Landroid/content/res/AssetManager;Landroid/util/DisplayMetrics;Landroid/content/res/Configuration;)V"}, + {"android.miui.ResourcesManager", "initMiuiResource", "(Landroid/content/res/Resources;Ljava/lang/String;)V"}, + {"android.app.LoadedApk", "getResources", "()Landroid/content/res/Resources;"}, + {"android.content.res.Resources", "getSystem", "()Landroid/content/res/Resources;"}, + {"android.app.ApplicationPackageManager", "getResourcesForApplication", "(Landroid/content/pm/ApplicationInfo;)Landroid/content/res/Resources;"}, + {"android.app.ContextImpl", "setResources", "(Landroid/content/res/Resources;)V"}, }; private static final String[][] SYSTEM_SERVER = {}; diff --git a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/deopt/PrebuiltMethodsDeopter.java b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/deopt/PrebuiltMethodsDeopter.java index a90b1908..4fe9a165 100644 --- a/edxp-common/src/main/java/com/elderdrivers/riru/edxp/deopt/PrebuiltMethodsDeopter.java +++ b/edxp-common/src/main/java/com/elderdrivers/riru/edxp/deopt/PrebuiltMethodsDeopter.java @@ -19,8 +19,12 @@ public class PrebuiltMethodsDeopter { } for (String[] caller : callers) { try { + Class clazz = XposedHelpers.findClassIfExists(caller[0], cl); + if (clazz == null) { + continue; + } Object method = EdXpConfigGlobal.getHookProvider().findMethodNative( - XposedHelpers.findClass(caller[0], cl), caller[1], caller[2]); + clazz, caller[1], caller[2]); if (method != null) { EdXpConfigGlobal.getHookProvider().deoptMethodNative(method); } diff --git a/edxp-core/jni/main/native_hook/native_hook.cpp b/edxp-core/jni/main/native_hook/native_hook.cpp index 1cfc3e6b..5e302138 100644 --- a/edxp-core/jni/main/native_hook/native_hook.cpp +++ b/edxp-core/jni/main/native_hook/native_hook.cpp @@ -59,6 +59,13 @@ static bool onIsInSamePackageCalled(void *thiz, void *that) { || strstr(thatDesc, "com/elderdrivers/riru/") != nullptr) { return true; } + // for MIUI resources hooking + if (strstr(thisDesc, "android/content/res/MiuiTypedArray") != nullptr + || strstr(thatDesc, "android/content/res/MiuiTypedArray") != nullptr + || strstr(thisDesc, "android/content/res/XResources$XTypedArray") != nullptr + || strstr(thatDesc, "android/content/res/XResources$XTypedArray") != nullptr) { + return true; + } return (*isInSamePackageBackup)(thiz, that); } diff --git a/hiddenapi-stubs/libs/framework-stub.jar b/hiddenapi-stubs/libs/framework-stub.jar index c0fba72ef7f318b649a15a2f8f76e2d687c246c2..a4791d8e28254051cf0994b3fd43280d434d876f 100644 GIT binary patch delta 29 lcmeCF=&9fd@MdP=VqoClV7R?&BhLzbrrWzVZ_^Ls0RVzj35x&# delta 21 dcmeCF=&6|eUs-CS)GYnUx&{K9kLY{w003u|2xb5P