1

可能重复:
确定是否在有根设备上运行

我正在创建一个 Android 应用程序,我想知道我的应用程序是否在有根设备上运行。
我在谷歌上进行了挖掘,但连一个可靠的解决方案都想不出来。

之前在 stackoverflow 上也有人问过类似的问题,但没有任何解决方案。这些链接中提供的解决方案不适用于我的设备。甚至 Runtime.exec("su") 也不起作用。

确定 Android 设备是否以编程方式植根?

确定是否在有根设备上运行

测试手机是否已root

有没有办法查出设备是否已root?如果我们做不到,谷歌如何找到设备是否已root?

当我执行 Runtime.exec("su") 时,出现异常 10-15 18:36:36.445: W/System.err(668): java.io.IOException: Error running exec()。命令:[su] 工作目录:null 环境:null

public static boolean isDeviceRooted_BySu() {
    try {
        Log.d("BySu", "BySu");
        Process p = Runtime.getRuntime().exec("su");
        return true;
    } catch (IOException e) {
        e.printStackTrace();
    }
    return false;
}

我从 ADB shell 中检查过,它给了我一个“#”提示,所以我可以确定该设备至少是 Shell 根的。鉴于它是 shell 根的,那么确定是否在根设备上运行提供的解决方案至少应该可以工作,但这也不起作用。

4

1 回答 1

1

没有确定的方法。您可以检查系统属性(“ro.secure”等),搜索 SUID su 二进制文件,尝试运行它,搜索许多“超级用户”应用程序等。但是,可能有一个foobar实际上是 su 的二进制文件,或任何其他为您提供 root 权限的程序。可能有一个“常规”二进制文件利用某些 Android 漏洞获取 root 权限等。如果您检查每个文件的 SUID,您可能会接近。谷歌可能正在使用部分/所有这些的组合。

于 2012-10-15T11:53:31.830 回答