2012-10-15 225 views
1

可能重复:
Determine if running on a rooted device我的Android应用程序是否在根设备上运行?

我创建一个Android应用程序,我想知道如果我的应用程序是一个根深蒂固的设备上运行。
我在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()的错误。命令:[苏]工作目录:空环境:空

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; 
} 

我从亚行外壳检查,它给了我一个“#”提示符,所以我可以肯定的是,设备至少壳牌扎根。 鉴于它是以外壳为根源的,那么Determine if running on a rooted device上提供的解决方案应该至少可以工作,但这也不起作用。

+0

你能提供一些关于'Runtime.exec(“su”)'不起作用的相关日志输出吗?任何例外? – dumbfingers

+0

有一些谷歌播放应用程序可以帮助您确定您的手机是否已经植入。让我们来看看这里:https://play.google.com/store/search?q=root+checker&c=apps –

+0

@ ss1271:我已更新该帖子。我得到一个异常10-15 18:36:36.445:W/System.err(668):java.io.IOException:运行exec()的错误。命令:[su]工作目录:null环境:null – user1746693

回答

1

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

相关问题