刷机原理和方案优缺点分析

目录

1、前置

1.1 什么是bootloader

1.2 什么是recovery

1.3 什么是Root

2、刷机的方式

2.1 卡刷 (recovery)

2.2 线刷 (fastboot)


1、前置

通用 Root 流程是:

解锁 BL - 刷 REC - 线刷或卡刷刷入 SuperSU 或 Magisk

详细一点:

  1. 解锁 Bootloader

  2. 用手机数据线连接手机按组合键进入 Fastboot 模式,使用 adb 命令行下刷入 第三方 Recovery:TWRP

  3. 卡刷:按组合键进入 Recovery 模式(TWRP),刷入 SuperSU.zip 或 Magisk.zip 获得 Root 权限,或者刷入 ROM 包.zip 重装手机系统

  4. 或线刷:数据线连接手机、电脑,按组合键进入 Recovery 模式(TWRP),在高级选项里开启 sideload 模式,在电脑上 cmd adb sideload *.zip 相比较优点是:不需要把包传到手机内存中)

1.1 什么是bootloader

在嵌入式操作系统中,Bootloader(系统启动加载器) 是开机载入程式

最主要的作用是引导系统正确启动,它是 Android 操作系统(包括控制台)和手机硬件的桥梁,类似电脑里面的 BIOS (Basic Input and Output System)。手机开机时,会启动Bootloader 去启动放在 ROM 里面的核心完成手机的开机过程。

为了避免 Bootloader 读到非官方 ROM, 一般会在 ROM 里面加密、或是有特殊的程序,让Bootloader 可以借此分辩是不是官方 ROM,限制你直接从 Fastboot模式下加载、改写系统分区的一个锁定。

解锁就是就是让Bootloader 跳过这个流程。解锁 Bootloader 后,还可以刷新内核、刷 ROM、修改超频...

一旦放开 BL,OEM 厂商(Original Equipment Manufacturer)会遇到一些麻烦:

  • 合约机的运营商在这部分的利益会受到极大挑战

  • 用户自行刷第三方固件后,厂商将在一定程度上沦为纯粹的制造商,而丢失自己的研发基因

  • 用户刷的 ROM 的稳定性难以保证 所以,OEM 厂商通常在出厂时锁定手机的 BL。

所以基于以上种种各家的解锁BL的方式存在很多差异,这个需要根据具体的厂商具体探究

有些人将 Unlock Bootloader 说成刷机模式,但准确来说解锁 Bootloader 是刷机的基础,Bootloader 正好处在开机与进系统的中间阶段,真正实现刷机的是在解锁 Bootloader 之后安装 Recovery(类似于 Ghost)

1.2 什么是recovery

Recovery(以下简称 REC) 是 Android 手机备份功能,官方的 Recovery 在系统更新时都会启用。

为什么刷入第三方的 REC?

  1. 在使用 REC 装系统的过程中,会对刷机包的数字签名进行校验。因而第三方 ROM 是无法通过官方 Recovery 刷入的。

  2. 官方的 REC 一般限制较多 (只能刷入官方的固件、补丁、更新等等), 而第三方的 REC 除了能任意刷入第三方 ROM ,还能调整分区大小

所谓第三方 Recovery,也就 CWM 与 TWRP 两款 REC,以及坊间基于它们的各种改款。不过 CWM 已在几年前停摆,目前刷机界是开源的 TWRP 家族独大。TWRP 全称 Team Win Recovery Project,是一个开源社区项目

关于如何刷入第三方recovery这里也不做探讨

1.3 什么是Root

Linux 中,我们只需要打上 su 命令,就可以拥有 root 超级权限。基于 Linux 内核构建的 Android 系统管理员用户就是 root,该帐户可以访问并修改手机中几乎所有的文件

su 是运行环境变量 PATH 下面的一个可执行文件,运行之后,当前用户就会被切换到 Root 用户。未 Root 的安卓系统没有 su 这个文件,所以 Root 一个手机,就是将 su 文件放入到系统运行环境变量 PATH 下面

一键 Root 利用了手机的系统漏洞对进程提权放入su 文件。随着安卓系统的发展,这些漏洞被逐渐修复,早期寻找系统漏洞的方式在大多数机器上无法被使用

这时候,我们可以利用第三方的 Recovery 将 su 程序放入系统文件夹

相信像我一样,你小小的脑袋里满是疑惑:为什么几年前 Root 无比简单,下载 KingRoot 就能一键 Root,越变越难:

- Android 2.2 被广泛利用的系统提权漏洞是 zergRush

​- Android 4.2 以后需要通过 native service 拉起 su daemon 之类的服务进程才能正常使用 root 相关功能。

- Android 5.x 以后更需要搞定 SELINUX 才能正常使用 root 相关功能,Google 在新系统中强制开启了 SELINUX,新设备也会默认自动开启加密。正因如此,大量甚至几乎全部已有的 root 方式都失效了,无法在启动时获得 Superset 超级用户权限。新的授权管理一般都带有类似 seinject 的功能来注入安全策略,依靠替换系统服务如 zygote 等 native service。

而现今root的方式一般是使用 superSU(2017年已停止维护了)和Magisk,有感兴趣的可自行研究,这里不做展开

2、刷机的方式

2.1 卡刷 (recovery)

平时的手机系统升级,就是卡刷的一种。手机进入 Recovery 模式写入固件压缩包来更新、升级;或是直接进行 OTA 更新。

卡刷本质是 对系统文件替换的过程,不会重新刷写整个分区,只是替换部分系统分区文件实现软件版本升级、更换第三方操作系统。即 ROM 包,它一定是一个 zip 压缩文件,打开卡刷包后里面一般都会有 system 和 META-INF 、boot.img (内核) 等文件与文件夹。

2.2 线刷 (fastboot)

手机连接电脑,用 Android 调试桥接器 (ADB) 直接将 固件、系统底层、驱动程序 等等写入手机,如 Fastboot 模式

线刷是通过数据线连接电脑来进行刷机、系统底包。是手机生产厂商的一种升级方式,针对智能手机系统问题或非硬件损坏的手机故障来刷写固件, 替换和覆盖各个分区  ,使手机功能恢复正常。一般是 tg 压缩文件,里面是一大堆 img 文件,某些底包里也有文件夹

          // 进入到bootloader

       exec("adb reboot bootloader", flashTransportClient, deviceId);

       log.info("deviceId:{}已进入到bootloader模式,15s后开始刷机", deviceId);

       try {

           TimeUnit.SECONDS.sleep(15);

       catch (InterruptedException e) {

           throw new RuntimeException(e);

       }

       List<FlashFileContext> flashFileContextList = null;

       try {

           flashFileContextList = listFlash();

       catch (IOException e) {

           throw new RuntimeException(e);

       }

       for (FlashFileContext flashFileContext : flashFileContextList) {

           // 依次刷入不同分区镜像

           exec("fastboot flash " + flashFileContext.getPartitionName() + " " + flashFileContext.getFileName(), flashTransportClient, deviceId);

       }

       try {

           TimeUnit.SECONDS.sleep(15);

       catch (InterruptedException e) {

           throw new RuntimeException(e);

       }

       // 重启 进入系统

       exec("fastboot reboot", flashTransportClient, deviceId);

       System.out.println("刷机流程完毕");

一句话总结下:卡刷可以进行简单的刷机和系统更新等操作,线刷则可以进行更深度、更敏感的操作。 线刷彻底,卡刷方便.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青春~飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值