Add a native method to remove final flag of class
This commit is contained in:
parent
20c83e4db7
commit
ee4d48c1b4
|
|
@ -73,6 +73,19 @@ void setMethodNonCompilable(JNIEnv *env, jclass, jobject member) {
|
|||
setNonCompilable(artMethod);
|
||||
}
|
||||
|
||||
static constexpr uint32_t kAccFinal = 0x0010;
|
||||
|
||||
jboolean removeFinalFlag(JNIEnv *env, jclass, jclass clazz) {
|
||||
if (clazz) {
|
||||
jfieldID java_lang_Class_accessFlags = env->GetFieldID(
|
||||
env->FindClass("java/lang/Class"), "accessFlags", "I");
|
||||
jint access_flags = env->GetIntField(clazz, java_lang_Class_accessFlags);
|
||||
env->SetIntField(clazz, java_lang_Class_accessFlags, access_flags & ~kAccFinal);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
static JNINativeMethod hookMethods[] = {
|
||||
{
|
||||
"init",
|
||||
|
|
@ -129,6 +142,9 @@ static JNINativeMethod hookMethods[] = {
|
|||
},
|
||||
{
|
||||
"initXResourcesNative", "()Z", (void *) XposedBridge_initXResourcesNative
|
||||
},
|
||||
{
|
||||
"removeFinalFlagNative", "(Ljava/lang/Class;)Z", (void *) removeFinalFlag
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -149,4 +149,6 @@ public class Main implements KeepAll {
|
|||
public static native int waitForGcToComplete(long thread);
|
||||
|
||||
public static native boolean initXResourcesNative();
|
||||
|
||||
public static native boolean removeFinalFlagNative(Class clazz);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,4 +63,9 @@ public class SandHookProvider extends BaseHookProvider {
|
|||
public boolean initXResourcesNative() {
|
||||
return Main.initXResourcesNative();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeFinalFlagNative(Class clazz) {
|
||||
return Main.removeFinalFlagNative(clazz);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -140,4 +140,6 @@ public class Main implements KeepAll {
|
|||
public static native int waitForGcToComplete(long thread);
|
||||
|
||||
public static native boolean initXResourcesNative();
|
||||
|
||||
public static native boolean removeFinalFlagNative(Class clazz);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -59,4 +59,9 @@ public class WhaleHookProvider extends BaseHookProvider {
|
|||
public boolean initXResourcesNative() {
|
||||
return Main.initXResourcesNative();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeFinalFlagNative(Class clazz) {
|
||||
return Main.removeFinalFlagNative(clazz);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -143,4 +143,5 @@ public class Main implements KeepAll {
|
|||
|
||||
public static native boolean initXResourcesNative();
|
||||
|
||||
public static native boolean removeFinalFlagNative(Class clazz);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,4 +40,9 @@ public class YahfaHookProvider extends BaseHookProvider {
|
|||
public boolean initXResourcesNative() {
|
||||
return Main.initXResourcesNative();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeFinalFlagNative(Class clazz) {
|
||||
return Main.removeFinalFlagNative(clazz);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,4 +23,6 @@ public interface HookProvider {
|
|||
void deoptMethodNative(Object method);
|
||||
|
||||
boolean initXResourcesNative();
|
||||
|
||||
boolean removeFinalFlagNative(Class clazz);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue