Android 操作系统获取操作系统获取Root权限权限 原理详细解析原理详细解析
android root权限破解分析权限破解分析
许多机友新购来的Android机器没有破解过Root权限,无法使用一些需要高权限的软件,以及进行一些高权限的操作,其实破
解手机Root权限是比较简单及安全的,破解Root权限的原理就是在手机的/system/bin/或/system/xbin/目录下放置一个可执行
文件“su”,这是一个二进制文件,相当于电脑上的exe文件,仅仅在系统中置入这个“su”文件是不会给手机的软件或硬件造成
任何故障。
下面的代码是android系统原版的su中的部分代码,可以看出只允许getuid()为AID_ROOT和AID_SHELL的进程可以使用su进
行登陆。
代码如下:
<SPAN style=”FONT-SIZE: 18px”><STRONG>/* Until we have something better, only root and the shell can use su. */
myuid = getuid();
if (myuid != AID_ROOT && myuid != AID_SHELL) {
fprintf(stderr,”su: uid %d not allowed to su”, myuid);
return 1;
}</STRONG></SPAN>
面在Superuser这个android程序中的su不再有上面的一部分,这样任何进程都可以使用su进行登陆了,有一部分android程序要
使用root权限可能的用法类似于(这个也是Superuser中的一部分代码):
代码如下:
Process process = Runtime.getRuntime().exec(“su”);
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes(“mount -oremount,rw /dev/block/mtdblock3 /system”);
os.writeBytes(“busybox cp /data/data/com.koushikdutta.superuser/su /system/bin/su”);
os.writeBytes(“busybox chown 0:0 /system/bin/su”);
os.writeBytes(“chmod 4755 /system/bin/su”);
os.writeBytes(“exit\n”);
os.flush();
而在上面提到的Superuser和android程序中的su源码中都有这部分代码:
代码如下:
if(setgid(gid) || setuid(uid)) {
fprintf(stderr,”su: permission denied”);
return 1;
}
看上去这里就是进行权限切换的地方了。面普通用户要能使用su,su的权限要是这样:
-rwsr-xr-x. 1 root root 34904 11月 3 2010 /bin/su
这个和电脑版的su上是一样的。
从出上面的分析可以认为破解android的root权限的实质是:在系统中加入一个任何用户都可能用于登陆的su命令。当然这首
先要取得root权限才能做
到。在z4root这个android下的破解android的root权限的程序中有一个rageagainstthecage,可能就是设法得到root权限的程
序。
第二篇文章:
如果你进行过程序开发,在root过的手机上面获得root权限的代码如下: