android root原理

android 获取设备root权限

Android 获取Root其实和linux切换Root用户是一样的,在Linux下我们只需要执行“su”,或者“sudo”,然后输入Root账户和密码就可以获取Root权限了(其实就是将uid和gid设置为0),Android 5.0之前的系统都不支持多用户切换,对”su“ 也没有做密码验证,Android系统没有”sudo“命令,且很多厂商从手机的安全考虑,一般都是去掉”su“命令的。其实远远没有那么简单,已经获取的Root权限的命令,”SuperUser.apk“其实是一个管理Root权限的应用,负责对整个系统中国Root权限的管理和安全提示,让root后的系统相对安全一些。

Root思路

获取Root权限就是要完成以下几步:

①对于无”su“的系统,我们先通过其他方式将编译好的”su“放入系统环境下(、system/bin/su)

②将文件的Owner设置为Root(chown root:root system/bin/su)

③将系统中的”su“文件切换至”-rwsr-sr-x“(chmod 6755 /system/bin/su)

④安装SuperUser.apk

那么问题来了,对system/bin目录的操作需要Root权限,这个貌似让我们进入一个死循环,所以我们就需要其他特殊方式来完成以上步骤

思路有两种

①找一个已经Root权限的进程完成以上步骤

思路:通过系统漏洞提升权限是Root,问题:如何找到Root的漏洞,目前找到的漏洞有哪些

思路:init进程启动的服务进程,如adbd、rild、mtpd、vold等都有Root权限,找到它们的漏洞

②通过系统之外的某些方法植入:

思路:通过Recovery刷机方式输入”su“

已经发现的Root漏洞

目前较为经典的Root漏洞有ZerRush、GingerBreak、RageAgainst、TheCage、ASHMEM、Exploid、Levitator、Mempodroid、Zimperlich等,不同的Android设备利用的楼栋号不一样,这个就需要我们Root之前做一个漏洞检测,漏洞检测工具:X-Ray

SuperUser分析

为了保护Root后的Android设备的安全,于是乎SuperUser应用项目就理所当然的产生了,SuperUser应用是一个开源项目,最著名的SuperUser应用koush开发的

原理:

理解完Root本质之后,用一句话就是往system/bin下放一个带s位切不检查调用者权限的su文件,当然,任何一个应用程序都可以调用su命令来获取权限,这样对设备来说相当不安全,所以SuperUser应用就需要完成以下几个工作来保证Root后的设备安全

①su文件是否被替换,保证su的安全

②建立白名单,只允许白名单中的应用使用Root权限

③应用程序调用Root命令时,向用户弹出Root申请界面

系统原生的su对于所有的应用程序是平等的,所以原生的su是无法保证su安全的,SuperUser必须安装自定义的su以及能够保证自身su不被替换的deamon进程,应用请求Root权限时,自定义的su会通知SuperUser,由SuperUser来进行白名单存储和Root权限授予提示,让用户选择是否给与该应用Root权限,而su与superUser之间的通信是靠一个阻塞的Socket完成的。

 

发布了15 篇原创文章 · 获赞 0 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qinggancha/article/details/103234764