检测手机是否已经获取root权限

3

可能重复:
确定是否在已root的设备上运行

我想知道手机是否已经root,而不需要请求root权限。我该怎么做?

  1. 测试File.Exists(“/system/bin/su”)是否存在?不确定,由于权限问题我认为我不能这样做
  2. 测试Superuser应用程序是否已安装?嗯,我认为我需要特殊权限来使用PackageManager而且 Superuser不是唯一的su管理器(例如我知道SuperSU)
  3. 尝试运行su不是一个选项,因为它会触发su提示,这不是非root应用程序所需的

有什么想法吗?我的目的是在用户同意的情况下获取匿名统计数据,以了解有多少设备已经root :)


如果我不需要特殊的权限选项,方案2可能是可行的,因为有许多su管理器可以在代码中简单地枚举。 - usr-local-ΕΨΗΕΛΩΝ
http://stackoverflow.com/questions/4805556/how-to-detect-rooted-phone - Austin
2个回答

0

选项1。可以实现,不需要任何特殊权限。

选项2。已获取Root权限的手机可能没有任何超级用户管理应用程序。

选项3。正如您所说,这不是一种好的检测方法。

此外,还有另一个选项,即检查ro.build.tag(使用getprop | grep ro.buil.tagandroid.os.Build.TAG),看它是否包含testkeys字符串。

编辑:对于选项1,我建议您通过setuid/setgid权限查找(即find / -perm -2000 -o -perm -4000,并检查列表中是否存在su)。


你能解释一下 testkeys 构建标签是什么,以及它与 root 的关系吗? - thisiscrazy4

-3

你不能可靠地这样做,因为手机被“Root”的含义并不总是相同的。所有你会得到的建议都只是测试一些流行的与Root有关的工具。但是,无法检测到手机是否已经被Root,而没有使用这些工具。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接