Example #1
0
bool xposedOnVmCreated(JNIEnv* env, const char* className) {
    if (!keepLoadingXposed)
        return false;
        
    startClassName = className;

    xposedInitMemberOffsets();

    // disable some access checks
    patchReturnTrue((void*) &dvmCheckClassAccess);
    patchReturnTrue((void*) &dvmCheckFieldAccess);
    patchReturnTrue((void*) &dvmInSamePackage);
    if (access(XPOSED_DIR "do_not_hook_dvmCheckMethodAccess", F_OK) != 0)
        patchReturnTrue((void*) &dvmCheckMethodAccess);

    xposedClass = env->FindClass(XPOSED_CLASS);
    xposedClass = reinterpret_cast<jclass>(env->NewGlobalRef(xposedClass));
    
    if (xposedClass == NULL) {
        ALOGE("Error while loading Xposed class '%s':\n", XPOSED_CLASS);
        dvmLogExceptionStackTrace();
        env->ExceptionClear();
        return false;
    }
    
    ALOGI("Found Xposed class '%s', now initializing\n", XPOSED_CLASS);
    register_de_robv_android_xposed_XposedBridge(env);
    register_android_content_res_XResources(env);
    return true;
}
Example #2
0
bool xposedOnVmCreated(JNIEnv* env, const char* className) {
    startClassName = className;

    keepLoadingXposed = keepLoadingXposed && xposedInitMemberOffsets(env);
    if (!keepLoadingXposed)
        return false;

    jclass miuiResourcesClass = env->FindClass(MIUI_RESOURCES_CLASS);
    if (miuiResourcesClass != NULL) {
        ClassObject* clazz = (ClassObject*)dvmDecodeIndirectRef(dvmThreadSelf(), miuiResourcesClass);
        if (dvmIsFinalClass(clazz)) {
            ALOGD("Removing final flag for class '%s'", MIUI_RESOURCES_CLASS);
            clazz->accessFlags &= ~ACC_FINAL;
        }
    }
    env->ExceptionClear();

    jclass xTypedArrayClass = env->FindClass(XTYPEDARRAY_CLASS);
    if (xTypedArrayClass == NULL) {
        ALOGE("Error while loading XTypedArray class '%s':\n", XTYPEDARRAY_CLASS);
        dvmLogExceptionStackTrace();
        env->ExceptionClear();
        return false;
    }
    xposedPrepareSubclassReplacement(xTypedArrayClass);

    xposedClass = env->FindClass(XPOSED_CLASS);
    xposedClass = reinterpret_cast<jclass>(env->NewGlobalRef(xposedClass));
    
    if (xposedClass == NULL) {
        ALOGE("Error while loading Xposed class '%s':\n", XPOSED_CLASS);
        dvmLogExceptionStackTrace();
        env->ExceptionClear();
        return false;
    }
    
    ALOGI("Found Xposed class '%s', now initializing\n", XPOSED_CLASS);
    if (register_de_robv_android_xposed_XposedBridge(env) != JNI_OK) {
        ALOGE("Could not register natives for '%s'\n", XPOSED_CLASS);
        env->ExceptionClear();
        return false;
    }
    return true;
}
Example #3
0
bool xposedOnVmCreated(JNIEnv* env, const char* className) {
	startClassName = className;

	keepLoadingXposed = keepLoadingXposed && xposedInitMemberOffsets(env);
	if (!keepLoadingXposed)
		return false;

	// disable some access checks
	patchReturnTrue((uintptr_t) & dvmCheckClassAccess);
	patchReturnTrue((uintptr_t) & dvmCheckFieldAccess);
	patchReturnTrue((uintptr_t) & dvmInSamePackage);
	if (access(XPOSED_DIR "conf/do_not_hook_dvmCheckMethodAccess", F_OK) != 0)
		patchReturnTrue((uintptr_t) & dvmCheckMethodAccess);

	jclass miuiResourcesClass = env->FindClass(MIUI_RESOURCES_CLASS);
	if (miuiResourcesClass != NULL) {
		ClassObject* clazz = (ClassObject*) dvmDecodeIndirectRef(
				dvmThreadSelf(), miuiResourcesClass);
		if (dvmIsFinalClass(clazz)) {
			ALOGD("Removing final flag for class '%s'", MIUI_RESOURCES_CLASS);
			clazz->accessFlags &= ~ACC_FINAL;
		}
	}
	env->ExceptionClear();

	xposedClass = env->FindClass(XPOSED_CLASS);
	xposedClass = reinterpret_cast<jclass>(env->NewGlobalRef(xposedClass));

	if (xposedClass == NULL) {
		ALOGE("Error while loading Xposed class '%s':\n", XPOSED_CLASS);
		dvmLogExceptionStackTrace();
		env->ExceptionClear();
		return false;
	}

	ALOGI("Found Xposed class '%s', now initializing\n", XPOSED_CLASS);
	if (register_de_robv_android_xposed_XposedBridge(env) != JNI_OK) {
		ALOGE("Could not register natives for '%s'\n", XPOSED_CLASS);
		return false;
	}

	return true;
}