Android root简单分析

来源:互联网 发布:淘宝客服的提成怎么算 编辑:程序博客网 时间:2024/05/18 02:35

开放系统root权限,即使任何用户都可以执行su程序,以使得临时用户也具有了root的权限,然后去进行一些系统级的设置,如设置IP地址,DNS等。

1、修改su程序对临时用户的限制,默认su只允许root和shell用户执行

vi system/extras/su/su.c

注释掉语句块

/*myuid = getuid();if (myuid != AID_ROOT && myuid != AID_SHELL) {fprintf(stderr,"su: uid %d not allowed to su\n", myuid);return 1;}*/

就安全性而言这种方式是不太可取的,因此才有了类似于superuser.apk的出现,它们的作用就是在外面再提供一层保护。
顺带着说一句su的本质其实就是改变gid和uid:

    if(setgid(gid) || setuid(uid)) {        fprintf(stderr,"su: permission denied\n");        return 1;    }

2、修改su程序的suid,可以通过ls -l来查看,在system/core/rootdir/init.rc中添加语句

chmod 4755 /system/xbin/su

作为选择,我们多数用三位八进制数字的形式来表示权限,第一位指定属主的权限,第二位指定组权限,第三位指定其他用户的权限,每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。如6(4+2)代表有读写权,7(4+2+1)有读、写和执行的权限。
还可设置第四位,它位于三位权限序列的前面,第四位数字取值是4,2,1,代表意思如下:
4,执行时设置用户ID,用于授权给基于文件属主的进程,而不是给创建此进程的用户。
2,执行时设置用户组ID,用于授权给基于文件所在组的进程,而不是基于创建此进程的用户。
1,设置粘着位。
s
设置用户(或组)的ID号
t
设置粘着位(sticky bit),防止文件或目录被非属主删除

3、如果涉及到/data目录而非/data/data/<你的包名>/的修改,则修改system/core/rootdir/init.rc
将 mount yaffs2 mtd@userdata /data nosuid nodev 改为 mount yaffs2 mtd@userdata /data nodev

4、通过java app进行验证

package com.test;import java.io.DataOutputStream;import java.io.IOException;import android.app.Activity;import android.os.Bundle;import android.util.Log;public class TestActivity extends Activity {/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);try {Process process = Runtime.getRuntime().exec("su");//(这里执行是系统已经开放了root权限,而不是说通过执行这句来获得root权限)DataOutputStream os = new DataOutputStream(process.getOutputStream());os.writeBytes("ifconfig eth0 192.168.18.122\n");os.writeBytes("exit\n");os.flush();} catch (IOException e) {e.printStackTrace();}}}
public  void  smdtTakeScreenshot(){        //String cmd = "screencap -p /sdcard/screenshot.png";        //String cmd = "screencap -p " + path + name;        String cmd = "/system/xbin/su";        Process process = null;        DataOutputStream os = null;        BufferedReader successResult = null;        BufferedReader errorResult = null;        StringBuilder successMsg = null;        StringBuilder errorMsg = null;        try {            //静默安装需要root权限            process = Runtime.getRuntime().exec(cmd);            os = new DataOutputStream(process.getOutputStream());            //os.writeBytes("ls");            os.flush();            os.writeBytes("\n");            os.flush();            os.writeBytes("exit\n");            os.flush();            //执行命令            process.waitFor();            //获取返回结果            successMsg = new StringBuilder();            errorMsg = new StringBuilder();            successResult = new BufferedReader(new InputStreamReader(process.getInputStream()));            errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));            String s;            while ((s = successResult.readLine()) != null) {                successMsg.append(s);            }            while ((s = errorResult.readLine()) != null) {                errorMsg.append(s);            }        } catch (Exception e) {            e.printStackTrace();        } finally {            try {                if (os != null) {                    os.close();                }                if (process != null) {                    process.destroy();                }                if (successResult != null) {                    successResult.close();                }                if (errorResult != null) {                    errorResult.close();                }            } catch (Exception e) {                e.printStackTrace();            }        }        //显示结果        Log.e(TAG,errorMsg + " lei ");        Log.e(TAG,successMsg + " lei ");        //Toast.makeText(this, "成功消息:" + successMsg.toString() + "\n" + "错误消息: " + errorMsg.toString(), Toast.LENGTH_SHORT).show();    }

Reference
1、http://android-dls.com/wiki/index.php?title=Magic_Root_Access
2、https://github.com/git-core/su-binary/wiki
3、http://my.unix-center.net/~Simon_fu/?p=1069
4、http://blog.chinaunix.net/uid-12845622-id-3063276.html

原创粉丝点击