Record hooked method for SandHook

garbage cleaning
This commit is contained in:
kotori0 2020-12-10 20:35:41 +08:00 committed by 双草酸酯
parent 2c3eee62c0
commit 2404d0bc50
6 changed files with 3 additions and 39 deletions

View File

@ -2,8 +2,6 @@ package com.elderdrivers.riru.edxp._hooker.yahfa;
import com.elderdrivers.riru.common.KeepMembers;
import com.elderdrivers.riru.edxp._hooker.impl.HandleBindApp;
import com.elderdrivers.riru.edxp.core.Yahfa;
import com.elderdrivers.riru.edxp.util.Hookers;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.annotation.ApiSensitive;

View File

@ -1,12 +1,10 @@
package com.elderdrivers.riru.edxp.config;
import com.elderdrivers.riru.edxp.core.Yahfa;
import com.elderdrivers.riru.edxp.core.yahfa.HookMain;
import com.elderdrivers.riru.edxp.deopt.PrebuiltMethodsDeopter;
import com.elderdrivers.riru.edxp.hook.HookProvider;
import java.lang.reflect.Member;
import java.lang.reflect.Method;
public abstract class BaseHookProvider implements HookProvider {

View File

@ -1,8 +1,5 @@
package com.elderdrivers.riru.edxp.core.yahfa;
import android.os.Build;
import com.elderdrivers.riru.edxp.art.ClassLinker;
import com.elderdrivers.riru.edxp.art.Heap;
import com.elderdrivers.riru.edxp.core.Yahfa;
import com.elderdrivers.riru.edxp.util.ClassUtils;
@ -15,12 +12,8 @@ import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArrayList;
import de.robv.android.xposed.PendingHooks;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
public class HookMain {

View File

@ -27,8 +27,6 @@ bool setNativeFlag(void *method, bool isNative);
void *getArtMethod(JNIEnv *env, jobject jmethod);
static void *getResolvedMethodsAddr(JNIEnv *, jobject);
// TODO: move to common utils instead of in YAHFA's code
void *getEntryPoint(void* method);

View File

@ -16,7 +16,6 @@ static int OFFSET_access_flags_in_ArtMethod;
static uint32_t kAccNative = 0x0100;
static uint32_t kAccCompileDontBother = 0x01000000;
static uint32_t kAccFastInterpreterToInterpreterInvoke = 0x40000000;
static uint32_t kAccPreCompiled = 0x00200000;
static jfieldID fieldArtMethod = NULL;
@ -287,28 +286,3 @@ jboolean Java_lab_galaxy_yahfa_HookMain_backupAndHookNative(JNIEnv *env, jclass
return JNI_FALSE;
}
}
static void *getResolvedMethodsAddr(JNIEnv *env, jobject hook) {
// get backup class
jclass methodClass = (*env)->FindClass(env, "java/lang/reflect/Method");
jmethodID getClassMid = (*env)->GetMethodID(env, methodClass, "getDeclaringClass",
"()Ljava/lang/Class;");
jclass backupClass = (*env)->CallObjectMethod(env, hook, getClassMid);
// get dexCache of backup class
jclass classClass = (*env)->FindClass(env, "java/lang/Class");
jfieldID dexCacheFid = (*env)->GetFieldID(env, classClass, "dexCache", "Ljava/lang/Object;");
jobject dexCacheObj = (*env)->GetObjectField(env, backupClass, dexCacheFid);
// get resolvedMethods address
jclass dexCacheClass = (*env)->GetObjectClass(env, dexCacheObj);
if (SDKVersion >= __ANDROID_API_N__) {
jfieldID resolvedMethodsFid = (*env)->GetFieldID(env, dexCacheClass, "resolvedMethods",
"J");
return (void *) (*env)->GetLongField(env, dexCacheObj, resolvedMethodsFid);
} else if (SDKVersion >= __ANDROID_API_L__) {
LOGE("this should has been done in java world: %d", SDKVersion);
return 0;
} else {
LOGE("not compatible with SDK %d", SDKVersion);
return 0;
}
}

View File

@ -6,6 +6,7 @@ import android.os.Trace;
import android.util.Log;
import com.elderdrivers.riru.edxp.config.ConfigManager;
import com.elderdrivers.riru.edxp.core.Yahfa;
import com.elderdrivers.riru.edxp.util.ClassLoaderUtils;
import com.elderdrivers.riru.edxp.util.FileUtils;
import com.swift.sandhook.SandHook;
@ -57,6 +58,8 @@ public final class SandHookXposedBridge {
return;
}
Yahfa.recordHooked(hookMethod); // in case static method got reset.
try {
if (dexPathInited.compareAndSet(false, true)) {
try {