加载中…

加载中...

手机root原理

转载 2016-08-04 21:31:48

一、什么​是root?

在操作系统中,一般都有两种用户,一是管理员,二是用户。管理员的权限很大,可以修改操作系统中的一切。比如,windows下的管理员可以删除记事本程序,但普通用户就不可以了。在Linux系统中,包括android系统 ,在用户控制方面很严格,管理员帐号不允许被直接使用。

linux系统中,管理员帐号叫root。android内核是linux,其管理员也叫做root。而在windows系统中,管理员帐号叫administrator。root首先是个名词,但我们把它动词化了。我们所说的“root” , 其实是“得到root用户权限”的简称。

二,为什么要ROOT?

ROOT会带来哪些好处?可以让我们拥有掌控手机系统的权限,比如删除系统自带的软件,更换开关机铃声和动画,拦截状态栏弹出的广告等。ROOT带来了更高的权限,但对系统本身,没有任何影响。

​三, 怎么ROOT?

一般对手机root按照以下思路进行。

(一)能利用漏洞的利用漏洞提升到root。

下面以ageAgainstTheCage漏洞为例,谈谈root提权的过程。其它漏洞,参见利用系统漏洞提权的案例,http://blog.csdn.net/tanwei4199/article/details/17532805

基于安全原因,手机android系统默认程序的运行都是以非root用户运行的,包括adbd进程。adbd进程运行在手机中,他负责解释并运行PC传送过来的命令,该进程在刚启动时具有root权限,运行过程中降权为shell用户权限。如果能想办法让adbd进程一直以root身份运行,那么通过电脑传送过来的命令也能以root身份运行了。

RageAgainstTheCage程序就能达到上述目的,它主要做两件事:一是结束当前的adbd进程。二是创建大量的僵尸进程,这些进程默认都是shell用户身份。

我们看看它这么做会造成什么影响。首先,android系统一旦发现adbd进程结束,会重新启动新的adbd进程,此时它有root权限。其次,android系统用的是linux的内核,在linux中,对于用户最大允许运行的进程数有限制,由于RageAgainstTheCage程序创建的大量僵尸进程使shell用户拥有的进程数达到最大值,也就是说shell用户的进程数已经满了,导致新启动的adbd进程无法降权为shell用户,从而始终以root用户身份运行。这时候我们在电脑中执行adb shell命令时发现已经进入root shell了。

从上面的分析我们可以知道,要能够root成功必须满足两点:

1、系统必须已经设置每个用户允许运行的最大进程数(官方的Android2.1、2.2好像都已经设置,2.3的不是很清楚)。

2、必须要在新启动的adbd进程降权为shell用户前创建足够多的进程。但是因为系统进程调度的随机性,并不能保证每一次都能满足这个要求,这也就是为什么网上说多试几次就会成功。

执行完rageagainstthecage程序后其实已经获得了root权限,但是每次这么做非常麻烦,所以还应该设置一些永久性的东西,主要是上传几个程序到系统中并设置相应权限。这几个程序分别是:

su:使得非root用户能够以root身份运行程序。

busybox:系统工具包,包含很多的系统使用工具。

SuperUser.apk:授权管理软件包,为需要root身份运行的程序授权。

这里再说一下为什么要上传上面几个程序。su本来是linux系统中的一个命令,意思是switch user,可让一个普通用户切换为root用户,并可临时拥有root用户的权限。比如以普通用户的身份运行su -root命令,能从当前用户切换到root用户,取得root的权限。可见,su是达到我们root目的一个便捷途径。

android内核尽管用的是linux,但对su的使用做了限制,只有root和 shell用户才有权运行su程序,其他用户运行都会返回错误。于是,获取android系统root权限的目标就是去掉这个限制,所以我们要替换掉系统中的su程序(位于/system/bin/或/system/xbin/目录),替换后的su将不检查实际用户权限,这样普通的用户也将可以运行su程序, 从而提升自己的权限。

