前言
近些年随着Android设备的发展,发现设备是越来越难以Root了,究其原因还是厂商在方便和安全这两个矛盾点上,倾向于安全。毕竟哪个厂商都不愿意因为安全的事故被曝光而失去用户。这篇文章详细调研了相关的厂商以及它们的设备root难易程度,也涉及一些root的原理等。
什么是root?
玩过linux的都知道,root是linux中权限最高的用户,本质上其实就是userid和groupid为0的用户。而在Android中(Android底层也是linux),也是一样的。获取了Android设备的root权限,即意味着获取了最高的权限,可以对设备为所欲为了。
如何root?
在linux中,一般如果希望能够获取管理员的权限来执行某条指令,一般会在命令前面加上sudo,然而Android系统里没有sudo命令,甚至都没有su命令,所以想要切换到root的话,可以参考这种思路:将su可执行文件复制到Android系统的/system分区下(例如:/system/xbin/su)并用chmod命令为其设置可执行权限和setuid权限。这样就可以用这个su切换到root,就获得root权限了。
当然也可以利用设备已知的各种漏洞和后门等来提升权限,不过随着国内厂商对ROM的升级,内核的漏洞逐渐被补上,所以通过这种方法越来越难以获得root权限了。既然从漏洞来获取root权限越来越难,那么很多人就把目光放在了第三方ROM包上面,很多第三方ROM包都自带了root权限,直接刷入这些包就能获得root权限。手机厂商也没有视而不见,在OTA升级时使用Recovery对包签名进行验证来防止用户刷入修改过的包。不过还可以通过fastboot(fastboot比recovery更加底层,即引导模式)来进行线刷。现在很多厂商都锁了bootloader,如果真有需要,需要去申请解锁才可以。
详细的root漏洞可以见这里。目前市面上很多一键root软件,基本原理其实就是上面的这些,大部分都是:
- 利用内核的漏洞暂时提权,获取到root权限
- 使
/system/bin/目录可写,并拷贝su到/system/bin/下 - 将授权管理的标准Android软件包(
Superuser.apk)复制到手机并安装,该apk和su就可以相互配合获得root权限了。
设备占有率调查
根据网上数据,国内各家厂商的设备占有率如下:
前五的占比如下:
| 品牌 | 占比 | root情况 |
|---|---|---|
| 华为 | 22.89% | 需要官网填写信息申请解锁bootloader |
| 小米 | 14.84% | 开发版ROM自带root |
| 荣耀 | 13.18% | 需要官网填写信息申请解锁bootloader |
| vivo | 11.71% | 刷第三方ROM |
| oppo | 10.42% | 刷第三方ROM |
| 总计 | 73.04% |
显然从总体上来说,除了华为系的设备需要去官网填写信息并且解锁bootloader以外,其他的设备都是比较容易root的。并且华为的申请也不难,只要设备确实是本人的,也很容易申请下来,之后就可以root了。
基本上现在(2020年)的设备,想要Root还是很简单的。
一般Root流程
不得不承认,随着技术的飞速发展,之前的Superuser.apk + su的组合已经成为了过去式,目前主流的应该都是应用的一个叫Magisk的“框架”来进行的。
还记得前言里面写的吗?安全与方便就像鱼和熊掌一样,但是Magisk可以说在一定程度上解决了这个问题。本质上,Magisk就是挂载了一个自己定义的分区,然后所有的改动都在这个分区里面进行,完全不影响系统分区。这样,如果应用需要获取设备的信息,那么可以选择让它去你想要它获取设备信息的分区中获取;这样OEM厂商进行完整性检查也完全没有任何问题。
从上面的叙述中可以看出,Magisk几乎不会对原有的系统有任何的影响,也就是几乎没有侵入性,不会对系统文件进行直接修改,这也是它深受人们喜欢的原因。