KernelSU: 内核 ROOT 方案, KernelSU KernelSU KernelSU 新的隐藏root防止检测 封号方案

2023-10-26

大约一年多以前,我在一篇讲Android 上 ROOT 的过去、现在和未来https://mp.weixin.qq.com/s?__biz=MjM5Njg5ODU2NA==&mid=2257499009&idx=1&sn=3cfce1ea7deb6e0e4f2ac170cffd7cc1&scene=21#wechat_redirect 的文章中提到:

我认为,随着 GKI 的出现,内核的碎片化会逐渐消失,我们完全可以通过修改内核的方式去获取 EL1 root。

本以为这一天很快就会到来,没想到时间过去这么久,马上都要 Android 14 了,这玩意儿还是没有出现...没办法,我就只好自己动手了!其实我之前在探索某大型 5V5 游戏的态势感知系统的时候,已经使用过内核相关技术了;正好几个月前换了新手机,其系统出厂是 Android 12,内核是基于 GKI 的;于是我尝试把这个「态势感知系统」移植到 GKI 内核上,在移植的过程中,KernelSU 的雏形初现;我索性一不做二不休,直接把它淦完了!现在我宣布:

KernelSU,一种基于内核技术的 ROOT 方案,它来了!

什么是 KernelSU?

KernelSU,顾名思义,就是基于内核的 SU。它通过自定义内核,直接在内核中赋予目标进程 root 权限。更多关于 root 的知识可以参考我之前的文章:何为 root?

其实 KernelSU 很早就有人提出了来了,大约 2018 年的时候,XDA 上的 zx2c4 就给出了一个简单的实现[1];虽然整个实现非常简单,但它的确给我们展示了另外一种可能。后来,LSPosed 团队在实现 WSA 的 Magisk 方案的时候,也曾通过 KernelSU 来 root WSA[2]。

由于 KernelSU 的实现需要自定义内核,而 Android 系统的碎片化极其严重,又由于 Linux 内核不同版本之间没有兼容性可言;因此之前的 KernelSU 方案很难拥有通用性:你必须给每个型号的设备编译一个自定义内核,这几乎是不可能实现的。另外,之前的 KernelSU 实现没有鉴权系统,系统中的任何进程,无需任何授权,都可以直接通过 su 访问到 root 权限;这对普通用户来说是难以接受的:随便一个 App 一上来就有可能控制你的整个手机。

不过,我今天实现的 KernelSU 已经很好地解决了以上两个问题。

我干了什么?

为了解决之前内核 root 方案的问题,我干了三件事:

第一件事,就是等。我等到了 GKI 的出现,Google 通过 GKI 统一了 Android 系统的内核,在 GKI 2.0 以后,不同的 Android 设备之间在 KMI 兼容的情况下,是可以使用通用内核的;虽然理想与现实之间还是有一些差距,但现在 GKI 内核的通用性,已经与曾经那个碎片化时代不可同日而语了。

第二件事,我找到了一种 KernelSU 的鉴权方案;通过在内核中扫描当前进程的 apk,然后验证其签名来实现 root 管理器;root 管理器与内核之间通过特制的系统调用来授权,保证未授权进程无法使用 root 功能。

第三件事,我采用了一种稳定的系统调用拦截技术;通过 kprobe 来拦截系统调用,进而实现 root 管理器和内核之前的通信,不在文件系统中留痕,能完美地隐藏自己。

FAQ

KernelSU 支持哪些设备?

内核版本 5.10 以上的设备支持,其他均不支持;未来也许可以通过 static binary instrumentation 的方式 backport 到旧内核,就看有没有有缘人来实现了。

KernelSU 与传统的 ROOT 有什么区别?

KernelSU 主要工作在内核空间,而传统的 ROOT 如 Magisk 实际工作在用户空间。

KernelSU 能有类似 Magisk 的模块功能吗?

KernelSU 会有模块功能,不过可能与 Magisk 的模块不同;KernelSU 将提供内核模块接口,其规划的模块功能,主要用来将代码或者脚本文件加载进内核空间执行;而非类似 Magisk 那样提供文件系统 overlay。不过理论上讲,KernelSU 也可以实现文件系统 overlay。

KernelSU 的模块能提供 Xposed 功能吗?

KernelSU 的模块将来主要工作在内核空间,而 Xposed 为用户空间的功能;因此 KernelSU 无法之间实现 Xposed;目前来看,基于 ptrace 的注入技术可以部分实现 Xposed 的功能(比如少阴App),但我认为将来可能有更好的方案出现。

KernelSU 能完美隐藏 root 吗?

