Android Root设备中的su权限获取和使用详解

原文地址:https://www.jb51.net/article/133719.htm

ROOT权限简介:

ROOT权限是Linux内核中的最高权限,如果你的身份是ROOT,那么你就具有了ROOT权限。有了最高权限,你就可以为所欲为,换句话说,如果恶意程序获取到了ROOT权限,那么就可以肆意地破坏你的手机,获取的隐私...所以厂商一般在生产手机的时候,不会提供给用户ROOT权限,官方宣称是为了保护用户手机的安全,然后装了一堆开机自动启动,而用户这辈子也用不到也卸载不了垃圾软件(相信使用安卓的同学们都懂我的意思),而苹果所说的越狱,也就是获取ROOT权限。

为什么需要获取ROOT权限?

苹果用户获取ROOT权限,是为了可以免费安装各种软件,以及为了获取更加灵活的操作体验,苹果不会安装一堆恶心的软件;而安卓普通用户获取ROOT权限,最大的目的就是为了卸载这些恶心的自带软件,安卓极客用户则是为了各种折腾安卓手机,安卓开发人员是为了得到日志文件,分析BUG。

我们开机之后,使用手机的身份就是一个普通用户(user),如果执行su,那么就可以直接切换到ROOT身份。就像仙剑奇侠传三里面的景天,是个凡人,法力有限,但是大家都知道,他的前世是飞蓬将军,法力高强,天界无人能敌,只有魔界至尊重楼可以与他一较高下,当他们来到天庭的时候,玉帝施法,让景天直接切换成飞蓬将军,于是他就有了飞蓬将军的记忆和法力,与重楼又一次大战。su就是这样一个神奇的命令。

高通平台上,su的相关代码位于: LINUX/android/system/extras/su/su.c中

Android开发中,偶有会遇到对一些定制设备的开发,一般这种设备都会有root权限,开发中也会用到root权限去做一些操作。

比如安装操作,普通的Android手机安装apk时都会跳出安装的界面,但用到root权限时,这个可以跳过,操作如下:

?
1
2
3
Process process = Runtime.getRuntime().exec( "su" );
OutputStream out = process.getOutputStream();
out.write((( "pm install -r " + path) + "\n" ).getBytes());

这里用到Process去获取su权限,然后执行adb的安装指令。要注意的是这些操作需要再try-catch代码块下。

另外之前在网上看到过一个方法去执行命令行:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void execShell(String cmd){
   try {
     Process p=Runtime.getRuntime().exec( new String[]{ "su" , "-c" ,cmd});
     BufferedReader br= new BufferedReader( new InputStreamReader(p.getInputStream()));
     String readLine=br.readLine();
     while (readLine!= null ){
       System.out.println(readLine);
       readLine=br.readLine();
     }
     if (br!= null ){
       br.close();
     }
     p.destroy();
     p= null ;
   } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
   }
}

这里通过参数传入命令行,在方法体中执行。至于具体的命令行,则是需要的时候去找对应的命令就好了。


猜你喜欢

转载自blog.csdn.net/dodod2012/article/details/81034236
今日推荐