This is the solution!
KernelSU是维术老师开发的,在内核层次上的root解决方案。
单拿出来这句话可能比较抽象,为了理解这一方案的牛x性所在,我们可能需要先来简要介绍一下已有的root机制。
Root的过去
在类Unix系统中,一切皆文件。文件结构通过某种树状的机制组织起来,并且最终归于一个起源:根目录,root。
这个根目录的修改权限是较为敏感的系统操作,同时考虑到系统安全性与稳定性,也是一般不会为普通用户开放的权限。
这时,为了更高的系统可玩性,用户可能会去获得这个权限。在多用户机制中,得到这一权限的用户被称为root用户。
安卓系统本质上是Linux的魔改版本,因此,安卓系统的root也是一种必然发展。
root的本质可以被总结为获得最高权限,这一最高权限包括了所有硬件以及一部分的CPU指令。
以AArch64架构为例,CPU有如下图所示的四个特权等级:EL0~EL3。
在当前的root实现中,它们一般能在EL0上执行任意指令,只有在某些情况下可以在EL1上执行任意指令。
我们可以看到,EL1也不过对应了操作系统的水平。
维术老师解释说:root用户是操作系统的概念,因此root权限顶多是操作系统中的最高权限。在我们的类Unix系统中,它仅能触及EL1也就不算奇怪了。
在这种情况下,我们需要一个EL1 root!
KernelSU为什么可以实现?
维术老师认为,随着GKI(通用内核镜像计划)的出现,内核的碎片化会逐渐消失,我们完全可以通过修改内核的方式去获取EL1root。
其实,早在2018年,就有XDA的网友提出了这一概念。不过,以往来说,安卓系统内核的碎片化使得内核层面的root需要针对不同机型单独编译。因此,如果我们希望大范围推广这一方法,在GKI2.0之前,这是不可能实现的事情。
而GKI2.0带来了内核的通用性,使得KernelSU的推广也成为了可能。
GKI:https://source.android.com/docs/core/architecture/kernel/generic-kernel-image
KernelSU的优越性在于什么?
最重要的一点:是基于Kernel的root方案,EL1 root!
“KernelSU主要工作在内核空间,而传统的ROOT如Magisk实际工作在用户空间。”
“KernelSU 可以提供针对内核的HOOK接口,你可以对内核中的几乎任意函数进行拦截;比如拦截系统调用,过滤openat、inofity等。内核级别的HOOK,意味着对所有所有进程完美的控制,除非你的对手也是 root 进程。”
更高的系统修改自由度,可以更方便地实现之前或许没有实现过的系统功能?
至少kali肯定爽翻了(
截至发稿时间,KernelSU已经即将实现模块支持了!虽然目前仍然有很多bug,但未来相当明朗。
KernelSU似乎并不能直接支持Xposed,或许未来会有更好的方法实现。
kernel在5.10之后的版本都将可以支持KernelSU,可惜我的kernel是4.19...
Kernel似乎是没办法通过个人开发者的努力实现升级版本的,看到大家build的时候都是在官方的开源基础上进行fix...
但是,“未来也许可以通过 static binary instrumentation 的方式 backport 到旧内核,就看有没有有缘人来实现了。”
KernelSU地址:https://github.com/tiann/KernelSU
维术老师github:https://github.com/tiann
写在最后
为什么要写这篇文章?
其实最后还是对于维老师文章的总结版本,可能在一些大佬看来还是很没干活的水平吧...
对于我个人来说,读懂大佬的文章已经很吃力了...再总结一遍也算是费曼学习法的一种吧
而且适当的精简或许会让更多朋友了解到这门神奇的技术?
看到这个项目的第一眼,我就觉得又要见证历史了。我有预感,这个项目会超越太极的水平,甚至于超越今天magisk的高度。
参考文献
维术-何为 root?
维术-KernelSU: 内核 ROOT 方案,来了!
维术-KernelSU:即将支持模块功能!
也欢迎大家关注维老师的微信公众号:虚拟框架
虽然维术老师更新频率不是特别高,但文章质量真的很高!