小小小幸运 发表于 2024-7-22 01:14:22

安卓root详解(supersu,magisk原理说明)

原创:转载请注明!

root 的过去和现在

从 Android 诞生到现在,我们现实上所利用的 root 方案,大致为以下几种
系统毛病提权root

   远古时期,早期的安卓可以通过某些系统毛病提取,进而获取 root 权限;在安卓6.0之前,各种一键 root 软件满天飞,比如 kingroot,360 一键root等,他们本质上都是通过系统毛病来获取特殊权限;在安卓6.0之后,谷歌封堵了大量的毛病,各种所谓的一键 root 工具全都玩完,随着 Android 系统的进化与完善,这种通过毛病提权获取 root 的方式已经完全被镌汰了。
原理:早期root方案基本上是通过 SUID 实现的。SUID 是一个特殊的权限位,它的特殊之处在于,如果某个可实行文件设置了这个权限位,某个用户在实行这个文件的之后,启动进程的 uid 会被自动切换为文件所有者的 uid。
打个比方,假设我有个文件名叫 su,它的所有者是 root,其他进程有其可实行权限;如果没有设置 SUID,那么某个进程比如 uid 为 10000,在实行这文件之后,它启动的进程现实 uid 也是 10000,也就是一个普通进程;而如果这个文件有被设置 SUID 位,那么 uid 为 10000 的用户在实行这个文件之后,所启动的进程 uid 会被自动切换为文件所有者,也就是 root 用户,这个进程就是一个特权进程。
用这种方式实现 root 可谓是非常简单,只必要丢一个 SUID 的文件到系统里面就结束了。然而,Android 5 系统的安全性改进让这种机制退出了历史舞台。
这种机制着实非常简单,就是通过 capabilities 机制,给 zygote 的子进程限制了 CAP_SETUID;而我们的 Android App 都是 zygote 子进程,因此 App 从此与 SUID root 告别了。然而,我们的 shell 用户还是可以 SUID 的;某些系统中自带的 su 还是这种 SUID 的 root,在这种系统中我们会发现,adb shell 可以获取 root 权限,但是 App 进程死活无法获取 root,这时候可以看一下 su 文件是否有 SUID 位,如果有的话就是这个缘故原由。

SuperSu Root

   SuperSU 进行 Root 的原理重要涉及以下几个步调:
1. 刷入 Recovery:首先,用户必要刷入一个自定义的 Recovery,如 TWRP(Team Win Recovery Project),以便可以或许安装 Root 文件包。
2. 刷入 SuperSU:用户下载并刷入一个包含 SuperSU 的 zip 文件到 Recovery 中。这个 zip 文件包含了管理 Root 权限所需的二进制文件和脚本。
3. 替换 su 二进制文件:SuperSU 通常替换系统原有的 su 二进制文件,这是实行 su 命令(切换到超级用户)的步伐。SuperSU 的 su 文件会管理权限哀求,答应或拒绝应用步伐的 Root 访问。
4. 管理 Root 权限:安装后,SuperSU 会监控所有对 su 命令的调用,询问用户是否授权特定的应用步伐获取 Root 权限。
5. 日志记载:SuperSU 还记载了所有哀求 Root 权限的应用步伐,用户可以检察日志来了解哪些应用曾经尝试获取最高权限。