我不确定。但理论上讲,内核相比应用程序处于特权级别,它有能力对应用程序屏蔽任何信息;比如在内核中可以完美地拦截所有系统调用,这是隐藏 root 的核武器。

KernelSU 最大的优势是什么?

KernelSU 可以提供针对内核的 HOOK 接口,你可以对内核中的几乎任意函数进行拦截;比如拦截系统调用,过滤 openat、inofity 等。内核级别的 HOOK,意味着对所有所有进程完美的控制,除非你的对手也是 root 进程。

KernelSU 是开源的吗?

Yes, 开源地址:https://github.com/tiann/KernelSU

普通用户如何使用?

先自行摸索,或者等教程。

结语

KernelSU 还有很多功能有待完善,如果有问题请大家多多包容,有能力欢迎加入开发 :)

最后祝大家玩得开心!

晚安!

引用链接

[1] 简单的实现: https://git.zx2c4.com/kernel-assisted-superuser/
[2] 通过 KernelSU 来 root WSA: https://github.com/LSPosed/WSA-Kernel-SU

KernelSU: Android 内核编译方法和开发环境搭建

都是改 boot。不过一个是改 kernel,magisk是改用户空间的 init。

KernelSU: 内核 ROOT 方案, KernelSU KernelSU KernelSU,手机资源 - Powered by Discuz! (aialbb.com)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

KernelSU: 内核 ROOT 方案, KernelSU KernelSU KernelSU 新的隐藏root防止检测 封号方案 的相关文章

  • 如何使用 Android Studio 2.1.3 从 Android 中的文本文件中获取随机行?

    我有一个 500 行的文本文件 我将此文本文件放置在 app src main assets 文件夹中 名称为 words txt 在此文件中 每一行都用换行符分隔 现在我需要从这个文本文件中获取随机行 在发布此内容之前 我访问了以下问题
  • 通过使用计时器(或处理程序)更改 ImageView 中的图像来创建动画

    我想通过更改 ImageView 内的帧来创建一个简单的动画 我不想使用 AnimationDrawable 因为我需要在帧更改或动画停止时接收事件 以便能够向后播放 重新启动等等 我的问题是 尽管 setImageDrawable 被调用
  • 为 customere xml 按钮着色时遇到问题

    我在为自定义按钮着色时遇到问题 由于某种原因 似乎无论我想应用什么颜色更改 文本或背景 按钮都保持不变 我注意到button xml具有所需的颜色和正确的形状 尽管没有出现按钮background color活动的财产 活动中的按钮
  • 如果我在 XML 布局中声明一个片段,如何将它传递为 Bundle?

    我有一个活动已替换为片段 该活动采用了一个 Intent 其中包含一些有关该活动应该显示哪些数据的额外信息 现在 我的 Activity 只是执行相同工作的 Fragment 的包装器 如果我使用标记在 XML 中声明该片段 如何将该捆绑包
  • “android.enableUnitTestBinaryResources”已弃用[重复]

    这个问题在这里已经有答案了 我刚刚更新了我的 Android Studio 现在当我构建我的项目时 我收到此错误 选项 android enableUnitTestBinaryResources 已弃用 这 当前默认值为 假 已从当前版本中
  • Android 在连接 Socket 时出现错误

    在阅读了一些express io文档并成功连接到之后 我尝试使用nodejs和express io编写简单的应用程序http chat socket io在命令行中运行下面的代码并打开后 我找到了使用 nodejs 和express io
  • 如何生成带logo的二维码?

    我正在为 Android 设备开发应用程序 我想生成带有徽标的二维码 With ZXing I know how to generate simple QR codes like this one But I want to generat
  • 将实时 Android 网络摄像头视频上传到 RTP/RTSP 服务器

    我已经做了适当的研究 但仍然缺乏关于我想要实现的目标的信息 因此 我想编写一个应用程序 用户可以在其中录制视频并立即 实时 将视频上传到 RTP RTSP 服务器 服务器端不会有问题 我不清楚的是如何在手机端实现这一点 到目前为止 我的研究
  • 如何设置评分栏的星星颜色?

    如何设置评分栏的星星颜色 我想要黄色星星 最简单的方法 android progressTint color color 光滑有光泽
  • 是否可以在 Flutter 中创建自定义快速设置图块?

    我搜索了 Flutter 文档并用谷歌搜索了这个 但结果为零 我正在开发我的第一个 Android Flutter 应用程序 我想为其创建一个自定义的快速设置图块 我的目标是牛轧糖及以上 我知道这在 Java 和 Kotlin 中是可能的
  • 使用 Android Intent 发送基于 HTML 的电子邮件正文

    我需要使用 android Intent extra 将基于 HTML 的内容发送到电子邮件应用程序 它接受一些标签 例如 br 但它没有显示任何锚链接或 h1 其显示像简单的文本 EDITED I have tried with gmai
  • Android 应用安装验证

    我有一个应用程序 其中列出了用户可以安装并赚取积分的一些活动 应用程序列表 现在我主要关心的是安全性 一些用户从模拟器或VPN或其他东西安装应用程序 这样我的客户就无法在Google Play商店中安装应用程序 我见过一些应用程序 如现金海
  • 在 Android 谷歌地图中绘制 4K 折线

    我现在正在开发一个适用于 Android 设备的应用程序 主要功能是在地图上绘制折线以显示城市中每条街道的交通情况 不幸的是 当我绘制大约 3K 折线时 数量会根据屏幕尺寸和缩放级别而减少 我的地图变得非常慢 我没有提及绘制所有线条的时间
  • 如何检查 firebase 中是否存在孩子? [复制]

    这个问题在这里已经有答案了 我有一个 firebase 它有一个名为 users 的节点 用户给出一个用户名 我想检查该用户名是否已作为用户节点的子节点存在 这是我目前正在尝试的代码 平台是安卓 String myUsername user
  • 在 Android 应用程序中编辑/添加 IPTC 元数据

    我看过许多其他类似的问题 但似乎没有一个有准确的答案 我正在开发一个可处理大量图像的 Android 应用程序 我希望通过编辑 IPTC 关键字标签 或其他适当标签 的值来向图像添加信息 我在用元数据提取器 http drewnoakes
  • GreenDao交易

    我在用着GreenDao存储大量数据 来自休息服务 我的很多实体都与关系相关 一切都很顺利 但明天我必须实施坚如磐石的工作流程 当我加载数据时我必须检查是否发生错误 如果是这样 我必须确保没有存储任何内容在 SQLite 数据库中 通常我会
  • Android 多用户支持(4.2 中的新功能)对服务器端数据模型(例如 android_id)的影响

    Google 刚刚发布了 Android 4 2 其中支持单个设备上的多个用户配置文件 http developer android com about versions android 4 2 html MultipleUsers htt
  • 如何在 Android 上从后台线程显示 Toast?

    我怎样才能显示Toast http developer android com guide topics ui notifiers toasts html来自线程的消息 您可以通过调用Activity s runOnUiThread您线程中
  • 需要在 Android 应用程序卸载期间执行一些活动

    我正在开发一个应用程序 如果用户卸载该应用程序 我需要登录该应用程序 所以我正在遵循这种方法应用程序如何检测到它将被卸载 https stackoverflow com questions 18692571 how it works war
  • Android 6.0.1 无法以编程方式启用 wifi 热点

    当我尝试通过以下代码启用 wifi 网络共享时 它会抛出异常 com java lang reflect Method invoke Native Method 处的 java lang reflect InitationTargetExc

