整理了一些我了解 Android root 过程中看过的文章。
抽出了一些我觉得必要的部分写在这里,相信看完至少能对谈及的几个系统or框架有个宏观的了解。

解锁Bootloader

限制我们获取root权限的第一步是Bootloader锁。

手机开机时,最先运行的小程序就叫做bootloader(PC的BIOS+引导?),我们用它来进行开机自检和初始化手机硬件,它会指引手机找到系统分区并启动操作系统,相当于电脑上的BIOS.

通过bootloader,我们可以启动正常的操作系统,也可以启动recovery系统(什么是recovery系统?下面讲)


厂商通常会对手机的bootloader上锁,这样它就只能运行厂商认证过的操作系统和recovery了。如果boatloader发现要运行的系统不是指定的系统,就会阻止它运行。

对bootloader解锁,意味着我们可以运行第三方的操作系统和recovery。

Bootloader的解锁方式有两种,官方解锁和强制解锁。

  • 很多手机厂商提供了官方解锁的方式,可以去手机官网发邮件或者通过论坛申请解锁boatloader
  • 但有些手机不支持官方解锁,我们有一些别的民间方法强制解锁,具体方法可以自行搜索手机品牌+手机型号+解锁bootloader

# 获得Root权限的原理

参考:

  • 学会Root,让你的安卓更快更强(上)
  • 学会Root,让你的安卓更快更强(下)

熟悉 Linux 的童鞋都知道,我们只需要打上 su 的命令,就可以拥有管理员权限。

su是运行环境变量PATH下面的一个可执行文件,当任意软件运行su时,软件的权限就会被提升到Root权限。

未Root的安卓系统是没有su这个文件的,所以Root一个手机,就是将su文件放入到系统运行环境变量PATH下面。 之后软件运行su程序,就可以提升到Root权限。

通常在PATH下的目录有:
/sbin
/vendor/bin
/system/sbin
/system/bin
/system/xbin
一般把su文件放到/system/xbin

我们先来看一段古老的代码:

cp /data/tmp/su /system/bin/ #(copy su 到/system/分区
chown root:root su #(su的所有者置成root
chmod 4775 /system/bin/su #(把su置成-rwsr-xr-x

(su即supersu,超级用户的缩写 r代表该文件可读,w代表可写,x代表可执行,-就代表没有该权限)

这段代码的作用是获取root

可是若要修改system分区 就必须先获得ROOT权限 然而这段代码就是用来获取ROOT权限的 这样就进入了死循环。

聪明的开发者们想到了许多种方法

# 如何Root?

目前常见的方式有以下两种:

  • 一键Root工具
  • 刷入第三方Recovery,再刷入SuperSU.zip/再刷入已经含有Root权限的ROM包

一键Root 工具(利用系统漏洞)

我们刚刚说过,Root一个手机,其实就是把su文件放入安卓系统文件夹/system/xbin

首先要解决的问题是,安卓系统文件夹对于普通用户来说,只能读不能写。作为一个普通用户,我们是怎么将一个su文件放入系统文件夹呢。

方法就是,利用系统漏洞,将某一个进程提权到Root权限,并利用它将su文件放入到系统文件夹

一键Root就是使用的这种方法

  1. 首先利用系统漏洞获取某个进程的Root 权限
  2. 使/system/xbin/目录可写,并拷贝su到/system/xbin/
  3. 拷贝并安装Root权限管理器

下面说说一键Root的好处和坏处

  • 好处:简单,易懂好,操作
  • 坏处:很多机型无法Root,即使是同一个机型,效果也不稳定,有时候可以Root成功,有时候无法Root成功。甚至有时候软件显示成功,其实并没有成功。Root失败之后,还有可能导致死机,无法开机,变砖块等随机问题。

而且一键Root利用了手机的系统漏洞对进程提权放入su文件。随着安卓系统的发展,这些漏洞被逐渐修复,早期寻找系统漏洞的方式在大多数机器上无法被用。
这就是为什么刷机党们很少采用一键Root

