手机Root权限的操作方法 怎么root自己的手机

Root,对于任何手机发烧友、玩机客、从事移动设备研发的人员来说,并不陌生,它代表绝大部分移动设备的使用者能够掌握到的最高权限 。
从技术层次来讲,用户拥有了修改系统文件的权限,甚至可以控制账户、增加或删除硬件等,但对普通用户来说,最大的一个用处就是卸载“Root 之前无法卸载的软件”,部分品牌商在手机出厂之前内置安装了一些无法卸载的软件,这些软件在手机 Root 之后,都可以被卸载掉,Root 相当于让用户拥有了自由增减软件的权限 。
Root 的前世今生
Root 一词起源于 Linux/Unix 系统,众所周知,Linux/Unix 系统的文件系统以根“/”出发向下形成一个倒置的树型文件系统结构,Root 即根的英文释义,那么 Linux/Unix 系统就以 Root 账号所拥有的权限作为系统管理员的权限,口口相传,Root 就代表了 Linux/Unix 上最高的权限 。
在移动设备发展的初期,各种移动设备所使用的操作系统各不相同,比较出众的有塞班、Windows Phone、iOS、安卓 。随着市场的选择,只有安卓与 iOS 留存下来,成为普及的手机操作系统 。按照 POSIX 标准协议和开源协议的规定,安卓与 iOS 都应该保留了 Linux/Uinx 上的相应的功能 。
其中,安卓就是以 Linux 作为基础进行构建的系统,而 iOS 则是使用了以 xnu 为内核的 Darwin(Darwin 来自于 BSD) 。按照开源操作系统而言,安卓和 iOS 都理应保留所有用户使用 Root 账户去掌控自己设备的权限 。
但现实情况是,安卓与 iOS 不允许用户使用 Root 权限,尤其是 iOS 对于 Root 权限的监控与封锁达到了前所未有的地步,以至于对 iOS 的 Root 被称作“越狱” 。iOS 上的 Root 过程相对于安卓更为复杂与困难,所以本文主要以安卓系统的 Root 为主,详细介绍 Root 的前世今生 。
安卓系统的三大 Root 方式
相较于封闭生态的 iOS 系统,安卓的 Root 方式可谓是从百花齐放到万物归一 。不同安卓系统版本,获取 Root 权限主流方式不同 。

手机Root权限的操作方法 怎么root自己的手机

文章插图
在安卓手机上,获取 Root 权限主要有三种方式:漏洞、OEM 官方解锁、工厂方式 。其中通过漏洞方式获取 Root,是开发者最早的探索;工厂模式获取 Root 则是通过如骁龙 9008 模式通过底层串口将特殊的 ROM 刷写入手机进而获取 Root;官方解锁的方式则是 OEM 产商提供给一些发烧友的“通道”,通过解锁 Bootloader 锁获取刷写 ROM 获取 Root 。
第一阶段:百家漏洞齐争鸣,先驱 CVE-2009-2692 漏洞
在安卓系统早期时忽略了安全性问题,许多在 Linux 中产生的安全问题,都能在安卓得以复现,其中最早有公开记录并可追溯的是 Znix 利用 Linux 漏洞 CVE-2009-2692 编写的安卓版本提权程序,代码如下:
手机Root权限的操作方法 怎么root自己的手机

文章插图
利用蓝牙协议触发 sendpage 漏洞
手机Root权限的操作方法 怎么root自己的手机

文章插图
权限提升攻击载荷
该漏洞的产生主要是 sock_sendpage 没有对 socket_file_ops 数据结构的 snedpage 字段字段做指针检查,有些模块不具有 sendpage 功能,将指针初始化为 NULL,此时直接调用 sendpage 会导致直接调用空指针导致报错并进而进行权限提升 。Znix 直接将现有有效用户 id(euig)与有效用户组(egid)的指针赋值为 0 即 Root 用户与 Root 用户组,再将有效用户与有效用户组指针赋给真实的用户指针与真实的用户组指针,从而达到权限提升的目的 。然后利用蓝牙协议与 send_page 的漏洞触发这一攻击载荷 。
Znix 发布该 exploit 的时间点在安卓 _ndk_r1 版本发布后的两个月 。在该 exploit 发布后,人们发现在安卓上通过漏洞的形式获取 Root 权限方式大为可行,随即越来越多的安全人员与发烧友开始在安卓上挖掘系统漏洞,导致安卓的安全问题呈现井喷式的爆发 。不过这场闹剧随着 Google 不断的修复与 SElinux 的引入,闹剧在安卓 4.4 戛然而止,安卓系统进入了一个稳定的时期,安卓的 Root 也进入了一个新的探索时代 。
手机Root权限的操作方法 怎么root自己的手机

文章插图
使用 Linux 系统的人都知道,在 Linux 上有一个程序叫/usr/bin/su,用户可以通过 su 命令来切换身份,安卓的基础是 Linux,在安卓版本 1.0-4.4 中,安卓默认安装了 su 程序,使用者可以通过使用 su 进行获取 Root,只需要 su 程序的权限为 Access: (4755/-rwsr-xr-x) Uid: ( 0/ Root) Gid: ( 0/ Root) 。
第二阶段:混乱中的探索,supersu 与 superuser