安卓禁止root手机运行app,安卓root代码检测
程序员文章站
2022-04-24 20:58:16
...
最近需要禁止root手机运行app,需要判断手机是否root,如果root可以弹框提示风险,也可以闪退,本文采用的方式是闪退
废话不多说贴代码
//遍历检测su是否存在
private boolean CheckRootPathSU() {
File f = null;
final String kSuSearchPaths[] = {"/system/bin/", "/system/xbin/", "/system/sbin/", "/sbin/", "/vendor/bin/"};
try {
for (int i = 0; i < kSuSearchPaths.length; i++) {
f = new File(kSuSearchPaths[i] + "su");
if (f != null && f.exists()) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
//常规检测su是否存在
private boolean checkRootWhichSU() {
String[] strCmd = new String[]{"/system/xbin/which", "su"};
ArrayList<String> execResult = executeCommand(strCmd);
if (execResult != null) {
return true;
} else {
return false;
}
}
大家看代码就会发现,检测手段为检测手机中是否存在su,即root需要执行su才可以获取root权限
这里采用两种方法结合的方式判断如下
public boolean isRoot() {
if (CheckRootPathSU() || checkRootWhichSU()) {
return true;
} else {
return false;
}
}
测试可以使用模拟器,楼主用的是雷电模拟器,可以模拟root,实测成功
注意,此方法可能会干掉那些曾经刷机,后来又刷稳定版的用户(此类用户root过,su会一直存在),各位根据实际业务决定
调用方式,楼主采用的方式比较严格,各位同学可以弹框提示之类,*发挥
//判断是否root,root则闪退
if (SecurityUtil.getInstance().isRoot()){
Log.i("root","root设备准备闪退");
System.exit(0);
}
贴完整单例代码,各位同学可直接使用
public class SecurityUtil {
private SecurityUtil() {
}
public static SecurityUtil getInstance() {
return SecurityBuilder.instance;
}
private static class SecurityBuilder {
private static SecurityUtil instance = new SecurityUtil();
}
public boolean isRoot() {
if (CheckRootPathSU() || checkRootWhichSU()) {
return true;
} else {
return false;
}
}
private boolean CheckRootPathSU() {
File f = null;
final String kSuSearchPaths[] = {"/system/bin/", "/system/xbin/", "/system/sbin/", "/sbin/", "/vendor/bin/"};
try {
for (int i = 0; i < kSuSearchPaths.length; i++) {
f = new File(kSuSearchPaths[i] + "su");
if (f != null && f.exists()) {
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
private boolean checkRootWhichSU() {
String[] strCmd = new String[]{"/system/xbin/which", "su"};
ArrayList<String> execResult = executeCommand(strCmd);
if (execResult != null) {
return true;
} else {
return false;
}
}
}
上一篇: vue-cli打包上线步骤详解