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);
|
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[] = {
|
static JNINativeMethod hookMethods[] = {
|
||||||
{
|
{
|
||||||
"init",
|
"init",
|
||||||
|
|
@ -129,6 +142,9 @@ static JNINativeMethod hookMethods[] = {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"initXResourcesNative", "()Z", (void *) XposedBridge_initXResourcesNative
|
"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 int waitForGcToComplete(long thread);
|
||||||
|
|
||||||
public static native boolean initXResourcesNative();
|
public static native boolean initXResourcesNative();
|
||||||
|
|
||||||
|
public static native boolean removeFinalFlagNative(Class clazz);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -63,4 +63,9 @@ public class SandHookProvider extends BaseHookProvider {
|
||||||
public boolean initXResourcesNative() {
|
public boolean initXResourcesNative() {
|
||||||
return Main.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 int waitForGcToComplete(long thread);
|
||||||
|
|
||||||
public static native boolean initXResourcesNative();
|
public static native boolean initXResourcesNative();
|
||||||
|
|
||||||
|
public static native boolean removeFinalFlagNative(Class clazz);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -59,4 +59,9 @@ public class WhaleHookProvider extends BaseHookProvider {
|
||||||
public boolean initXResourcesNative() {
|
public boolean initXResourcesNative() {
|
||||||
return Main.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 initXResourcesNative();
|
||||||
|
|
||||||
|
public static native boolean removeFinalFlagNative(Class clazz);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -40,4 +40,9 @@ public class YahfaHookProvider extends BaseHookProvider {
|
||||||
public boolean initXResourcesNative() {
|
public boolean initXResourcesNative() {
|
||||||
return Main.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);
|
void deoptMethodNative(Object method);
|
||||||
|
|
||||||
boolean initXResourcesNative();
|
boolean initXResourcesNative();
|
||||||
|
|
||||||
|
boolean removeFinalFlagNative(Class clazz);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue