root 指的是使用户取得 Android 操作系统的超级用户(Super User)许可权的技术。用户通过 root,可以越过手机制造商的限制,卸载手机制造商预装在手机中某些应用,以及运行一些需要超级用户权限的应用程序。同时,root 也可能会让手机变得“不安全”(并不是说 root 使手机变得不安全,而是一些用户的使用习惯会使 root 后的手机变得危险)。
一、基本说明
权限现状
但是从棉花糖(Android 6.0)开始,Google 基本阻止了以前版本中最流行的 root 方法 —— 即,将 su守护程序 放置到 /system 分区,并在启动时取得所需的权限。道高一尺,魔高一丈,于是就出现了 systemless 的 root 方式,因为它不采取任何方式修改 /system 分区。
刷机目的
- Android开发调试需要
- 系统定制与修改
环境声明
- Mac
- Pixel 2 XL
- Android 9
主要内容
- 刷机
-
- 设备解锁
- ROOT操作
-
- 刷TWRP
- 刷入面罩
- ROOT开发
-
- ADB安装
- 抓包
- 操作
基本了解
视频入门教程
资源下载
如果设备跟我的手机是一致的,可以使用我分享的资源(其它机型需要自己去收集):
- Pixel 2 XL Android 9
二、设备解锁
一般来说,在开发者选项中基本都有一个名为「OEM 解锁」的选项。除了少部分流入我国市场的国外运营商有锁机外,此选项基本都可供用户开启。
解锁 Bootloader 后会立即清空手机中所有数据,但这也是很多玩机操作必经的第一步,建议尽早开启。解锁 Bootloader 还意味着手机等私密设备的安全性大大下降,不少厂商也会在解锁政策上附加上不少条款。
一旦你确认你的fastboot连接没问题,即可运行解锁bootloader命令:
fastboot flashing unlock
复制代码
或者:
fastboot oem unlock
复制代码
你现在应该在手机上看到一个操作界面,要求你确认此操作,使用音量键滚动选择和用电源键确认你是否确定要继续。
允许该过程完成,然后键入此命令重启:
fastboot reboot
复制代码
成功解锁Bootloader!至此解锁bootloader加载程序后,每次手机启动时,你都会见到一条警告,这没有什么可担心的,这是正常的!
三、刷机
刷机包资源
Google Pixel
以Pixel2 XL
为例:
下载后的目录结构为:
刷机步骤
此处以Pixel2 XL
线刷为例,核心流程为:
- 打开设备调试模式
- 进入到
bootloader
界面 - 执行脚本刷机
打开设备调试模式
执行adb shell
可连接设备即为成功
进入bootloader
界面
方式一
将手机关机,同时按住电源键
+减量减
两个按键,手机也可进入bootloader页面下
刷机前的页面为:
方式二
可以链接ADB的情况下,执行:
adb reboot bootloader
复制代码
开始刷机
进入终端,CD到当前刷机包目录下,执行:
flash-all.sh
复制代码
接下来就是等待接近两分钟的时间:
四、刷面罩(Magisk)
什么是 Magisk
Magisk 是出自一位台湾学生 @topjohnwu 开发的 Android 框架,是一个通用的第三方 systemless 接口,通过这样的方式实现一些较强大的功能。Magisk 的厉害之处在于它实现了一种绕过 SafetyNet 使用 root 的方法。因为它不会以任何方式改变您的system分区。这意味着您仍然可以安装官方OTA更新,而不会丢失root。
功能
- ROOT权限获取和管理
比如我们的/system/xbin中没有su,我们可以通过刷入相应的模块,在系统启动初期,将su映射到/system/xbin下来获取root
- 挂载功能多样的各种扩展模块
如大家所熟知的替换系统字体、指纹特效、开机动画等等
支持的版本:Android 5.0+
实现原理
Magisk 本质上是一种文件挂载系统,magisk做的事情是通过boot中创建钩子,进而bind mount构建出一个在system基础上能够自定义替换,增加以及删除的文件系统,实际上并没有对 system 分区进行修改(即 systemless 接口,以不触动 system 的方式修改 system)。所有操作都在启动的时候完成,启动过程中magisk所做的事情:
1.准备阶段,将会把/data/magisk.img 挂到/magisk。同时它会遍历magisk目录中的模块是否为启用状态,并且记录。
2.创建骨架system文件系统(由于bind mount 必须要有一个目标文件才能进行bind mount),全部由mkdir 和touch构建
3.将每个标记为启用的/magisk/$MODID/system中文件bind mount到骨架系统
4.执行自定义模块中的脚本
5.遍历骨架中剩余没有被mount的文件,通过真正的system文件进行bind mount。
准备面罩
从 Magisk 22 开始,不再区分刷写用的 .zip 包与安装管理器用到的 .apk 应用安装包,二者合一且只有后缀的区别,默认提供 .apk 包,更改后缀为 .zip 后即可被刷写。
资源资源
传输到设备
adb push Magisk-v24.2.zip /sdcard/Download/
复制代码
刷TWRP(Recovery)
资源包
使用临时TWRP
执行命令前需要进入到bootloader
界面下,执行以下命名即可,执行后设备会自动重启,最后进到TWRP
的菜单下:
fastboot boot ~Downloads/twrp-3.6.0_9-0-raphael.img
复制代码
菜单效果:
安装面罩(Magisk)
菜单路径:install ->
此处安装之前存到/sdcard/Download/
的安装包,安装完成
重启系统,打开相关
四、应用
Magisk插件介绍
基于magisk可实现一些自定义的功能,插件就是按得是这个事情
插件开发
制作教程
模板文件
ADB Shell操作
挂载system分区
首先先adb shell
链接设备,再执行su
获取系统权限,这里还没有system
分区的写入权限,再执行:
#adb shell
#su
mount -o rw,remount /
mount -o rw,remount /system
复制代码
此时就有权限对system
分区进行写入啦!
查看保护文件
系统分区的文件一般用户无法查看,需要以超级用户权限操作,比如:
adb shell su -c "ls /etc/security/cacerts"
复制代码
请求抓包
从Android Nougat开始,默认情况下,应用不再信任用户证书。开发人员仍然可以通过在应用程序的AndroidManifest.xml文件中配置networkSecurityConfig属性来选择接受用户证书,但默认情况下,它们不再受信任。
抓包软件
抓包的基本使用方法就不说明了,以下有下载链接和配置。
证书配置
参考资源
获取证书HASH值
openssl x509 -inform PEM -subject_hash_old -in charles-ssl-proxying-certificate.pem | head -1
复制代码
生成HASH命名的文件,比如上面生成的Hash值为时,则:
cp charles-ssl-proxying-certificate.pem /etc/security/cacerts/92ac25d5.0
复制代码
拷贝数据到手机
adb push 6fbe4e0f.0 /sdcard/Download/6fbe4e0f.0
复制代码
拷贝到系统目录
由于sytem没有写入权限,先参考挂载system分区
,再执行
cp /sdcard/Download/92ac25d5.0 /etc/security/cacerts/92ac25d5.0
chmod 644 /etc/security/cacerts/92ac25d5.0
复制代码
最后重启设备,确认能否正常抓包!
ROOT应用
参考
topjohnwu大神的 ROOT操作库
应用
基于此基础库,比较容易就实现ROOT权限
的操作。
比如,我想实现一个快速拷贝证书到系统目录的操作,相关步骤如下:
- 生成证书的Hash值文件
参考请求抓包
- 直接操作系统文件
private fun deleteCertificate(sourcePath: String) {
var targetPath = "/system/etc/security/cacerts/" + sourcePath
Shell.cmd(
"su", "mount -o rw,remount /",
"mount -o rw,remount /system",
"rm -f ${targetPath}",
).submit { result ->
updateUI(
result
)
if (result.isSuccess) {
Logger.log("删除证书成功:${sourcePath}")
} else {
Logger.log("删除证书失败:${sourcePath}")
}
}
}
复制代码