android的提权root原理是什么精选.docx
- 文档编号:25046615
- 上传时间:2023-06-04
- 格式:DOCX
- 页数:7
- 大小:20.11KB
android的提权root原理是什么精选.docx
《android的提权root原理是什么精选.docx》由会员分享,可在线阅读,更多相关《android的提权root原理是什么精选.docx(7页珍藏版)》请在冰豆网上搜索。
android的提权root原理是什么精选
Android的提权(root)原理是什么精选
【Kevin的回答(304票)】:
Android的内核就是Linux,所以Android获取root其实和Linux获取root权限是一回事儿。
你想在Linux下获取root权限的时候就是执行sudo或者su,接下来系统会提示你输入root用户的密码,密码正确就获得root权限了。
Android本身就不想让你获得Root权限,大部分手机出厂的时候根本就没有su这个程序。
所以你想获得Android的root权限,第一步就是要把编译好的su文件拷贝到Android手机的/system/bin或者/system/xbin/目录下。
我们先假设你可以把su放在bin下,接下来你可以在Android手机的adbshell或者串口下输入su了。
上面说了,执行su,系统会提示你输入root用户密码,但你怎么可能知道密码呢?
暴力破解吗?
破解root的黑客当然不会这么做,这就涉及到第二个问题。
一般我们在Linux的console下输入ls-l会列出所有文件的权限。
比如:
-rwxr-xr-x,用过Linux的人都知道r代表该文件可读,w代表可写,x代表可执行,-就代表没有该权限。
第一个rwx代表文件所有者的权限,第二个rwx代表和所有者同组人的权限,第三个rwx代表其他用户对该文件的权限。
但下面这个文件就比较特殊。
rws,它的执行权限标志位是一个s,s代表当任何一个用户执行该文件的时候都拥有文件所有者的权限,这文件的所有者是root,简单点说就是不管谁执行这个文件,他执行的时候都是以root身份执行的。
那root用户执行任何文件都是不需要密码的。
这个时候如果你把su文件的权限置成-rwsr-xr-x会发生什么?
su这个程序本来就是赋予执行者root权限的,但执行的时候又不需要密码,所以执行一下这个文件就自动成root身份了。
问题都清楚了,就是你需要把su拷贝到Android手机上,并且把su权限标志位置成-rwsr-xr-x。
能把这个事情搞定你就成功root了一个手机。
大概意思就是两行代码
cp/data/tmp/su/system/bin/#copysu到/system/分区
chmod1775/system/bin/su#把su置成-rwsr-xr-x
那怎么搞定这个事情呢?
Android的system分区本身不可写,只有是root的权限才能改动它,执行不了啊。
一个办法就是找一个本身已经有root权限的进程来启动我上面的两行代码,那我这两行代码一启动就是root权限,就可以顺利执行了。
但是已经有root权限的进程都是出厂时候就装到手机上的,代码写死了,你没法控制它执行你自己的代码啊。
这个时候就需要你找漏洞了,比如用来破解Android2.3root权限的zergRush漏洞就是利用一个拥有root权限的进程栈溢出漏洞,栈溢出说白了就是这个进程读到了自有内存之外的地址空间,这段内存空间没分配给它,谁都能写这段内存,那我就可以把自己的两行代码预先写到这里,运行zergRush代码,然后等那个倒霉的进程执行我就行了。
如果各位有一定基础,能看懂我上面讲的,就基本知道原理其实并不难,难点在于找到漏洞。
zergRush的代码在这儿:
revolutionary/zergRush·GitHub
有兴趣的可以看看,网上也有很多分析文章。
另外iphone的越狱其实和Android的root是一回事儿,都是越权操作。
所以越狱的方式也都差不多,也是找IOS自带程序的漏洞,只不过IOS安全性强一点,所以也比较难找。
如果你发现你的iphone的某个自带程序经过一些特定操作会出现系统崩溃重启的现象,并且是可以复现的,那就很有可能可以用来越狱了。
好像是IOS6出来的时候,由于比较难搞,某个越狱团队就号召大家来找茬,发现的漏洞可以报告给他们用来越狱。
说明IOS越狱越来越难。
直接体现就是现在越狱需要的时间越来越长。
不过如果你发现漏洞也可以报告给苹果,苹果会根据漏洞严重程度给予一定奖励。
我记得看新闻说南非一个家伙靠给苹果找漏洞赚25万美元。
发家致富的好路子啊,哈哈。
================================================
谢谢各位支持
关于为什么su一定要放到/system/bin/或者/system/xbin/
首先,你当然可以把su这个程序copy到/data/分区,但你adbpush进去的时候,su有这个程序的所有者肯定不是root,一般是shell什么的(记不清了,应该是和adbd这个进程的所有者一样),这个时候即使你把它权限置为-rwsr-xr-x,哪你运行它的时候也是shell身份运行的,su会提示你输入密码的。
第二我们root手机的目的是为了运行需要root权限的APP,比如goagent或者什么的。
这些APP里代码需要获得root的时候是这么写的:
Processp=Runtime.getRuntime().exec("su");
【倪大为的回答(3票)】:
大体上分为两种:
1.使用系统漏洞,设法获取一个root权限的进程。
譬如一个经典的,使用adbd的启动过程中的不恰当实现,创建大量进程填充,最后得到一个root权限的adbd,最后用这个最高权限的adbd运行用户自己的脚本。
再譬如,对vold进程的几个漏洞,都是通过溢出实现“用root权限运行脚本”这件事的。
得到一个可控制的root权限进程后,就可以把需要的可执行命令设置好相应的权限,然后放进系统里,也就是root成功了。
2.刷入一个修改过的固件,这个固件本身就已经把需要提权的文件设定好相应的权限了。
第一种方法的前提是存在漏洞,并且发现利用的方法。
第二种方法的前提是,设备允许你刷入修改过的固件。
因此,有不少设备事实上(暂时)无法root。
【陈波的回答(4票)】:
(题外话)之前用知乎的手机客户端回复了一下,但是我发现好像没有回复成功,估计那个也是知乎手机客户端的一个bug了。
有必要先解释一下:
linux是什么?
linux是一种操作系统,多用于服务器,我们常见的是windows操作系统,例如xp,win7等之类的。
超级用户(超级管理员):
在windows下面,你肯定会发现一个叫做administrator的管理员,那个就是超级管理员,什么意思呢,通俗的说,就是这个用户可以做任何事情。
例如:
它可以限制你不能访问某些文件或者应用程序等。
那么,在Linux下面其实也有一个超级用户,它呢,就是root用户。
android其实是基于linux的一个操作系统,只是被用到了移动设备上面了,如果你想在pc上面安装android系统,理论上是完全可行的。
现在其实才牵涉到了androidroot的原理,root其实就是获取android系统的root权限。
至于原理:
手机制造商原始出厂的手机并未开放root权限,获取root的方法都是不受官方支持的,因此,目前获取root的方法都是利用系统漏洞实现的。
而不同手机厂商可能存在的漏洞不同,也就导致了不同手机root的原理可能不同。
不过,不管采用什么原理实现root,最终都需要将su可执行文件复制到Android系统的/system分区下(例如:
/system/xbin/su)并用chmod命令为其设置可执行权限和setuid权限。
为了让用户可以控制root权限的使用,防止其被XX的应用所调用,通常还有一个Android应用程序来管理su程序的行为。
root的基本原理就是利用系统漏洞,将su和对应的Android管理应用复制到/system分区。
(这个是我复制的维基百科的,如果你懂一点儿linux,那么这个过程就很好理解,如果不懂呢,那么你可以忽略掉。
)
至于root的步骤,这个各个手机的步骤都不同。
所以你可以去你相应手机的论坛里看看,就可以了。
【ThonatosYang的回答(1票)】:
一句话解释:
添加拥有最高权限的subinary文件用于进行最高权限操作。
【知乎用户的回答(1票)】:
Android的提权(root)原理是什么?
@Kevin更多提到ROOT管理背后的原理,这就是Android和Linux中的SID的用途,这是所有类UNIX通用的申请处理高权限方式。
其实在我的理解中应该是两个:
1,提权
2,ROOT
对于1,提权是利用系统的漏洞,获得原本获取不了的权限,提升本应用的权限。
已知的漏洞:
1.a:
之前提到的利用adbd的漏洞,在2.X时代有效。
这个利用的过程还是比较复杂,时间也比较长;
1.b:
三星CPU的漏洞,比如在Galaxy系上可以利用这个漏洞来ROOT,这个漏洞就比较好利用了,之接在APK代码里就可以利用。
在我的GalaxyNote上用过。
提权不一定是对于主系统(Android系统),还有些是针对辅助系统(BOOTLOADER和RECOVERY)。
1.c:
三星系的手机可以利用一个BOOTLOADER的漏洞(我不太清楚是不是漏洞,但是三星本身没有官方解锁工具这一说的,难道是官方提供的?
),可以任意的刷包,这样我们就可以利用这个途径来修改SYSTEM分区了,都有权限修改SYSTEM分区了,往上放个文件还不是分分钟的事。
官方解锁的就是提供方式,允许用户刷入自定义的文件。
1.d:
OPhone系统的老版本(2.0、2.5)中(不知道还有没有人用这个系统)的RECOVERY存在一个关于路径的处理的漏洞。
它有一个自己定义的upk升级包,只能处理/system/carrier下的文件,但在路径处理上估计是文本比较,你可以通过/system/carrier/../app这种方式来绕过它的管理系统,来修改/system/app下的文件。
一般情况下主系统的漏洞对用户的危害最大,因为它使一个普通权限的应用可以访问到本没有权限访问的资源。
对于三星CPU漏洞,如果一个应用利用它提高自己的权限,直接访问短信的数据库文件,而不是通过Android提供的Provider,系统就没有使用沙盒检查的机会,而且用户也不知道它们做了什么,你从它的权限申请列表上也看不到它会读取短信。
对于辅助系统的漏洞,一个普通的应用就没有办法了,因为平时辅助系统是不启动的。
但也并不是没有利用的可能。
对于2,ROOT在我理解就是安装ROOT管理工具,对于Linux的发行版本来说,本身提供了ROOT管理工具su还有sudo。
但是对于Android来说本身没有提供ROOT管理工具,所以我们需要利用提权的这个过程在系统中插入ROOT管理工具,以方便我们使用更高的权限。
因为毕竟提权这个过程一般来说不是很容易实现的。
比如我们提到的BOOTLOADER或RECOVERY的漏洞,是没有办法在主系统中使用的,所以需要安装ROOT管理工具以在主系统中使用。
ROOT之后因为可以修改系统,所以我们也有机会修复已知的漏洞,比如上面提到的三星CPU的漏洞。
以下由于本身半桶水水平,可能不正确,请轻拍:
对于ROOT本身来说不会降低系统安全性,除非ROOT管理器本身又有漏洞。
所以通过官方解锁的方式,使用安全的RECOVERY和安全的ROOT管理器,与官方的安全性一致。
但是两个黑色的“安全”提醒着我们,市面上鱼龙混杂的ROOT工具并不是都安全的,所以使用时一定选用大家认可的,安全的方式。
例如说我们平时用的SuperU.apk和与其相配的su应用,在应用层申请ROOT权限时,都会提示用户许可。
但是针对一些黑色的ROOT的管理工具,它如果留下后门,对于一些特定的请求不提示直接同意,而且不记录日志的话,这样就像在自己的设备中下了一个定时炸弹一样。
【吴仲華的回答(0票)】:
sudo-s
【WilliamKing的回答(0票)】:
和Linux没什么区别,Android不过是架在Linux内核上的虚拟机,root与它关系不大
【知乎用户的回答(0票)】:
@Kevin的答案有问题,看来他并不知道root的原理
先引用他的两段话:
大概意思就是两行代码
cp/data/tmp/su/system/bin/#copysu到/system/分区
chmod1775/system/bin/su#把su置成-rwsr-xr-x
那怎么搞定这个事情呢?
Android的system分区本身不可写,只有是root的权限才能改动它,执行不了啊。
获得root的时候是这么写的:
Processp=Runtime.getRuntime().exec("su");
【孙典的回答(0票)】:
在Android里通常是在程序中执行su去获取root权限,而就是在这个su中调用了setUid(0)和setGid(0),大概是,记不清了,通过这两个函数把你进程的uid设为和root一样(root的uid就是0),所以也就是说你自己随便写一个可执行文件,去调用这两个函数就能提权。
而要成功调用这两个函数,需要特殊权限,一般我们可以见到chmod0777xxx这样的形式,前面的那个0就是对应的setUid和setGid的权限,可以用chmod4777xxx去改。
其实看透了之后原理很简单,一些操作可以在adbshell中实现,试试就知道了~
原文地址:
知乎
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android root 原理 是什么 精选