我的Android应用是否在root设备上运行?

时间:2012-10-15 10:32:17

标签: android

  

可能重复:
  Determine if running on a rooted device

我正在创建一个Android应用程序,我想知道我的应用程序是否在root设备上运行 我在Google上进行了挖掘,但是甚至无法提出一个可靠的解决方案。

之前在stackoverflow上已经提出了类似的问题,但没有任何解决方案。 这些链接中提供的解决方案无法在我的设备上运行。 甚至Runtime.exec(“su”)都不起作用。

Determining if an Android device is rooted programatically?

Determine if running on a rooted device

Testing if a phone is rooted

有没有办法找出设备是否已植根?如果我们无法做到这一点,Google如何找到设备是否已植根?

当我执行Runtime.exec(“su”)时,我得到异常10-15 18:36:36.445:W / System.err(668):java.io.IOException:运行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 root。 鉴于它是shell root的,那么Determine if running on a rooted device上提供的解决方案至少应该有效,但这也不起作用。

1 个答案:

答案 0 :(得分:1)

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