(利用第三方Recovery

今天,最常用的方法就是卡刷,安全高效,进入recovery执行代码。

Recovery? SuperSU?ROM包? 这是些啥玩意?

我们先来复习一下

Root就是赋予手机管理员权限
本质就是将su程序放入手机系统文件夹下面
而难点在于系统文件夹没有管理员权限,可读不可写,我们无法轻而易举地把su文件放在里面
这时候,我们可以利用第三方的Recovery将su程序放入系统文件夹

什么是Recovery?

一个安卓系统有以下不同的分区

  • /boot
  • /system 分区包含系统主体文件
  • /recovery 分区里放的是recovery.img 镜像文件
  • /data 分区包含APP的安装包APK文件和相应的数据
  • /cache 分区包含缓存文件放在cache分区
  • /misc

Recovery像是一个独立的微型系统,可以不依赖于安卓操作系统主体单独运行。Recovery的中文名是恢复,顾名思义,当手机系统文件被损坏从而不能正常启动时,我们可以进入recovery小系统对主体系统进行修复。

手机正常启动时,我们进入的是普通的操作系统。但是通过手机厂商预设的组合键(通常是电源+音量加),我们可以进入recovery 系统。

进入recovery 系统之后,我们可以对安卓主体系统进行自由管理
但手机本身是自带厂商的官方recovery的,这个recovery功能较少,一般可以清除缓存,擦除所有数据,刷入官方指定的系统
如果我们有第三方的recovery ,就可以实现更多功能,例如调整分区大小,进行文件管理,还有刷入SuperSU.zip以及第三方的ROM 包。

目前最最好用的第三方Recovery叫做TWRP (TeamWin Recovery Project ), 它是由国外android爱好者开发的一款工具 ,可以从以下网址下载
https://twrp.me/

软件授权管理

但如果每个应用都拥有root权限,那手机还有什么安全可言?

因此,出现了软件授权管理工具 SuperSU和Magisk 。

什么是SuperSU?

SuperSU由国外大神开发,是全球用户都在用的授权管理软件。

分为APK(安卓手机应用)ZIP(文件压缩包)两个版本。

  • ZIP为用户提供了Root的安卓设备的解决方案,市面上全部机型的Root权限获取与管理 ;
  • APK主要功能是对已获得Root权限的设备进行进行权限管理。

到SuperSU 的官网,我们就可以看到apk文件和zip文件

SuperSU 的变味

参考:

  • 还在用SuperSU权限管理器root手机?supersu v2.80或藏杀机
  • SuperSU殿堂级大神退役

由于SuperSU被收购和新兴框架的出现(Magisk提供的新的root解决方案),现在网上关于SuperSU的讨论基本停在了2017年末。

实在想试下,这篇文章值得参考: 如何用SuperSU和TWRP来root安卓手机

Magisk vs SuperSU

参考:

  • Magisk vs SuperSU

在Android世界中,Magisk是新手,SuperSU是老手。这两种流行的工具可用于某些相同的事物,但是它们的工作方式截然不同。

  • 首先,让我们谈谈SuperSU如何获得root权限。SuperSU更改系统文件并将新文件添加到linux的系统分区。

    在Google加强安全性之前,这种方法一直有效,直到Android Marshmallow出现。修改系统分区会向尝试检测根目录的应用发送红色标记。Google SafetyNet是一个用于监视系统的API,如果检测到篡改,它将阻止某些应用程序运行。您不能将Google Pay或Netflix与SuperSU一起使用。修改系统后,您也不会获得任何 OTA(Over The Air Updates, 无线下载 )更新 。

  • Magisk被称为“systemless” root ,因为它不涉及任何这些系统文件。

    它修改启动分区,并保留了系统文件。这种修改只是虚拟地覆盖在原始文件上。当某些东西请求系统文件时,修改后的版本将被发送到magisk指定的位置。但是由于所有系统文件都是完整的,因此可以欺骗SafetyNet认为一切正常。应用仍然可以在有被root的手机上运行。

模组化
Magisk的一个功能是SuperSU不包含的。Magisk Manager应用程序允许用户对root权限进行管理,同时他还是一个模块库。“模块”是一些可以被安装的rom,可以做很多很cool的事情。

比如Active Edge自定义,表情符号替换,RAM管理修复,Camera2API启动器等等。

SuperSU没有内置模块,但是拥有root用户可以让您使用Xposed等其他框架来安装mod。

开源和闭源
两者之间的另一个大区别是开源与开源。SuperSU是封闭源,而Magisk是开放源。开源的伟大之处在于任何人都可以查看Magisk源代码。而SuperSU于几年前出售给一家名为CCMT的公司后就闭源了。有些人不喜欢使用陌生公司的封闭源软件不难理解。

毕竟Android是建立在开放源代码模型上的,这使很多人更喜欢Magisk的方法。(尽管大多数人不会去看他开源出来的代码。。)

Magisk原理

参考:

  • 每个 Android 玩家都不可错过的神器(一):Magisk 初识与安装

Magisk原理和下面要讲的Xposed很像。二者的工作机制都是「拦截」。

  • Xposed 通过劫持 Android 系统的 zygote 进程来加载自定义功能,这就像是半路截杀,在应用运行之前就已经将我们需要的自定义内容强加在了系统进程当中。

  • Magisk 则另辟蹊径,通过挂载一个与系统文件相隔离的文件系统来加载自定义内容,为系统分区打开了一个通往平行世界的入口,所有改动在那个世界(Magisk 分区)里发生,在必要的时候却又可以被认为是(从系统分区的角度而言)没有发生过。


Magisk 的实现方式就像是一种魔法,当被挂载的 Magisk 分区被隐藏甚至被取消挂载时,原有系统分区的完整性丝毫未损,玩需要 root 验证的游戏、运行对设备认证状态有要求的应用甚至进行需要验证系统完整性的 OTA 更新都没有任何问题。

因此严格来说 Magisk 可以被看作是一种文件系统,这种文件系统通过巧妙的实现方式避开了对系统文件的直接修改,从稳定性上来看要优于以往任何一种系统框架,这也是当前它在玩机社区广受认可和好评的原因所在。

它的魔力不止于 root

很多人对 Magisk 的初步认识可能是 root ——在 SuperSU 销声匿迹之后,它自然而然就成为了当前 Android 社区用来获取 root 权限的主流方式。

不过 Magisk 特殊的运作机制还赋予了它相较于 Android 平台其他定制工具而言独一无二的特质——systemless。这种 systemless 特质让 Magisk 拥有了获取 root 权限之外的诸多优势:

  • 一方面,得益于独特的挂载机制,使用 Magisk 时我们可以有针对性地隐藏 root,甚至暂时隐藏 Magisk 本身。

    如此一来,不仅「root 模式下使用特定应用」成为了可能,就连无缝 OTA 更新这种「魔改党」们想都不敢想的事也变得不再遥远。在 Magisk Manager 应用的设置中,我们甚至还可以用随机包名对 Magisk 进行重新安装,让它从其他应用的眼皮底下彻底消失——多么具有魔法特质的高明手段!

  • 另一方面,挂载系统的存在,也让 Magisk 拥有了多样的模块化生态系统。

既然用了「开外挂」的实现方式,那不妨就多挂载一些额外的东西,字体、音效、驱动……甚至 Xposed 本身。Magisk 提供了一个独立于系统分区以外的、可以随时隐形的「沙盒」,那自然不能将其才华禁锢于 root 这一件事上。在 Magisk 的模块仓库里,我们可以找到各式各样的模块(modules)来满足自己的定制化需求,借助这些模块,我们在 root 之后能做的事情其实也还有很多。

在这里的讨论语境下,Magisk 如何给人们留下「框架」这一认知误区的原因就浮出水面了。只是功能方面好不逊色的 Magisk,稳定性和上手门槛对大部分用户来说都更加友好。

如何安装 Magisk

作为一套复杂的文件系统,Magisk 的安装步骤却是十分简单。

视频:https://www.bilibili.com/video/BV14i4y1t7mS?from=search&seid=1656913929162768577

在电脑上配置好 adb 环境 并解开 Bootloader 锁后(自行搜索手机品牌+手机型号+解锁bootloader),如果你的设备有来自 TWRP 的官方支持,只需在打开 USB 调试后将手机与电脑相连,然后打开电脑端的命令行窗口:

  1. 执行 adb reboot bootloader 进入 Bootloader 界面
  2. 执行 fastboot boot TWRP.img 进入临时 TWRP
  3. TWRP 中刷入你下载的 Magisk 安装包

没有官方 TWRP 支持的设备安装 Magisk 的步骤要稍微复杂一些:

  1. 从你的刷机包中提取当前固件的 boot.img 文件,将它传入到安装了 Magisk Manager 的手机中
  2. 进入 Magisk Manager —— 安装(install)—— install —— 修补 boot 镜像文件
  3. 然后选择传入的 boot.img 文件进行生成,并将生成后的 Patchedboot.img (姑且这么命名) 传输到电脑上。

随后我们使用 Magisk 应用对 boot.img 进行重新打包:
8. 打开命令行窗口
9. 执行 adb reboot bootloader 进入 Bootloader 界面
10. 执行 fastboot boot Patchedboot.img 来加载生成后的 boot 分区文件获取临时 root

此时进入系统,你会发现你已经成功安装了 Magisk(如果显示没有安装则为获取失败,请检查操作过程重新尝试),但这还不够,我们还得进入 Magisk Manager,选择安装(install)——install——Direct Install(直接安装)才能将临时 root 转换为永久 root。

三星、华为等特殊机型的 Magisk 安装方法参见 Magisk 官方帮助文档。

安装完 Magisk 后,我们就可以通过 TWRP 或者 Magisk Manager 刷入获取到的模块了。模块的获取方式可以是 Magisk Manager 自带的模块仓库,也可以是其他第三方论坛(如酷安、XDA 等)。

卸载 Magisk 最为彻底的方式就是在 Magisk Manager 中点击「卸载」、「完全卸载」,应用会自动下载刷完 uninstall.zip 卸载包、自动卸载它自己、自动重启。如果你无法进入系统,在 TWRP 中手动刷入 uninstall.zip 卸载包即可。

至于哪些模块值得刷,就是完全看个人需求了。

Xposed原理

Xposed与root关系并不大

我们常常能看到自动抢红包插件 破解应用

这些软件的运行都需要Xposed框架

先上概念

原理:劫持Zygote进程及其创建的虚拟机,拿自己的app_process覆盖掉Android原生提供的文件,app_process在启动过程中会额外加载XposedBridge.jar这一个包,从而改变APP的运行结果。

(看不懂没关系 下面详解

Zygote进程:追溯到开机的一瞬间 【Zygote进程】在内部会先启动【Dalvik虚拟机】,加载一些必要的系统资源和系统。在系统启动脚本system/core/rootdir/init.rc文件中,我们可以看到启动【Zygote进程】的脚本命令:

import /init.${ro.zygote}.rc

app_process:app的启动程序。 【zygote fork()】调用一个 【app_process】作为app的载体(细胞核叫一个蛋白质作为营养物质的载体,物质在载体上才能被运输,app也是一样,有载体才能顺利运行),xposed会把系统自带的【app_process】文件替换成【xposed app_process】

再来看一遍概念:劫持Zygote进程及其创建的虚拟机,拿自己的app_process覆盖掉Android原生提供的文件,app_process在启动过程中会额外加载XposedBridge.jar这一个包,从而改变APP的运行结果。

Xposed劫持了Zygote进程。原本是zygote调用【app_process】来运行程序,现在有了xposed后,zygote调用【被xposed替换后的app_process】来运行程序,使得程序在开启时,额外加载一个jar(可理解为游戏Mod),从而改变APP的运行结果。

什么是ROM包?

华为,小米,OPPO等都是安卓手机,但它们的系统又各不相同。
华为手机的系统叫做EMUI,小米手机的系统叫做MIUI, OPPO的操作系统叫做ColorOS。
但是,这些系统本质上都是基于安卓系统的,他们对安卓系统进行优化和定制化,加入自己特有的APP和服务。
比如我们看到很多华为手机出厂就自带华为APP,这些就是 定制化之后的安卓系统 , 这些安卓系统就叫做ROM包

ROM包(ROM image)只读内存bai镜像
ROM(Read-Only Memory)就是和RAM(Random Access Memory)一对的那个ROM

如何通过第三方Recovery进行Root

所谓的刷ROM或者刷机,指的就是重装手机操作系统。刷机的步骤主要分为以下三部:

  1. 解锁bootloader
  2. 刷入第三方recovery
  3. 刷入SuperSU.zip 或者ROM包

Android - Bootloader? root原理?Recovery? SuperSU?Magisk?Xposed?ROM包?这都啥玩意?相关推荐

  1. 【Android】Android获取root原理

    [Android]Android获取root原理 背景 逆向爱好者绕不开的操作,root权限才能最大范围对调用链的控制. 相关知识介绍 root权限 在 Android 操作系统中,root 权限是指 ...

  2. 一文带你了解android的root原理

    1.root背景 android环境下,刷机与Root是Android手机逆向爱好者最热衷的事情.即使国行手机的用户也不惜冒着失去保修的风险对Root手机乐此不疲. 2.Root的解析 **Root是 ...

  3. 【转】Android的root原理

    转自知乎:https://www.zhihu.com/question/21074979 @Kevin @张炬 作者:Kevin 链接:https://www.zhihu.com/question/2 ...

  4. Android手机一键Root原理分析(作者:非虫,文章来自:《黑客防线》2012年7月)

    之前几天都在做Android漏洞分析的项目,万幸发现了这篇文章.废话不多说,上文章! <Android手机一键Root原理分析> (作者:非虫,文章来自:<黑客防线>2012年 ...

  5. AVD Android虚拟设备root教程

    AVD Android虚拟设备root教程 准备工作 superSUAPK文件 自行百度 xposed installerAPK文件 下载地址 superSUZIP文件 下载地址提取码cg08 与an ...

  6. note4x rom android p,红米Note4x安卓8.0刷机包

    红米Note4x安卓8.0刷机包是第三方ROM团队Lineage OS推出的一款安卓8.0刷机包,红米Note4x的米粉们解锁Bootloader以后即可刷入新系统,想要快速拥有红米Note4x安卓8 ...

  7. Nexus5恢复官方系统,刷Recovery,刷Xposed框架,获取Root权限

    谷歌官方不在对Nexus5手机升级最新的Android7.0系统,但是在XDA论坛上已经有开发者制作了第三方刷机包.刷机之后体验了一段时间,就没怎么用了.后来出现了闪屏的现象,无法判断是否是因为升级系 ...

  8. Android 的提权 (root) 原理是什么?

    转载自:http://www.zhihu.com/question/21074979 Kevin 赵宏彬.师子越.杨振海  等人赞同 Android的内核就是Linux,所以Android获取root ...

  9. Android ROM定制 入门到精通(含改机、移植、破解网络层、root原理、植入hook框架,反安全监测等)

    最近在定制一款ROM,拉取谷歌源码,解包.精简.修改.打包.想要实现MIUI一样的效果和国人常用的功能设置和手势. 在这个过程中遇到了很多疑难问题,也发现公司刚招来的这些小孩基础太差,而且他们根本不知 ...

  10. Moto P30(XT1943-1) 免解锁BL 免rec 保留数据 Magisk Xposed ROOT 救砖 ZUI 4.0.374

    >>>重点介绍<<< 第一:本刷机包可卡刷可线刷,刷机包比较大的原因是采用同时兼容卡刷和线刷的格式,所以比较大 第二:[卡刷方法]卡刷不要解压刷机包,直接传入手机后 ...

最新文章

  1. 图像处理:图像中噪声分布和概率密度函数的关系
  2. DCMTK:OFStandard类中的ASCII /双转换方法的测试代码
  3. 2021-07-30
  4. grubbs准则 matlab_MATLAB-格拉布斯准则(MATLAB-Grubbs criterion)_0
  5. 数据库索引的概念和分类
  6. 74系列标准逻辑集成芯片分类
  7. 【软件工程】数据库设计说明书
  8. openg和VS2010的环境配置
  9. PG数据库按照30分钟时间片统计数据
  10. 计算机基础晦涩难懂?那你是没看他的图解文章!
  11. Tensorflow的基本使用方法
  12. 目前收益比较好的广告联盟和广告方式
  13. python爬虫——图片
  14. 肉鸡的俘虏!一个菜鸟******的自白
  15. 抖音赛道是啥?有什么逻辑?
  16. 2020年程序员技能展望:平均年薪5.4万美元,JavaScript与Python最受欢迎
  17. 我是个程序员今年33岁还在写代码,不想干这行,该做些什么好?
  18. esp32之wifi状态机
  19. html微信拆红包,用React加CSS3实现微信拆红包动画_html/css_WEB-ITnose
  20. 山东临沂花5600万打造网络商城,企业如何花小钱建网站?

热门文章

  1. 最近火爆全网的猫猫回收站教程,小七给你们搞来了
  2. selenium 能定位成功 不能输入 和点击的解决办法
  3. 计算机教程无线路由器桥接上网,两个无线路由器怎么桥接?如何桥接两个无线路由器...
  4. 第四讲:学习理论(Learning Theory)
  5. 2013蓝桥杯 CC++程序设计本科B组 第39级台阶
  6. 有了LSTM网络,我再也不怕老师让我写作文了
  7. 什么是微信SCRM客服系统
  8. JS JavaScript 实现文字上下滚动效果
  9. ubuntu18.4解决问题: Installation failed. See log at /var/log/cuda-installer.log for details.
  10. 如何发个 微信九宫格 朋友圈?