替换su后,我们可以提升自己的权限,恶意程序也可以通过su来提升权限,那这样的结果将会是灾难性的。为了防止不良软件也取得root用户的权限,当我们在root的过程中,还会给系统装一个程序superuser.apk,放到system/app下面。当某些程序执行su指令想取得系统最高权限的时候,superuser就会自动启动,拦截该动作并作出询问,当用户认为该程序可以安全使用的时候,那么我们就选择允许,否则,可以禁止该程序继续取得最高权限,这也算是给系统加了一层保险吧!

详见:http://blog.sina.com.cn/s/blog_da6ccaf60101g86r.html

使用android漏洞来直接root,这是最原始最纯洁的方式。不过这种方式root的成功率已经非常低了,因为随着android系统的升级,漏洞也在一个一个的被堵上。很多手机上的“一键root”程序就是利用这种方式。​

(二)如果官方recovery功能允许, 可以刷入包含su和root管理程序的刷机包。

1、什么是recovery?

recovery是一个小型的手机系统,类似于windows PE或dos。可以理解为手机上装了双系统,一个是android系统(位于rom中的/system分区),一个是recovery(位于rom中的/recovery分区)。如果android系统被毁了,手机还是可以进入recovery的。

recovery的使用原理就和电脑上的ghost软件一样,起到系统备份与还原作用,也可以升级内核,刷补丁等。recovery的编写是和系统基带联系在一起的,不同的基带版本不能乱刷。

有关recovery的介绍,可参考:

http://www.cnblogs.com/xl19862005/archive/2012/03/23/2414109.html

2、通过recovery怎样获取root权限?

原理很简单,进入recovery后,/system分区就变成了rom中的一个硬件盘块,对它当然可以自由修改。我们把su放到/system/xbin文件夹下,赋予rwsr-sr-x权限,基本就大功告成了。

那怎么放过去呢?具体操作参见:http://blog.csdn.net/happy_6678/article/details/7242594

(三)如果官方开放bootloader, 可以刷入第三方recovery,其余的步骤同上一步

每部手机都自带官方的recovery,但有些官方的recovery功能简单,不能刷入刷机包,有的只能刷入由厂商签名的刷机包。于是我们就要用到第三方的recovery,这是目前最常见的情况

1、什么是bootloader?

bootloader是嵌入式系统在加电后执行的第一段代码,它的作用类似于个人电脑中的BIOS固件程序,在完成CPU和相关硬件的初始化之后,再将操作系统映像装在到内存中,然后跳转到操作系统所在的空间,启动操作系统运行。

为了深入了解什么是bootloader,要先了解android的启动流程:

http://blog.jobbole.com/67931/

http://www.cnblogs.com/xl19862005/archive/2012/03/23/2414109.html

2、bootloader加锁

为了安全起见,有些手机厂商会对bootloader加锁。加锁的bootLoader在加载操作系统映像或其它重要固件之前,会先对其进行签名校验,签名不符的话就中止启动流程,以此来防止用户刷入修改过的包。如HTC手机在刷机前需要保证S-OFF,S-OFF代表什么呢?S代表SecurityLock安全锁,保护锁的意思,S-OFF就是关掉锁保护。再有就是Motorola的手机,很多型号的bootLoader是锁住的,因此,在刷机前要先解锁bootLoader。

3、如何解锁bootloader?

4、如何刷入第三方recovery?​

参见:​http://android.tgbus.com/Android/yizhi/201412/511888.shtml

脚本语言Edify的详细介绍参见:http://blog.csdn.net/tody_guo/article/details/7948083

阅读(0) 评论(0) 收藏(0) 转载(0) 举报/Report

评论

重要提示:警惕虚假中奖信息
0条评论展开
相关阅读
加载中,请稍后
澶氭兂澶氬仛
  • 博客等级:
  • 博客积分:0
  • 博客访问:8,780
  • 关注人气:0
  • 荣誉徽章:

相关博文

推荐博文

新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

新浪公司 版权所有