您的位置:首页 > 移动开发 > Android开发

开放Android root权限

2015-06-03 09:53 441 查看
开放系统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的出现,它们的作用就是在外面再提供一层保护。

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

chmod 4755 /system/xbin/su

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. */

@Override

public 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();

}

}

}

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: