huolong blog

Root检测

执行su指令查看结果

安装Magisk后在/system/bin目录下会多一个可执行文件magisk和两个指向它的符号链接su和setprop,因此我们可以通过执行su指令来判断Magisk是否安装,或者通过执行which命令查看是否存在su路径,进而确定设备是否root,检测代码如下:

FILE *fp = nullptr;
char cmd[65536];
sprintf(cmd, "su 2>&1"); // 或者使用which su来确定
if ((fp = popen(cmd, "r")) != nullptr)
{
    fread(cmd, 1, sizeof(cmd), fp);
    pclose(fp);
}
alog(4,"native", "result: %s", cmd);
if(strstr(cmd,"inaccessible or not found") != nullptr) // 相应改成是否有输出进行判断
    return env->NewStringUTF("not rooted");
return env->NewStringUTF("rooted");

使用mount命令查看命名空间

magisk会使用.magisk命名空间挂载许多文件,故使用mount命令即可查看手机是否被root,检测代码如下:

FILE *fp = nullptr;
char cmd[65536];
sprintf(cmd, "mount 2>&1");
if ((fp = popen(cmd, "r")) != nullptr)
{
    fread(cmd, 1, sizeof(cmd), fp);
    pclose(fp);
}
alog(4,"native", "result: %s", cmd);
if(strstr(cmd,"magisk") == nullptr) \\运行结果不含magisk则未root
    return env->NewStringUTF("not rooted");
return env->NewStringUTF("rooted");