我正在创建一个Android应用程序,我想知道我的应用程序是否在root设备上运行 我在Google上进行了挖掘,但是甚至无法提出一个可靠的解决方案。
之前在stackoverflow上已经提出了类似的问题,但没有任何解决方案。 这些链接中提供的解决方案无法在我的设备上运行。 甚至Runtime.exec(“su”)都不起作用。
Determining if an Android device is rooted programatically?
Determine if running on a rooted device
有没有办法找出设备是否已植根?如果我们无法做到这一点,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上提供的解决方案至少应该有效,但这也不起作用。
答案 0 :(得分:1)
没有确定的方法。您可以检查系统属性('ro.secure'等),搜索SUID su二进制文件,尝试运行它,搜索一些“超级用户”应用程序等。但是,可能有一个foobar
实际上是su的二进制文件,或者是为您提供root权限的任何其他程序。可能存在利用某些Android漏洞获取root权限的“常规”二进制文件等。如果您检查每个文件的SUID,您可能会接近。谷歌可能正在使用部分/全部的组合。