目前来说Android平台并没有提供能够root检查的工具。但是我们可以通过两种方式来判断

手机里面是否有su文件

这个su文件是不是能够执行

但是这两种检查方式都存在缺点。

第一种存在误测和漏测的情况,比如su没有放到常规路径下,就容易漏掉,但是这种情况是有办法尽量规避(或者说减小误差)的,比喻运行which检查,或者遍历shell中所有的环境变量的PATH;还有一种情况是手机没有root但是存在su文件,这种情况一般出现在手机曾经被root过,但是又进行了系统还原操作。

而第二种,有可能检查不准确,或者会有弹窗提示用户是否要授予root权限。

一、 检查手机是否存在su文件

private static boolean checkSuFile() {

Process process = null;

try {

// /system/xbin/which 或者 /system/bin/which

process = Runtime.getRuntime().exec(new String[]{"which", "su"});

BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));

if (in.readLine() != null) return true;

return false;

} catch (Throwable t) {

return false;

} finally {

if (process != null) process.destroy();

}

}

private static File checkRootFile() {

File file = null;

String[] paths = {"/sbin/su", "/system/bin/su", "/system/xbin/su", "/data/local/xbin/su", "/data/local/bin/su", "/system/sd/xbin/su",

"/system/bin/failsafe/su", "/data/local/su"};

for (String path : paths) {

file = new File(path);

if (file.exists()) return file;

}

return file;

}

二、检查su文件是否可运行

先看一种基于Linux的文件权限检查,看文件是否有可执行权限,这种只能检查这个文件是不是个可执行文件,比如没有root的华为Meta9手机 adb shell 下执行效果如下:

shell@hwmt7:/system/bin $ ls -l su

-rwxr-xr-x root shell 71428 2016-08-26 18:40 su

上面的x表示有可执行权限。虽然如此,但是在华为Meta9上,adb shell中运行su还是会报错:error: only position independent executables (PIE) are supported. 并不知道为啥。java检查代码如下:

/**

* Author: liuqiang

* Time: 2017-08-18 14:54

* Description:基于Linux的权限检查

* 检查su文件是否有x或者s权限

* @param filePath su 文件的路径,比如/system/bin/su 或者/system/xbin/su

*/

private static boolean isCanExecute(String filePath) {

java.lang.Process process = null;

try {

process = Runtime.getRuntime().exec("ls -l " + filePath);

BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream()));

String str = in.readLine();

if (str != null && str.length() >= 4) {

char flag = str.charAt(3);

if (flag == 's' || flag == 'x') {

Runtime.getRuntime().exec("su ");

return true;

}

}

} catch (IOException e) {

e.printStackTrace();

} finally {

if (process != null) {

process.destroy();

}

}

return false;

}

还有一种方式就是尝试执行一下这个su文件,如果能执行成功,说明确实root了,如果执行不成功,那么理论上来说没有root。但是这个没有root只是理论上的,比如上这个手机安装了root授权管理软件,一旦请求root权限,就会弹窗提示用户是否给其授权。如果用户点击拒绝授权,那么运行到的效果,判断出来还是为非root。一般这样的root授权管理apk有:/system/app/SuperSU/SuperSU.apk 等。

效果图:

屏幕快照 2017-08-18 15.08.46.png

Android中java测试代码如下:

/**

* Author: liuqiang

* Time: 2017-08-17 18:57

* Description: 这种方式会弹窗,如果用户点击拒绝授权那么判断依然是没有root

*/

private static boolean checkRootExecutable() {

Process process = null;

DataOutputStream os = null;

try {

process = Runtime.getRuntime().exec("su");

os = new DataOutputStream(process.getOutputStream());

os.writeBytes("exit\n");

os.flush();

int exitValue = process.waitFor();

if (exitValue == 0) {

return true;

} else {

return false;

}

} catch (Exception e) {

Log.d("*** DEBUG ***", "Unexpected error - Here is what I know: " + e.getMessage());

return false;

} finally {

try {

if (os != null) {

os.close();

}

process.destroy();

} catch (Exception e) {

e.printStackTrace();

}

}

}

这里需要注意的是int exitValue = process.waitFor();这行代码。判断exitValue结果,当是0时,代表该智能设备具备最高权限。当exitValue结果不是0时,有两种情况,要么是这台设备没有被root,要么是当前应用没有root权限。所以它的返回值无法精确判定。kingRoot在设备root但是没有授权给应用时,返回值是固定的为0;但是SuperSU.apk,如果在拒绝后发挥值为1。

三、检查手机是否存在已知的root管理软件

像什么kingroot、SuperSU 、360Root、Root精灵、等apk是否存在。

综上来说没好的办法来百分百确定这个手机是否root

