当我们在谈论Root时,我们究竟在谈论什么?③
都什么年代,还在用传统Root?
放两张PPT图片。
让我们先来看看安卓的启动流程:
第二张图是我手画的,看起来方便点
名词解释:
-
BootLoader
用它来进行开机自检和初始化手机硬件,它会指引手机找到系统分区并启动操作系统,相当于电脑上的BIOS。
通过BootLoader,我们可以启动正常的操作系统,也可以启动Recovery系统。
-
Init
Android 启动的第一个用户空间进程,它的地位非常重要,它fork产生系统的一些关键进程,比如Zygote、Surface Flinger等。
-
Zygote
译为“受精卵”,在Android中,负责孵化新进程的这个进程就叫Zygote,其他的应用进程都是由它孵化的。
安卓系统上运行的一切程序都是放在Dalvik虚拟机上的,Zygote也不例外。
事实上,它是安卓运行的第一个Dalvik虚拟机进程。
-
Dalvik/ART虚拟机
Android程序运行的环境、
Dalvik: Android 4.0之前所使用的虚拟机
ART:Android 5.0中引入的虚拟机,意图取代旧的Dalvik以取得更好的性能。
安卓手机是怎么开机的?
首先,由Bootloader加载下一步要启动的镜像——一般的手机可以通过长按电源键和音量上/下键来进入Bootloader的切换。在这里,你可以进入官方Recovery等。Boot分区——顾名思义,就是负责启动(boot)手机的。在Boot分区里包含了Kernel和RAMDisk。
由boot分区,进行一系列的引导、自检……我省略了中间的过程。没问题的话,安卓系统会被加载,并且启动第一个进程——Init。一切如图中一般。
传统Root?
论Magisk为什么是神
新的开始:KernelSU
2022年12月,太极、两仪等软件的作者维术成功将该方案实现并于2023年1月在Github开源。
题外话
太极(Taichi)是一个无需Root就能让你使用Xposed模块的软件。虽然仅仅是模拟,但是并非VMOS那样的虚拟机,而是切切实实地注入应用。记得以前就这样子注入网易云之后听音乐
KernelSU和传统的Magisk相比,最大的特点,便是其工作在内核空间而非用户空间。这使得原本看起来不可能的事情——对内核进行Hook——成为了可能。
你可以对内核中的几乎任意函数进行拦截;比如拦截系统调用,过滤openat、inofity等。内核级别的HOOK,意味着对所有所有进程完美的控制,除非你的对手也是root进程。
除此以外,正因为KernelSU工作在内核空间,它可以完美地隐藏Root。经过测试,绝大多数应用都检测不出KernelSU的root。
更多的介绍可以在这里找到:何为 root?
后记
后记
讲座就没来几个人 >_<