代码判断是否有root权限

public class RootUtil {
    public static boolean isDeviceRooted() {
        return checkRootMethod1() || checkRootMethod2() || checkRootMethod3();
    }
 
    private static boolean checkRootMethod1() {
        String buildTags = android.os.Build.TAGS;
        return buildTags != null && buildTags.contains("test-keys");
    }
 
    private static boolean checkRootMethod2() {
        String[] paths = { "/system/app/Superuser.apk", "/sbin/su", "/system/bin/su", "/system/xbin/su", "/data/local/xbin/su", "/data/local/bin/su", "/system/sd/xbin/su",
                "/system/bin/failsafe/su", "/data/local/su", "/su/bin/su"};
        for (String path : paths) {
            if (new File(path).exists()) return true;
        }
        return false;
    }
 
    private static boolean checkRootMethod3() {
        Process process = null;
        try {
            process = Runtime.getRuntime().exec(new String[] { "/system/xbin/which", "su" });
            BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));
            if (in.readLine() != null) return true;
            return false;
        } catch (Throwable t) {
            return false;
        } finally {
            if (process != null) process.destroy();
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ProcessBuilder没有root权限,但是可以使用ProcessBuilder来启动一个具有root权限的进程。在Linux系统中,可以使用sudo命令来获取root权限,ProcessBuilder可以通过以下方式使用sudo命令来启动一个具有root权限的进程: ```java ProcessBuilder builder = new ProcessBuilder("sudo", "command"); ``` 这将使用sudo命令来运行指定的命令,并以root权限运行该命令。需要注意的是,运行sudo命令需要用户具有sudo权限,否则会提示需要输入密码或者无法获取root权限。 ### 回答2: 要判断ProcessBuilder是否具有root权限,可以通过以下步骤进行判断: 1. 首先,需要创建一个ProcessBuilder对象。这个对象用于启动一个新的进程。 2. 调用ProcessBuilder对象的command方法,并传入一个命令作为参数。例如,可以使用"whoami"命令,该命令用于获取当前用户的用户名。 3. 调用ProcessBuilder对象的start方法,启动一个新的进程,并获取该进程的输出流。 4. 使用Java的IO流读取该进程的输出流,并获取输出结果。 5. 如果输出结果是"root",则表示ProcessBuilder具有root权限;否则,表示ProcessBuilder没有root权限。 以下是一个示例代码: ``` import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class RootChecker { public static void main(String[] args) { boolean hasRootPermission = checkRootPermission(); System.out.println("ProcessBuilder has root permission: " + hasRootPermission); } public static boolean checkRootPermission() { ProcessBuilder processBuilder = new ProcessBuilder(); processBuilder.command("whoami"); try { Process process = processBuilder.start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String output = reader.readLine(); if (output.equals("root")) { return true; } } catch (IOException e) { e.printStackTrace(); } return false; } } ``` 上述代码会执行"whoami"命令,并获取该命令的输出结果。如果输出结果是"root",则返回true,表示ProcessBuilder具有root权限;否则,返回false,表示ProcessBuilder没有root权限。 ### 回答3: 要判断ProcessBuilder是否具有root权限,可以采取以下方法: 1. 使用ProcessBuilder创建一个进程并执行一个需要root权限的命令,例如尝试执行一个需要root权限的系统命令如"sudo"。如果进程能够成功执行,说明ProcessBuilder具有root权限。可以通过捕获进程输出并检查其返回值来判断执行结果。 2. 使用ProcessBuilder的environment()方法获取当前进程的环境变量,并检查是否包含具有root权限的环境变量。通常,当进程以root权限运行时,其环境变量会包含一些特定的标记,比如"USER=root"或"SUDO_USER=root"。可以通过遍历进程的环境变量,查找是否有这样的标记来判断ProcessBuilder是否具有root权限。 3. 使用ProcessBuilder的command()方法获取要执行的命令,然后检查该命令是否需要root权限。可以通过判断命令的开头是否为"sudo"或"su"来确定是否需要root权限。如果需要root权限,可以认为ProcessBuilder具有root权限。 需要注意的是,这些方法只是对ProcessBuilder是否具有root权限的一种推测。要真正确定ProcessBuilder是否具有root权限,可能需要更加深入的系统调用和权限检查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值