原理:
在安卓系统中,进程通过su命令可以将自身提权到root权限,但是原生SU步伐在设定中就把非root和非shell用户封死了,只有root用户和shell用户可以实行su命令,否则权限不足
//android/system/extras/su/su.c 
int main(int argc, char** argv) {
    uid_t current_uid = getuid();
    if (current_uid != AID_ROOT && current_uid != AID_SHELL) error(1, 0, "not allowed");SuperSU提供了别的一套su文件和对应的权限管理方案,使所有APP都可以调用su文件,同时必要经过supersu的允许;可以用到以下的文件:
   common/Superuser.apk
   ARCH/su
   ARCH/supolicy
   ARCH/libsupol.so
然而,随着 Android 9 的发布,谷歌引入了更多的安全特性,这使得 SuperSU 无法正常工作。最重要的变革包括:


[*] 增强的系统分区加密:Android 9 引入了进一步增强的系统分区加密,系统分区权限为只读;
[*] SELinux 策略变动:SELinux(安全增强型 Linux)策略的变动进一步限制了对敏感利用的访问。
[*] 对系统文件的修改检测:Android 9 增强了对系统文件修改的检测,SuperSU 通过修改系统文件来管理 Root 权限,这在新版本中受到了限制。
因此,由于这些安全增强,SuperSU 无法在 Android 9 上提供透明和稳固的 Root 访问,而 Magisk 作为替代方案,采用了 systemless(无需修改系统分区)的方法,通过挂载一个与系统文件相隔离的文件系统来加载自定义内容,从而避开了对系统文件的直接修改,这使得 Magisk 可以或许在新的安全机制下继续提供 Root 权限管理。

Magisk Root

   Magisk 是目前最流行的用于Android装备的Root解决方案,它答应用户获取Root权限,同时只管不影响装备的安全性和保修状态。Magisk的工作原理相对复杂,但可以概括为以下几个关键步调和概念:
1. 系统分区修改:Magisk通过对系统的boot.img文件进行patch,实现对系统分区的修改,而无需直接触碰/system分区。这是通过在启动时创建一个挂载点来实现的,Magisk会在/data分区创建一个magisk.img镜像文件,并在系统启动时将其挂载到/magisk目次。
2. Systemless机制:Magisk采用了一种称为systemless的技术,这意味着它在不修改原始系统分区的情况下提供Root权限。这种技术避免了对系统文件的直接修改,从而减少了引发系统问题的风险。
3. Magisk二进制文件:Magisk包含了本身的su二进制文件,这个文件在系统启动时被加载,并且可以取代系统中原有的su文件来管理Root权限。
4. 权限管理:Magisk提供了一个管理界面,答应用户授予或拒绝特定应用的Root权限哀求。这是通过Magisk管理器应用实现的,它提供了一个用户友好的界面来管理Root权限。
5. SELinux策略:Magisk还可以或许处理SELinux策略,这是Android系统中用于增强安全性的机制。Magisk可以配置SELinux以答应Root权限的适当利用,同时保持系统的安全性。
6. Magisk Hide:Magisk提供了一个名为Magisk Hide的功能,答应用户隐藏Root权限,以规避某些应用的Root检测,这对于必要利用银行或某些安全敏感应用的用户来说非常有用。
7. 模块系统:Magisk支持模块化,用户可以通过刷入模块来实现各种系统级别的定制和功能增强,如主题定制、功能添加等,而无需对系统进行永世性修改。
8. Bootloader解锁:为了利用Magisk,用户通常必要解锁装备的Bootloader。解锁Bootloader答应用户刷入自定义的Recovery和Magisk,这是获取Root权限的前提步调之一。
9. Recovery刷入:用户可以通过刷入如TWRP如许的自定义Recovery来安装Magisk.zip文件,这是另一种安装Magisk的方法。
10. OTA升级兼容:Magisk设计时考虑了与OTA(Over-The-Air)系统升级的兼容性,这意味着利用Magisk的装备可以接收和安装官方的系统更新,而不会由于Root权限而受到影响。


拓展:

Xposed框架

   Xposed框架是一个在Android系统中非常流行的工具,它答应用户通过安装特定的模块来自定义和修改系统及应用步伐的举动,而无需修改应用步伐本身的APK文件。Xposed框架的工作原理和特点如下:

1. 无需修改APK:用户可以安装Xposed模块来改变应用步伐的功能,而不必要对应用步伐的安装包进行解包、修改和重新打包。
2. 系统级担当:Xposed通过替换系统启动时的`app_process`文件来担当整个系统。`app_process`是Android系统中用于启动应用进程的关键步伐。
3. Zygote进程:在Android系统中,Zygote是一个特殊的系统进程,它负责孵化(fork)新的应用进程。Xposed框架通过Hook(钩住)Zygote进程,影响所有从Zygote fork出来的应用进程。
4. 模块化:Xposed框架的自定义功能通过模块实现,用户可以根据必要选择安装或卸载不同的模块。
5. 易于利用:Xposed提供了一个用户界面,用户可以通过它来激活或停用不同的模块,无需重启手机。
6. 高级功能:Xposed模块可以实现很多高级功能,如应用举动的修改、系统设置的调整、状态栏和导航栏的自定义等。
7. 必要Root权限:为了可以或许替换系统文件和影响系统进程,利用Xposed框架通常必要装备具有Root权限。
8. 兼容性:Xposed框架支持多个版本的Android系统,但必要根据具体的系统版本选择合适的Xposed版本。
9. 安全性:固然Xposed框架本身是安全的,但是安装不受信任的模块大概会带来安全风险。因此,用户应该只从可信任的来源安装Xposed模块。
10. 社区支持:Xposed有一个活跃的社区,很多开发者创建并分享了各种模块,以满足不同用户的需求。

总的来说,Xposed框架是一个功能强盛的工具,它为用户提供了一种灵活、安全(在正确利用的前提下)的方式来定制他们的Android装备。然而,由于它修改了系统的核心组件,利用时还是必要一定的技术知识,以避免潜伏的风险。

Zygote进程

   在Android利用系统中,Zygote是一个特殊的系统进程,它在系统启动时被创建。Zygote进程的重要作用是启动一个特殊的虚拟机实例,并预加载一些常用的类和资源,然后等候来自系统或应用步伐的哀求来创建新的应用步伐进程。以下是Zygote进程的一些关键点:

1. 启动过程:在Android系统启动时,init进程会启动Zygote进程。Zygote进程会启动一个虚拟机实例,并加载运行Android应用步伐所需的核心类和资源。
2. 孵化新进程:当系统或应用步伐必要一个新的进程时,它会向Zygote发送一个哀求。Zygote进程会复制自身(通过fork利用),创建一个新的进程,并将这个新进程与哀求的应用步伐相关联。
3. 预加载资源:为了提高应用步伐启动速度,Zygote进程会预加载一些常用的类和资源,如Java核心库和Android框架类。如许,当新进程被创建时,它已经拥有了一个包含必要资源的虚拟机实例。
4. 应用隔离:每个Android应用步伐都运行在本身的进程中,这是为了确保应用步伐之间的隔离。Zygote进程是实现这一隔离模子的关键组件。
5. 系统性能:通过Zygote机制,Android系统可以更高效地管理资源。预加载的Zygote进程减少了每次启动新应用步伐时的资源加载时间,从而提高了系统的整体性能。
6. 安全机制:Zygote进程在创建新进程时,会为每个应用步伐设置适当的安全上下文和权限,这是Android安全架构的一部分。
7. 脚本表明器:Zygote进程还负责启动Android的脚本表明器,如JavaScriptCore,这对于运行Web内容的应用步伐(如浏览器)是必要的。
8. 系统服务:Zygote进程还可以用来启动系统服务,这些服务在背景运行,为整个系统或多个应用步伐提供功能。
9. ART组件:随着Android利用系统的发展,Zygote进程现在与Android运行时(ART)紧密集成,负责启动和管理Android应用的运行时环境。

简而言之,Zygote是Android系统中一个至关重要的组件,它通过孵化新的应用步伐进程来支持Android的应用步伐模子,同时确保了应用步伐的性能和安全性。

通俗易懂的表明与延伸:

Xposed框架:
想象一下,你的手机利用系统就像一个有很多房间的大房子(安卓系统),每个房间都负责不同的使命(比如微信是一个房间,用来谈天)。Xposed框架就是一个特殊的管家,它在房子的门口(app_process,启动Zygote的地方)等着,每当有人要进入房间(启动应用)之前,这个管家都可以先和他们谈话(加载模块代码),然后这些人进入房间后,就会按照管家的指示去做(改变应用举动)。比如,管家可以告诉微信房间的人,让他们不要听主人(微信用户)关于撤回消息的命令,或者在玩摇骰子游戏时总是赢。
Magisk工具:
现在,想象一下Magisk是一个把戏师,它不是在房子门口等,而是在房子旁边创造了一个完全一样的幻影房子(虚拟文件系统)。这个幻影房子看起来和原来的一模一样,但现实上它是独立存在的,不会影响原来的房间。把戏师可以让你在不改变原来房间的情况下,利用幻影房间来做实验或者改变设置,如许纵然做了一些改变,原来的房间还是保持原样。这就意味着,纵然系统升级(房子翻新),幻影房间的实验也不会受到影响。
两者的重要区别:
- Xposed 必要在系统中安装一个特殊的管家(修改app_process),这个管家可以直接和房间里的人(应用进程)交换,改变他们的举动。但是,如果房子翻新(系统升级),管家大概会受到影响。
- Magisk 则是创建了一个幻影房子,让你在不改变真房子的情况下做实验。如许,纵然真房子翻新,幻影房子里的实验也不会受影响。
利用场景:
- 如果你想改变应用的举动,比如微信防撤回,你大概必要 Xposed。
- 如果你想获取Root权限来做一些高级的系统定制,但又不想影响系统的安全性和升级,你大概必要 Magisk。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 安卓root详解(supersu,magisk原理说明)