Contents
  1. 1. What is root
    1. 1.1. root的原理
    2. 1.2. 判断手机是否root
  2. 2. How to root
    1. 2.1. 准备工作(Prerequisites)
    2. 2.2. 方法1:flash rooted boot.img
    3. 2.3. 方法2、在Recovery环境下安装SuperSU
    4. 2.4. 方法3、采用TWRP Recovery的OpenRecoveryScript引擎执行命令
      1. 2.4.1. 1、传输root文件至Android设备
      2. 2.4.2. 2、获取临时root权限
      3. 2.4.3. 3、创建openrecoveryscript文件
      4. 2.4.4. 4、写入openrecoveryscript文件
      5. 2.4.5. 5、启动TWRP Recovery环境

What is root

root的原理

破解Android root权限的本质是:

在系统中加入一个任何用户都可能用于登陆的su命令。或者说替换掉系统中的su程序,因为系统中的默认su程序需要验证实际用户权限,只有root和shell用户才有权运行系统默认的su程序,其他用户运行都会返回错误。而破解后的su将不检查实际用户权限,这样普通的用户也将可以运行su程序,也可以通过su程序将自己的权限提升。

判断手机是否root

通过adb shell连接至手机以后,执行su命令,如果无法执行,则说明该手机无root权限。

1
2
3
4
$ adb shell
shell@hammerhead:/ $
shell@hammerhead:/ $ su
su command not found

How to root

本文中用到的操作系统为Linux(Debian);Android设备型号为Nexus 5(HAMMERHEAD),Android版本为4.4.4(Build Num KTU84P)

准备工作(Prerequisites)

  • 配置Android调试环境:安装adb和fastboot工具,开启USB调试模式(USB debugging),建立手机与电脑之间的USB调试连接。
  • Android设备的Bootloader已完成解锁(unlocked)。
  • 下载已经完成root的boot.img,例如,CF-Auto-Root-hammerhead-hammerhead-nexus5.img
  • 下载第三方TWRP Recovery镜像包,例如,openrecovery-twrp-2.8.7.1-hammerhead.img

方法1:flash rooted boot.img

进行root操作,最便捷方式的便是刷入已经root过的boot.img对原有boot区域进行擦写覆盖。
对于Nexus设备,可以在CF-Auto-Root Repository网站上下载对应设备型号的镜像文件,该镜像中包含了SuperSU程序。

flash操作前,先将设备切换至fastboot模式。

1
$ adb reboot bootloader

fastboot模式下,在电脑的命令终端中执行如下命令。

1
2
3
4
5
6
7
8
9
10
11
$ fastboot flash boot CF-Auto-Root-hammerhead-hammerhead-nexus5.img
sending 'boot' (9222 KB)...
OKAY [ 0.525s]
writing 'boot'...
OKAY [ 0.787s]
finished. total time: 1.313s
$ fastboot reboot
rebooting...
finished. total time: 0.511s

采用fastboot flash boot XXX_boot.img进行操作时,手机会将XXX_boot.img下载至设备并对boot区域进行擦写覆盖,从而使手机获得root权限。即使手机再次重启,root权限仍然存在。

再次通过adb shell连接至手机,可以看见,现在已经获取到了root权限。

1
2
$ adb shell
root@hammerhead:/ #

方法2、在Recovery环境下安装SuperSU

该种方法的实现思路在于,给手机安装Custom Recovery,然后在recovery模式下手工安装SuperSU

具体的操作方式在《详解Recovery》一文中进行了介绍。

方法3、采用TWRP Recovery的OpenRecoveryScript引擎执行命令

对于2.1及以上版本的TWRP Recovery中,可以使用OpenRecoveryScript引擎,在TWRP Recovery启动时执行命令。

1、传输root文件至Android设备

在Android设备未获得root权限之前,具有Write权限的文件夹并不多,通常可将要写入的文件传输至/data/local/tmp/路径下。

1
2
$ adb push UPDATE-SuperSU-v2.46.zip /data/local/tmp/UPDATE-SuperSU-v2.46.zip
$ adb push busybox-signed.zip /data/local/tmp/busybox-signed.zip

2、获取临时root权限

由于后续操作中要向/cache/recovery/目录写入文件,需要用到root权限。针对这种情况,可以采用已经root过的boot.img进行启动,临时获得root权限。

首先,将设备切换至fastboot模式

1
$ adb reboot bootloader

然后,采用已经root过的boot.img进行启动。

1
2
3
4
5
6
$ fastboot boot modified_boot_hammerhead_4.4.4_KTU84P.img
downloading 'boot.img'...
OKAY [ 0.463s]
booting...
OKAY [ 0.110s]
finished. total time: 0.573s

此处与方法1的区别在于,这里只是临时地采用已经root过的boot.img进行启动,但并没有对boot分区进行写入。当手机重启后,仍然是采用原有的kernel进行启动。

3、创建openrecoveryscript文件

1
$ touch openrecoveryscript

openrecoveryscript文件中,写入如下内容。其中,zip软件包的路径要求是存在于Android设备中的完整路径。

1
2
3
4
5
# openrecoveryscript
set tw_signed_zip_verify 0
install /data/local/tmp/perm-recovery-signed.zip
install /data/local/tmp/UPDATE-SuperSU-v2.46.zip
install /data/local/tmp/busybox-signed.zip

4、写入openrecoveryscript文件

此处就是需要临时用到root权限的地方。

1
2
$ adb push openrecoveryscript /cache/recovery/openrecoveryscript
2 KB/s (169 bytes in 0.057s)

如果没有root权限,写入文件时会提示Permission denied

1
2
$ adb push openrecoveryscript /cache/recovery/openrecoveryscript
failed to copy 'openrecoveryscript' to '/cache/recovery/openrecoveryscript': Permission denied

5、启动TWRP Recovery环境

启动TWRP Recovery时,会执行/cache/recovery/openrecoveryscript文件中的命令,即安装SuperSU等root软件。

如果手机之前并未安装TWRP Recovery,也可以直接采用TWRP Recovery的镜像包进行启动,同样可以完成/cache/recovery/openrecoveryscript文件中命令的执行。

1
fastboot boot openrecovery-twrp-2.8.7.1-hammerhead.img
Contents
  1. 1. What is root
    1. 1.1. root的原理
    2. 1.2. 判断手机是否root
  2. 2. How to root
    1. 2.1. 准备工作(Prerequisites)
    2. 2.2. 方法1:flash rooted boot.img
    3. 2.3. 方法2、在Recovery环境下安装SuperSU
    4. 2.4. 方法3、采用TWRP Recovery的OpenRecoveryScript引擎执行命令
      1. 2.4.1. 1、传输root文件至Android设备
      2. 2.4.2. 2、获取临时root权限
      3. 2.4.3. 3、创建openrecoveryscript文件
      4. 2.4.4. 4、写入openrecoveryscript文件
      5. 2.4.5. 5、启动TWRP Recovery环境