都什么年代,还在用传统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?

后记

后记

讲座就没来几个人 >_<