Android检测设备是不是有root权限

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android检测设备是不是有root权限相关的知识,希望对你有一定的参考价值。

  安卓设备的root指第三方应用可以运行系统权限,即调用su来实现linux命令。单纯的eng版本的设备虽然可以通过adb修改系统但不具有root权限,因为其不包含superuser和su,第三方应用无法调用。执行如下代码获取设备是否已被root,没有root的设备会弹出"设备没有被root"的信息:

package com.example.testdroid;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends Activity

/** Called when the activity
is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if(isRooted())
Toast.makeText(this, "设备已被root", Toast.LENGTH_LONG).show();

else
Toast.makeText(this,
"设备没有被root", Toast.LENGTH_LONG).show();


public DataInputStream Terminal(String command) throws Exception

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

//执行到这,Superuser会跳出来,选择是否允许获取最高权限
OutputStream outstream = process.getOutputStream();
DataOutputStream DOPS = new DataOutputStream(outstream);

InputStream instream = process.getInputStream();

DataInputStream DIPS = new DataInputStream(instream);

String temp = command
+ "\\n";
//加回车

DOPS.writeBytes(temp);
//执行

DOPS.flush();

//刷新,确保都发送到outputstream
DOPS.writeBytes("exit\\n");

//退出
DOPS.flush();
process.waitFor();

return DIPS;

public boolean isRooted()
//检测是否ROOT过
DataInputStream
stream;
boolean
flag=false;

try

stream = Terminal("ls /data/");

//目录哪都行,不一定要需要ROOT权限的

if(stream.readLine()!=null)flag=true;

//根据是否有返回来判断是否有root权限
catch (Exception e1)

// TODO Auto-generated catch block

e1.printStackTrace();



return
flag;

参考技术A 下载360优化大师,硬件检测项目有root权限状态 参考技术B 360 就行啊

[Android] [ROOT] Magisk(魔术师/面具) 设置以及必装模块的安装

🍁简介

当我们给手机刷入Magisk(面具)后,等于获得了安卓系统的最高管理员权限,也就是root权限。获取root权限后的设备相对于未root的设备,安全性会有一定的降低。也许是基于这个原因,现在大部分应用都会检测你的设备是否存在root,当检测到你的设备存在root,就会无法运行或者闪退。这些应用一般是银行类金融类游戏类应用,也有可能是什么租号类网盘类或者营业厅类应用。一般是“银行类金融类游戏类”应用(检测root)居多,毕竟一个是为了保护客户的资金安全,一个是为了维护游戏的公平公正(防止root后开科技)。除了检测到root无法运行或者闪退外,银行类金融类应用还可能会功能异常(譬如无法刷脸或者无法使用指纹);游戏类应用的话,检测到root还可能会封号。

🔗 相关资料 :

🍁 方法 / 步骤

🌿一:安装自动救砖Magisk模块

点击下载(密码:mh) Magisk模块-神仙自动救砖-支持OTA稳定.zip

🌿 二 : 隐藏ROOT

2.1 打开 “Zygisk”选项

Zygisk命名非常形象,意思是注入Zygote后的Magisk。它能为Magisk模块,提供更深入、更强悍的修改能力。它有一个排除列表,可以撤销Magisk做的所有修改。这样你就能手动划定,模块起作用的范围。

注意,该功能跟Riru Hide不同,不能避免root被检测到,没有任何隐藏作用。即使你把某些程序加入排除列表,它们依旧可以发现Zygisk。如果用户要隐藏root,只能借助其他方式,比如添加Shamiko模块。
要使用“Shamiko”模块隐藏root,需要面具开启Zygisk,因为它是一个依赖面具Zygisk才能运行的模块。下图是开启Zygisk的步骤,需要注意的是,打开“Zygisk”选项后要重启手机,Zygisk才能生效。

  • Zygisk后面显示否表示未开启Zygisk

2.2 屏蔽提示 "检测到不属于Magisk的su文件 "

❗ 主要是为了屏蔽 "检测到不属于Magisk的su文件 "提示!如果打开面具没提示这个的朋友,就跳过这一部分内容吧。

去面具设置里,找到“隐藏Magisk应用”选项点开,会跳出一个对话框。这个对话框里已经有默认名称“Settings”,你可以把它删掉并输入你喜欢的名字。比如我输入MiaoHan,点确定就不用管它了,它最后会自动跳转到新生成的面具界面里。期间无论跳转什么界面,你只需要点确定或者允许就行了。面具随机包名成功后,会看到原来的面具消失,桌面出现新生成的面具“MiaoHan”。如果随机包名失败或者“隐藏Magisk应用”一直转圈圈,那么你需要使用魔法网络🚀。



2.3 安装“Shamiko”模块

SHamiko是一个面具模块,可以在面具开启Zygisk的情况下,实现类似于MagiskHide的隐藏root效果,可以对应用隐藏Magisk、Zygisk本身和二进制文件“su”。你可以把它简单理解为,就是隐藏root的模块。


  • “Shamiko”笑脸表示正在工作,有隐藏root的作用

2.4 用排除列表对应用隐藏ROOT (默认黑名单模式)

“Shamiko”模块分为黑名单模式和白名单模式,安装“Shamiko”以后默认的是黑名单模式。黑名单模式的“Shamiko”,还需要用到面具的排除列表才能对(银行类金融类游戏类)应用隐藏root,也就是接下来要讲的内容。

🌿 三 : 总结

安装自动救砖模块(zip)–> 开启随机包名 --> 安装/注入zygisky依赖并开启 --> 安装“Shamiko”模块 --> 在魔术师配置排除列表里面添加黑名单

🍁 参考资料 & 致谢

[1] 隐藏root保姆级教程第(二)期之用“Shamiko”模块白名单模式隐藏root
[2] bilibili小猴玩机大圣

以上是关于Android检测设备是不是有root权限的主要内容,如果未能解决你的问题,请参考以下文章

Android判断当前应用是不是有root权限

Android root 原理

[Android] [ROOT] Magisk(魔术师/面具) 设置以及必装模块的安装

具有root权限的Android服务

Android root 原理

Android Studio 2.3 使用控制台中的模拟器,root 用户的“/dev/kvm 设备:权限被拒绝”