Android Root 原理

2013.12.01更新

阅读:http://www.zhihu.com/question/21074979

 

从su说起。

SU:( Switch user切换用户),用户通过该命令可进行用户切换,该文件一般位于/system/bin或者/system/xbin/目录下,拥有者和群组均为ROOT

Linux下su以后输入密码就可以root了,但Android里的su和Linux里的su是不一样的,Android里的su不是靠验证密码的,而是看你原来的权限是什么。意思就是如果你是root,那你可以通过su切换到别的用户,比如说shell,wifi,audio什么的。但如果你是root之外的其他用户,就不能切换回root了,会提示你permission denied。

一般su文件只允许getuid()为AID_ROOT和AID_SHELL的进程可以使用su进行登陆,下面的代码是android系统原版的su中的部分代码:

/* 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\n", myuid);
return 1;
}

部分手机出厂的时候根本就没有su这个程序,就算有,如果不是ROOT也无法执行,因此为了获得Android的root权限,要重新编译su文件并拷贝到Android手机。

接下来需要了解下文件权限。rws,它的执行权限标志位是一个s,s代表当任何一个用户执行该文件的时候都拥有文件所有者的权限,这文件的所有者是root,简单点说就是不管谁执行这个文件,他执行的时候都是以root身份执行的。也就说即使我不是root也有可能以root身份来执行程序,那么我就把一个所有者是root的su程序权限标志位置成-rwsr-xr-x,那么不管谁执行它,都是root身份执行,su就可以顺利执行成功了,执行成功之后我就是root身份了。

问题都清楚了,就是你需要把一个所有者是root的su拷贝到Android手机上,并且把su的权限标志位置成-rwsr-xr-x。能把这个事情搞定你就成功root了一个手机

但是,要把重新编译的su复制到手机上并且设置为-rwsr-xr-x,又需要ROOT权限。这里就有一个逻辑闭环,你要ROOT的前提是,你要有ROOT权限。一般就是通过找漏洞来突破这个闭环

替换完成之后,还要superuser,ROOT之后都会安装该APK,用来管理权限,从网上资料得知,一般su和superuser是相对应的,一个superuser对应一个su,每当有人想通过su获得权限的时候,su都会询问superuser,然后由superuser像用户进行询问。

 

 

posted @ 2013-10-19 11:33  yutoulck  阅读(435)  评论(0编辑  收藏  举报