Merge branch 'master' of https://github.com/ElderDrivers/EdXposed
This commit is contained in:
commit
ac35f0a6da
|
|
@ -10,6 +10,7 @@ import com.elderdrivers.riru.xposed.proxy.yahfa.BlackWhiteListProxy;
|
||||||
import com.elderdrivers.riru.xposed.proxy.yahfa.NormalProxy;
|
import com.elderdrivers.riru.xposed.proxy.yahfa.NormalProxy;
|
||||||
import com.elderdrivers.riru.xposed.util.Utils;
|
import com.elderdrivers.riru.xposed.util.Utils;
|
||||||
|
|
||||||
|
import java.lang.reflect.Member;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
|
@ -19,7 +20,6 @@ public class Main implements KeepAll {
|
||||||
public static String appDataDir = "";
|
public static String appDataDir = "";
|
||||||
public static String niceName = "";
|
public static String niceName = "";
|
||||||
public static String appProcessName = "";
|
public static String appProcessName = "";
|
||||||
public static long closedFdTable = 0;
|
|
||||||
private static String forkAndSpecializePramsStr = "";
|
private static String forkAndSpecializePramsStr = "";
|
||||||
private static String forkSystemServerPramsStr = "";
|
private static String forkSystemServerPramsStr = "";
|
||||||
|
|
||||||
|
|
@ -105,6 +105,8 @@ public class Main implements KeepAll {
|
||||||
|
|
||||||
public static native boolean backupAndHookNative(Object target, Method hook, Method backup);
|
public static native boolean backupAndHookNative(Object target, Method hook, Method backup);
|
||||||
|
|
||||||
|
public static native void setMethodNonCompilable(Object member);
|
||||||
|
|
||||||
public static native void ensureMethodCached(Method hook, Method backup);
|
public static native void ensureMethodCached(Method hook, Method backup);
|
||||||
|
|
||||||
// JNI.ToReflectedMethod() could return either Method or Constructor
|
// JNI.ToReflectedMethod() could return either Method or Constructor
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,10 @@
|
||||||
package com.elderdrivers.riru.xposed.dexmaker;
|
package com.elderdrivers.riru.xposed.dexmaker;
|
||||||
|
|
||||||
|
import android.annotation.TargetApi;
|
||||||
|
import android.os.Build;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
|
import com.elderdrivers.riru.xposed.Main;
|
||||||
import com.elderdrivers.riru.xposed.core.HookMain;
|
import com.elderdrivers.riru.xposed.core.HookMain;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
@ -178,6 +181,7 @@ public class HookerDexMaker {
|
||||||
doMake();
|
doMake();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.O)
|
||||||
private void doMake() throws Exception {
|
private void doMake() throws Exception {
|
||||||
mDexMaker = new DexMaker();
|
mDexMaker = new DexMaker();
|
||||||
// Generate a Hooker class.
|
// Generate a Hooker class.
|
||||||
|
|
@ -208,6 +212,7 @@ public class HookerDexMaker {
|
||||||
mHookMethod = mHookClass.getMethod(METHOD_NAME_HOOK, mActualParameterTypes);
|
mHookMethod = mHookClass.getMethod(METHOD_NAME_HOOK, mActualParameterTypes);
|
||||||
mBackupMethod = mHookClass.getMethod(METHOD_NAME_BACKUP, mActualParameterTypes);
|
mBackupMethod = mHookClass.getMethod(METHOD_NAME_BACKUP, mActualParameterTypes);
|
||||||
mCallBackupMethod = mHookClass.getMethod(METHOD_NAME_CALL_BACKUP, mActualParameterTypes);
|
mCallBackupMethod = mHookClass.getMethod(METHOD_NAME_CALL_BACKUP, mActualParameterTypes);
|
||||||
|
Main.setMethodNonCompilable(mCallBackupMethod);
|
||||||
HookMain.backupAndHook(mMember, mHookMethod, mBackupMethod);
|
HookMain.backupAndHook(mMember, mHookMethod, mBackupMethod);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,19 @@ int waitForGcToComplete(JNIEnv *, jclass, jlong thread) {
|
||||||
return gcType;
|
return gcType;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setMethodNonCompilable(JNIEnv *env, jclass, jobject member) {
|
||||||
|
if (!member) {
|
||||||
|
LOGE("setNonCompilableNative: member is null");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
void *artMethod = env->FromReflectedMethod(member);
|
||||||
|
if (!artMethod) {
|
||||||
|
LOGE("setNonCompilableNative: artMethod is null");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
setNonCompilable(artMethod);
|
||||||
|
}
|
||||||
|
|
||||||
static JNINativeMethod hookMethods[] = {
|
static JNINativeMethod hookMethods[] = {
|
||||||
{
|
{
|
||||||
"init",
|
"init",
|
||||||
|
|
@ -70,6 +83,9 @@ static JNINativeMethod hookMethods[] = {
|
||||||
"(Ljava/lang/Object;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)Z",
|
"(Ljava/lang/Object;Ljava/lang/reflect/Method;Ljava/lang/reflect/Method;)Z",
|
||||||
(void *) Java_lab_galaxy_yahfa_HookMain_backupAndHookNative
|
(void *) Java_lab_galaxy_yahfa_HookMain_backupAndHookNative
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"setMethodNonCompilable", "(Ljava/lang/Object;)V", (void *) setMethodNonCompilable
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"findMethodNative",
|
"findMethodNative",
|
||||||
"(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;",
|
"(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/Object;",
|
||||||
|
|
@ -116,7 +132,6 @@ void loadDexAndInit(JNIEnv *env, const char *dexPath) {
|
||||||
if (isInited) {
|
if (isInited) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// install_inline_hooks();
|
|
||||||
jclass clzClassLoader = env->FindClass("java/lang/ClassLoader");
|
jclass clzClassLoader = env->FindClass("java/lang/ClassLoader");
|
||||||
LOGD("java/lang/ClassLoader: %p", clzClassLoader);
|
LOGD("java/lang/ClassLoader: %p", clzClassLoader);
|
||||||
jmethodID mdgetSystemClassLoader = env->GetStaticMethodID(clzClassLoader,
|
jmethodID mdgetSystemClassLoader = env->GetStaticMethodID(clzClassLoader,
|
||||||
|
|
@ -147,7 +162,7 @@ void loadDexAndInit(JNIEnv *env, const char *dexPath) {
|
||||||
jclass entry_class = findClassFromLoader(env, myClassLoader, ENTRY_CLASS_NAME);
|
jclass entry_class = findClassFromLoader(env, myClassLoader, ENTRY_CLASS_NAME);
|
||||||
if (NULL != entry_class) {
|
if (NULL != entry_class) {
|
||||||
LOGD("HookEntry Class %p", entry_class);
|
LOGD("HookEntry Class %p", entry_class);
|
||||||
env->RegisterNatives(entry_class, hookMethods, 14);
|
env->RegisterNatives(entry_class, hookMethods, 15);
|
||||||
isInited = true;
|
isInited = true;
|
||||||
LOGD("RegisterNatives succeed for HookEntry.");
|
LOGD("RegisterNatives succeed for HookEntry.");
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,10 @@ void Java_lab_galaxy_yahfa_HookMain_init(JNIEnv *env, jclass clazz, jint sdkVers
|
||||||
setupTrampoline();
|
setupTrampoline();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setNonCompilable(void *method) {
|
void setNonCompilable(void *method) {
|
||||||
|
if (SDKVersion < ANDROID_N) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
int access_flags = read32((char *) method + OFFSET_access_flags_in_ArtMethod);
|
int access_flags = read32((char *) method + OFFSET_access_flags_in_ArtMethod);
|
||||||
LOGI("setNonCompilable: access flags is 0x%x", access_flags);
|
LOGI("setNonCompilable: access flags is 0x%x", access_flags);
|
||||||
access_flags |= kAccCompileDontBother;
|
access_flags |= kAccCompileDontBother;
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,8 @@ void Java_lab_galaxy_yahfa_HookMain_ensureMethodCached(JNIEnv *env, jclass clazz
|
||||||
jobject hook,
|
jobject hook,
|
||||||
jobject backup);
|
jobject backup);
|
||||||
|
|
||||||
|
void setNonCompilable(void *method);
|
||||||
|
|
||||||
static void* getResolvedMethodsAddr(JNIEnv*, jobject);
|
static void* getResolvedMethodsAddr(JNIEnv*, jobject);
|
||||||
|
|
||||||
#endif // HOOK_MAIN_H
|
#endif // HOOK_MAIN_H
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
dalvik.vm.dex2oat-flags=--inline-max-code-units=0 --compiler-filter=quicken
|
dalvik.vm.dex2oat-filter=quicken
|
||||||
|
dalvik.vm.dex2oat-flags=--inline-max-code-units=0
|
||||||
#dalvik.vm.image-dex2oat-flags=--inline-max-code-units=0 --compiler-filter=speed
|
#dalvik.vm.image-dex2oat-flags=--inline-max-code-units=0 --compiler-filter=speed
|
||||||
Loading…
Reference in New Issue