随机推荐

  • 计算机网络校园网网络设计报告,计算机网络课程设计报告-校园网的组建和应用...

    计算机网络课程设计报告 校园网的组建和应用 北 京 邮 电 大 学校园网的组建和应用 计算机网络课程设计指导老师 吴建伟老师刘亦桐老师小组成员 姓名 班级 学号王 超 06121 060648曹 振 06121 060643郭 嵩 0612
  • 我的创作纪念日

    机缘 咱记性不好 技术也差 实验过程中总是遇到奇奇怪怪的问题 有些问题找了好久也没找到完全适合自己情况的解决方案 很多情况下需要结合多篇文章进行总结 为了下次遇到类似问题能够快速解决 同时也为遇到同样问题的小伙伴们能够快速找到详细的问题解决
  • 基于HAL库的stm32f103c8t6的快速开发笔记(简易版)—— 5、STM32的PWM输出(附舵机控制)

    1 概念了解 首先了解到 PWM生成是在通用定时器的基础上配置的 每个通用定时器都有多路通道输出PWM信号 这里以TIM4 定时器4 为例 在图形配置面板找到TIM4的通道一作为PWM输出管脚 其管脚为PB6 打开左侧定时器配置面板 可以看
  • HBase工作机制

    1 图示 2 组件说明 Client hbase客户端 1 包含访问hbase的接口 比如 linux shell java api 2 除此之外 它会维护缓存来加速访问hbase的速度 比如region的位置信息 Zookeeper 1
  • 【MySQL】基础SQL语句——库的操作

    文章目录 一 创建数据库 1 1 基础语句 1 2 字符集和校验规则 1 3 校验规则对读取数据的影响 二 查看数据库 三 修改数据库 四 删除数据库及备份 4 1 删除 4 2 备份和还原 结束语 一 创建数据库 1 1 基础语句 最简洁
  • 微信小程序期末大作业 点餐小程序

    点餐小程序 小程序如图所示 下载链接在文末 点我下载资源 https download csdn net download weixin 43474701 58000564
  • xshell连接ubuntu失败排错指南

    本人在学习linux系统中出现了一些远程连接失败的问题 以此笔记记录下排错过程 注意 VMware桥接模式需要让虚拟机的ip和物理机的ip在同一网段 因此需要手动配置linux系统网卡 NAT模式虚拟机ip不需要和物理机ip在同一个网段 但
  • Python Tkinter详解 (二)Label标签的使用

    一个简单到不能再简单的标签 import tkinter as tk window tk Tk window title Label的使用 window geometry 400x400 label tk Label window text
  • 【动手学深度学习v2】第二章预备知识-2.1入门

    入门 深度学习领域方向自然语言处理 计算机视觉 深度学习 具体领域 图片分类 物体检测与分割 样式迁移 为图片加滤镜 人脸合成 文字生成图片 文字生成 无人驾驶 张量 表示一个多维矩阵 核心是一个数据容器 多数情况下包含数字 可以想象成一个
  • Java中WebService接口的生成、打包成.exe、设置成Windows服务、及其调用、Apache CXF调用

    一 Java中WebService接口的生成 1 在eclipse工具中新建一个普通的JAVA项目 新建一个java类 JwsServiceHello java package com accord ws import javax jws
  • 蓝桥杯2014年第五届真题-拼接平方数

    题目 题目链接 题解 实现题 题目大意 将一个区间内的数拆成两个数后 若原数 拆得的第一个数和拆得的第一个数均为平方数则输出 直接遍历区间内所有的数可能会超时 因此我们直接取区间内的平方数 只遍历区间内的平方数 时间复杂度会降很多 对于每个
  • Windows和Linux下共享内存使用

    源码地址 https github com ylmbtm GameProject3 看过我开源代码的朋友知道 我这个项目在逻辑服和数据服进行数据同步采用的就是共享内存 其实数据同步的方式有很多种 其中使用较多的一种方式就是tcp网络协议同步
  • CSS布局的三种机制:浮动

    CSS布局的三种机制 浮动 浮动 float 为什么要学习浮动 什么是浮动 float 浮动小结 浮动的应用 清除浮动 为什么要清除浮动 清除浮动本质 清除浮动的方法 额外标签法 隔墙法 父级添加overflow属性方法 使用after伪元
  • jdk的安装

    由于要使用jmeter进行接口自动化测试 而jmeter的使用 必要要安装jdk 因此就在网上随便找了一篇jdk的安装教程 由于我喜欢自定义安装 结果费了半天时间也没安装成功 前期后后安装与卸载不下5次 最后决得可能是jdk不能自定义安装的
  • 接口设计说明书模板

    目 录 1 引言 1 1 1 设计目标 1 1 2 适用范围 1 1 3 相关术语 1 1 4 参考资料 1 2 分析设计 1 2 1 设计思想 1 2 2 接口结构 1 2 3 数据流分析 2 3 中间库接口 2 3 1 中间库说明 2
  • java面试官如何面试别人

    java面试官如何面试别人 一 java面试官的 面试心得 在公司当技术面试官几年间 从应届生到工作十几年的应聘者都遇到过 先表达一下我自己对面试的观点 1 笔试 面试去评价一个人肯定是不够准确的 了解一个人最准确的方式就是 路遥知马力 日
  • OCR-字体颜色与背景颜色区分不明显的调研

    需解决的问题 对于一些图片 字体和颜色区分度不高 白色字体的图片进行图像增强时容易使字体更加 模型识别时存在漏检现象 图像增强后有些文字将会变得不清晰甚至消失 解决的方法 图像的二值化 以下使用了七种方法进行测试 Python代码 impo
  • shell筛选log

    服务器跑 pbs 脚本的时候 会分配一个 job ID 并相应地创建两个文件
  • anaconda和python版本的对应关系

    https docs anaconda com anaconda packages oldpkglists Anaconda与Python版本对应关系 官方最新
  • KernelSU: 内核 ROOT 方案, KernelSU KernelSU KernelSU 新的隐藏root防止检测 封号方案

    大约一年多以前 我在一篇讲Android 上 ROOT 的过去 现在和未来https mp weixin qq com s biz MjM5Njg5ODU2NA mid 2257499009 idx 1 sn 3cfce1ea7deb6e0