转载:/m0_37735448/article/details/102555244
判断Android设备Root方法总结
先说结论没有办法完全检测出设备是否被root,因为root权限拥有系统的最高权限。 已经root的设备可以通过修改系统文件,和Hook来躲避检查。我们只能增加他躲避检查的难度来检测root权限。
1,通过判断是否存在一些已知的root程序包名来判断机器是否被root
"",
"",
"",
"",
"",
"",
""
2,通过判断是否存在一些危险应用,比如必须需要root权限才能使用的应用的包名来判断是否被root
这个方法可能会误杀一些手机,可以根据自己需求添加这个方法
"",
"",
"",
"",
"",
"",
"",
""
3,检测一些常用目录是否有su文件
"/data/local/",
"/data/local/bin/",
"/data/local/xbin/",
"/sbin/",
"/su/bin/",
"/system/bin/",
"/system/bin/.ext/",
"/system/bin/failsafe/",
"/system/sd/xbin/",
"/system/usr/we-need-root/",
"/system/xbin/",
"/cache/",
"/data/",
"/dev/"
除了这种方法还可以通过Linux 的which命令来查找su文件,这样会更全面的查找。但是不可避免的一个问题就是,如果曾经root过但是root权限已经失效的设备会被判断成已经root。这个可以根据需求添加
4,判断属性和属性
默认手机出厂后属性应该为0,应该为1。而root需要修改secure这个属性,如果这个属性被修改则认为这台手机被root了
5,判断一些系统路径是否可写。
Android中一些系统目录在没有root权限的情况下是不可写入的,如果我们对这些目录有写入的权限则判断这台设备已经被Root
"/system",
"/system/bin",
"/system/sbin",
"/system/xbin",
"/vendor/bin",
"/sbin",
"/etc",
6,判断系统的Tags标签
如果是正式发布版本的系统的属性应该是release-keys,如果是test-keys,很可能是非官方正式发布的ROM,则判断设备被替换了ROM,被root了。这个方法不一定准确,根据自己情况添加。
建设银行解析后的判断节点有:
package ;
public final class a {
不能包含下面这些apk文件:
public static final String[] a = new String[]{"", "", "", "", "", ""};
public static final String[] b = new String[]{"", "", "", "", "", ""};
public static final String[] c = new String[]{"", "", "", "", "", "", "", "", ""};
以下文件可以执行su操作:
public static final String[] d = new String[]{"/data/local/",
"/data/local/bin/",
"/data/local/xbin/",
"/sbin/",
"/su/bin/",
"/system/bin/",
"/system/bin/.ext/",
"/system/bin/failsafe/",
"/system/sd/xbin/",
"/system/usr/we-need-root/",
"/system/xbin/"};
以下目录是否有写入的权限: (成功)
public static final String[] e = new String[]{"/system",
"/system/bin",
"/system/sbin",
"/system/xbin",
"/vendor/bin",
"/sbin",
"/etc"};
}
Android P的源码修改方案:
ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/testkey)
ifeq ($(TARGET_BUILD_VARIANT),user)
BUILD_KEYS := release-keys
else
BUILD_KEYS := test-keys
endif
else
BUILD_KEYS := dev-keys
endif