java - 使用 JNI 授予对 Android 应用程序的 C/C++ native 端的 root 访问权限,这似乎是不可能的

标签 java android c java-native-interface root

我想让 native 代码获得 root 访问权限,即使 Java 端正确地具有 root 权限......这似乎非常具有挑战性。

示例应用:

Java端

[...]
Log.d(TAG, "JAVA ROOT? " + rootManager.runCommand("id -u").getMessage()); // has the process 
root access?
rootTest(); // this is the native C function
Log.d(TAG, "JAVA ROOT? " + rootManager.runCommand("id -u").getMessage()); // check again
[...]

C面

JNIEXPORT jlong JNICALL Java_com_example_MainActivity_testRoot(JNIEnv* env, jobject obj) {

    FILE *fp;
    char path[1035];

    fp = popen("id -u", "r");
    while (fgets(path, sizeof(path), fp) != NULL) {
        printf("C ROOT?: %s\r\n", path);
    }
    pclose(fp);
    return 0;
}

输出

JAVA ROOT? 0 // -> Yeah, root!
C ROOT?: 10114 // -> :(
JAVA ROOT? 0 // -> Java side still has root.

不知道为什么,当进程执行他的 native 代码时,它就失去了root权限。 这是出于某种安全原因吗? 如果是,可以禁用吗?

最佳答案

您无法使用rootManager.runCommand神奇地将进程或线程提升为root。您能做的最好的事情就是以 root 身份生成一个不同的进程(这就是 runCommand 所做的),并使用各种 IPC 机制与其通信。

关于java - 使用 JNI 授予对 Android 应用程序的 C/C++ native 端的 root 访问权限,这似乎是不可能的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59648755/

相关文章:

java - java中异常处理和finally阻塞的疑惑

java - 在服务器上运行时,我不断收到错误404

Android - 填充折线图下方的颜色

安卓 :download file from server unable to decode stream

java - 在文本文件中写入文本并使用保存对话框保存它

java - Android NoSuchMethodError : No virtual method invoke in MethodHandle,

c - 指向动态结构数组的指针赋值

通过引用返回的 C 风格字符串

c - 空指针的用途

java - 同一 Web 应用程序的多个服务器(需要任何先验配置吗?)