check root android,Android检查手机是否被root相关推荐

  1. 为什么android不能root,我的安卓手机为什么不能ROOT?

    对于安卓手机用户来说,不管是不是发烧友,在使用手机的过程中都难免会遇到需要通过ROOT手机来完成的事. 所谓ROOT,其实就是获取手机根目录的权限,Android系统的ROOT可以解释为开放根目录权限 ...

  2. 【转】Android检查手机是否被root

    目前来说Android平台并没有提供能够root检查的工具.但是我们可以通过两种方式来判断 手机里面是否有su文件 这个su文件是不是能够执行 但是这两种检查方式都存在缺点. 第一种存在误测和漏测的情 ...

  3. linux中root权限如何开启,手机如何开启root权限?,看完你就知道了

    root权限,系统权限的一种,也叫根权限,与SYSTEM权限可以理解成一个概念,但高于Administrator权限,root是Linux和unix系统中的超级管理员用户帐户,该帐户拥有整个系统至高无 ...

  4. Android检查手机是否Root以及应用是否获取Root权限

    在Android中如何判断手机是否Root以及应用是否获取了Root权限,下面我们将对开源项目RootTools的源码进行分析. RootTools的源码地址:https://github.com/S ...

  5. radmi4a Android,红米手机4A获取root超级权限的教程

    红米手机4A有木有方法开通了ROOT权限?大家知道,android手机有ROOT权限,如果手机开通了root相关权限,就可以实现更强大的功能,举个例子大家部门的营销部门的妹纸,使用某些营销软件都需要在 ...

  6. android+root+新方法,安卓手机最新Root通用教程

    直接运行superSu Root失败 直接运行superSu等Root工具在很多手机上都会Root失败,关键在于没有相关权限,那么怎么才能在这些手机上获取Root权限呢? 开发者选项 首先打开开发者选 ...

  7. 如何开启红米手机4X的ROOT超级权限

    红米手机4X通过什么方法拥有了root权限?大家都清楚,Android机器有root权限,如果手机拥有了root相关权限,可以实现更强的功能,举个栗子大家公司的营销部门同事,使用大多数营销软件都需要在 ...

  8. 小米手机5s获得root权限的经验

    小米手机5s有何方法启用了root权限?各位都知道,android系统有root权限,如果手机启用了root相关权限,可以实现更完美的功能,举个栗子各位公司的营销部门的妹子,使用某些营销应用都需要在r ...

  9. 如何获得小米手机4c的Root超级权限

    小米手机4c有么好方法开通了Root权限?做开发的人清楚,安卓系统有Root权限,一旦手机开通了root相关权限,能够实现更完美的功能,举个例子,做开发的人公司的营销部门的妹子,使用个别营销应用都需要 ...

最新文章

  1. 全站HTTPS简单实践
  2. STM32 HAL库、标准外设库、LL库(STM32 Embedded Software)
  3. java中 hashmap中小数,java基础知识--HashMap中对 h(length-1)的理解
  4. 开关设备对于数据中心正常运行时间很重要!
  5. 剑指offer(34-40题)详解
  6. Codeforces Round #281 (Div. 2) C. Vasya and Basketball 二分
  7. 2017年10月23日23:58:04
  8. php pdo操作数据库
  9. 太阳能充电调节代码_太阳能LED路灯控制器有什么作用
  10. 具有Couchbase,Java EE和WildFly的CRUD Java应用程序
  11. Makefile之变量(10)
  12. c++实验七-—项目2
  13. java 接口 同名方法_java 实现多个接口 方法重名的解决办法——内部类
  14. Cuda Graph (cuda 优化)
  15. java生成word带多级标题,word文档怎样设置自动生成多级标题
  16. 银行卡号自动识别,包括银行名称、英文缩写代号、LOGO
  17. IT软件创业之 -- 电脑设备买过来都是钱,卖出去都是废铁
  18. python的实验报告大一心理_python的期末实验报告
  19. 二极管的分类及常用方法
  20. 计算机内存的维修方法,电脑修理技巧之内存故障解决

热门文章

  1. Linux内核编译输出到指定目录
  2. 菏泽中考报名不报计算机,菏泽中考报名系统
  3. 微型计算机存容量基本单位,微型计算机内存容量的基本单位是()。
  4. PDF文件可以修改吗,怎么在PDF上修改文字
  5. 交换机工作原理(cisco)
  6. ‘maxflow‘ has no attribute ‘Graph‘
  7. 读取xml文件中的信息
  8. 学生成绩预测模型_每日排行榜|四川省大学生金融科技建模大赛 10.9
  9. AD环境下,KB3139398、KB4054517、SP1更新失败的解决办法
  10. swiper效果(竖向切换)