JNI 获取系统类加载器处理反制Xposed框架

22 篇文章 0 订阅
11 篇文章 0 订阅

 在网上找了很久没有找到 jni 相应的代码,基本都是java的

下面是全部代码:

/**
 * 检测xposed
 * checkXposed
 */
bool checkXposed(JNIEnv *env) {
    //找到ClassLoader类
    jclass classloaderClass = env->FindClass("java/lang/ClassLoader");
    //找到ClassLoader类中的静态方法getSystemClassLoader
    jmethodID getSysLoaderMethod = env->GetStaticMethodID(classloaderClass, "getSystemClassLoader",
                                                          "()Ljava/lang/ClassLoader;");
    //调用ClassLoader中的getSystemClassLoader方法,返回ClassLoader对象
    jobject classLoader = env->CallStaticObjectMethod(classloaderClass, getSysLoaderMethod);
    //DexClassLoader:能够加载自定义的jar/apk/dex
    //PathClassLoader:只能加载系统中已经安装过的apk
    jclass dexLoaderClass = env->FindClass("dalvik/system/DexClassLoader");
    //找到ClassLoader中的方法loadClass
    jmethodID loadClass = env->GetMethodID(dexLoaderClass, "loadClass",
                                           "(Ljava/lang/String;)Ljava/lang/Class;");
    //调用DexClassLoader的loadClass方法,加载需要调用的类
    jstring dir = env->NewStringUTF("de.robv.android.xposed.XposedBridge");
    jclass targetClass = (jclass) env->CallObjectMethod(classLoader, loadClass, dir);

    if (env->ExceptionCheck()) {  // 检查JNI调用是否有引发异常
        env->ExceptionDescribe();
        env->ExceptionClear();        // 清除引发的异常,在Java层不会打印异常的堆栈信息
       // env->ThrowNew(env->FindClass("java/lang/Exception"), "JNI抛出的异常!");
        LOGD("error! not found");
        return false;
    }

    if (targetClass != NULL) {
        jfieldID disableHooksFiled = env->GetStaticFieldID(targetClass, "disableHooks", "Z");
        env->SetStaticBooleanField(targetClass, disableHooksFiled, true);
        jfieldID runtimeFiled = env->GetStaticFieldID(targetClass, "runtime", "I");
        env->SetStaticIntField(targetClass, runtimeFiled, 2);
        return true;
    } else {
        return false;
    }
}

参考来源

https://bbs.pediy.com/thread-179829.htm

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值