目前来说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/whichprocess = 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

from : https://www.jianshu.com/p/f9f39704e30c

转载于:https://www.cnblogs.com/xuan52rock/p/11126360.html

【转】Android检查手机是否被root相关推荐

  1. check root android,Android检查手机是否被root

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

  2. android判断软件是否已root权限,Android应用开发Android 判断手机是否有root权限方法...

    本文将带你了解Android应用开发Android 判断手机是否有root权限方法,希望本文对大家学Android有所帮助. root权限是安卓最高的操作权限,俗称superuser,简称su,一般来 ...

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

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

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

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

  5. root shell android 传输手机设备文件夹,【原】Android 设备,如何root,执行adb shell,查看设备中的数据库信息等...

    (一)第一步:root 使用百度一键root 等app,一键就可root,步骤略 (二) 1.执行 adb shellsu获得root权限ls 查看当前目录 cd data/datals 选com.t ...

  6. android root权限获取失败,安卓手机为什么获取Root权限失败?Root失败是什么原因...

    安卓手机为什么获取Root权限失败?新手机.旧手机里面安装的最多的是什么APP?当然是预装!是的,相信很多用户都深有体会,当这种情况无法再忍受的时候,我们只能通过Root或者刷机解决问题,但只要用的人 ...

  7. android手机gps没有信号强度,gps信号弱怎么办?怎么检查手机gps信号?

    gps信号弱怎么办?怎么检查手机gps信号? "GPS信号弱,请行驶到开阔的道路上" "GPS信号弱,位置刷新可能不及时,请谨慎驾驶" 经常,我们会听到这样无奈 ...

  8. android临时root权限获取失败,安卓手机为何获取Root权限失败?分析手机Root失败的原因是什么?...

    如今,手机预装的APP应用程序实在太多,对于有系统纯净强迫症的用户来说,拿到手机第一件事就是折腾,通过Root或者刷机解决问题,那么我们在获取ROOT权限的时候可能会遇到失败,那么安卓手机为何获取Ro ...

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

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

最新文章

  1. 校园网安全问题分析与对策
  2. 我在神策做研发丨做冲在前方的第一方队,造中国最好的开源 SDK
  3. 第一章 关于python
  4. 杂项题的基本解题思路——4、流量取证技术
  5. mysql存储过程时间_mysql时间操作函数和存储过程
  6. JQuery EasyUI combobox(下拉列表框)
  7. 【IT笔试面试题整理】字符串转数组+数组转字符串
  8. tomcat(7)日志记录器
  9. css资源网站收集推荐
  10. VC++中CEdit控件实现回车换行
  11. mysql不同的类的个数_Mysql-SQL优化-统计某种类型的个数_MySQL
  12. lua 差值 日期_Lua获取系统时间和时间格式化方法及格式化参数
  13. Linux内核分析第一周——计算机是如何工作的
  14. java pdfbox 提取pdf 标题_java – 使用pdfbox从PDF文件中提取文本
  15. centos6.0 LAMP源码安装
  16. Java打印菱形(一)
  17. moodle支持php5.4,moodle中文支持解决方案
  18. 《分布式资本链周刊》第二期
  19. 计算机符号链接是什么意思,Windows或Linux上的符号链接(符号链接)完整指南
  20. BCB:内存泄漏检查工具CodeGuard

热门文章

  1. SpringBoot整合Spring Security——第三章异常处理
  2. git-svn 在ubuntu deepin(Linux debian系)下的安装与应用
  3. 解决HDFS NameNode启动时Loading edits时间超长的问题(NameNode数据同步机制介绍)
  4. Hadoop yarn容量调度器capacity-scheduler.xml配置示例
  5. helm快速部署一个nginx应用并更改service类型为NodePort、自定义Chart的发布
  6. JVM调优:定位垃圾的常用算法
  7. Python Django 日期增减API
  8. 请你解释一下什么是线程池(thread pool)?
  9. zookeeper宏观认识
  10. 合肥学院计算机原理,合肥学院计算机组成原理实验三-20210415130709.docx-原创力文档...