|
吾爱游客
发表于 2015-2-3 11:04
Android获取超级用户权限
大家可能都知道,买品牌机或者合约机都会出现一个问题。就是买到的手机里有一大堆捆绑的垃圾软件,于是,网络上出现了ROOT精灵。。。ROOT大师等等的软件,似乎ROOT成了一个热词,那么,什么是ROOT?ROOT就是对Android或者类似的LINUX类型系统的超级用户进行破解,从而让使用者成为超级用户,这样,你就可以管理手机里的所有程序。什么刷机啊。写在系统程序啊。等等。。。
破解ROOT的原理是什么?破解Root权限的原理就是在手机的/system/bin/或/system/xbin/目录下放置一个可执行文件“su”,这是一个二进制文件,相当于电脑上的exe文件,仅仅在系统中置入这个“su”文件是不会给手机的软件或硬件造成任何故障的。
下面是原版Android的部分代码(反正Android是开源的!大家可以自己找一找):
<SPAN style="FONT-SIZE:18px"><STRONG>/* Until we have something better, only root andthe shell can use su. */
myuid = getuid();
if (myuid != AID_ROOT && myuid !=AID_SHELL) {
fprintf(stderr,"su: uid %d not allowedto su\n", myuid);
return 1;
}</STRONG></SPAN>这条是有关SU命令的代码,从中可以看出if(myuid != AID_ROOT && myuid != AID_SHELL)这条命令只允许getuid()为AID_ROOT和AID_SHELL的进程时可以使用su进行登陆。
那么假设,这一整串代码消失,那么就代表着任何进程就都可以使用SU命令登录了。
但是还有部分机器让进程获取ROOT的代码如下:
Process process= Runtime.getRuntime().exec("su");
DataOutputStreamos = new DataOutputStream(process.getOutputStream());
os.writeBytes("mount-oremount,rw /dev/block/mtdblock3 /system\n");
os.writeBytes("busyboxcp /data/data/com.koushikdutta.superuser/su /system/bin/su\n");
os.writeBytes("busyboxchown 0:0 /system/bin/su\n");
os.writeBytes("chmod4755 /system/bin/su\n");
os.writeBytes("exit\n");
os.flush();
尽管这两串代码不一样但是这两个Android的SU源代码(指原版和部分机器的SU源代码),都有一个共同的代码:
if(setgid(gid)|| setuid(uid)) {
fprintf(stderr,"su:permission denied\n");
return 1;
}
那么看似这里就是权限判断的地方,从出上面的分析可以认为破解android的root权限的主要原理是:在系统中加入一个任何用户都可能用于登陆的su命令。当然这首先要取得root权限才能做。
我希望申请会员
申请ID:ssuoi
申请邮箱:1751025424@qq.com
我希望加入吾爱论坛,希望在这里与更多的朋友们讨论技术,传授经验,谢谢!
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|