【免费下载链接】Root-My-Galaxy
KSU installer for supported Samsung Galaxy firmware with CVE-2026-43499
Root-My-Galaxy 是一个面向受支持三星 Galaxy 机型的一键 KernelSU 安装器,基于本地提权漏洞 CVE-2026-43499,可将指定机型的手机直接 Root。它最鲜明的架构决策是:应用本体、设备支持数据(device feed)、原生漏洞利用 Payload 三者完全分离——App 只是一个"调度器",敏感二进制全部存放在独立的 Payload 仓库中,按需下载、逐字节校验。这种分离设计让"新增机型支持"不需要发新版 App,也让应用包体积和风险面都保持极小。
本文带你从架构视角完整拆解这套设计思路,看看应用层、设备数据层、Payload 层各自承担什么角色,以及一次安装流程是如何被状态机驱动起来的。📦
一、三层分离架构总览
整个系统可以拆成三层,每层的更新节奏和敏感程度完全不同:
| 层级 | 职责 | 存放位置 | 更新频率 |
|---|---|---|---|
| 应用层 | UI、安装流程编排、历史记录、自更新 | 本仓库 app/ | 低频(功能迭代) |
| 设备数据层 | targets-v3.json支持清单(机型 + 内核版本) | 独立 Payload 仓库 | 高频(加新机型) |
| Payload 层 | 漏洞利用.so与 KernelSU 内核模块二进制 | 独立 Payload 仓库 | 跟随内核版本 |
这种"数据与代码分离"是整篇文章的主线。App 包里只内置了一个轻量的原生 helper(libcve43499root.so),真正执行提权的大 Payload 运行时才从远程拉取。
二、设备层:DeviceSnapshot 把"我是谁"量化成数据
匹配的前提是准确描述设备。DeviceSnapshot.kt 用一个纯数据类收集了 12 项关键指纹:
model/device:机型代号(如SM-S938N)kernelRelease:完整内核版本字符串kernelVersion:自动截取前三段(如6.6.98-android15-8-...归一为6.6.98),见 第 21-22 行abi/pageSize:架构与内存页大小,用于原生层对齐
数据采集入口是DeviceSnapshot.current()(第 29-47 行),同时读取Build.*常量与uname()系统调用。这里的关键设计是:设备信息只作为"查询条件",从不决定 Payload 内容——决定了权力和数据的边界。
三、清单层:SupportManifest 的双因子匹配
设备数据以 JSON 清单形式存放在 Payload 仓库中,由 SupportManifest.kt 解析。清单强制schemaVersion == 3(第 47-48 行),结构上要求每条TargetProfile至少包含一个机型和一个内核版本(第 19-22 行)。
匹配逻辑是双因子的(第 24-31 行):
matches = 机型在 models 白名单中 && 内核版本在 kernelVersions 白名单中对应地,单元测试 TargetProfileTest.kt 验证了"同内核不同机型必须拒绝"的反例。若用户开启高级模式(AppPreferences.kt 中的advanced_mode),MainActivity.kt 还会弹出完整目录供手动选择,并对机型不符、内核版本不符分别给出独立警告——宁可让你知情,不替你瞎猜。
四、Payload 层:PayloadRepository 的可信下载
PayloadRepository.kt 是整个分离架构中"信任链条"的核心,做了四件防御性设计:
- Commit 固定(pin):先查询 Payload 仓库 main 分支的 commit SHA(第 93-100 行),再把清单里的可变
main/路径重写为该 commit 的固定路径(第 104-107 行)。清单与二进制永远来自同一快照,杜绝"清单 A 版本 + 二进制 B 版本"的错配。 - 大小校验:下载前比对
Content-Length,下载中累计字节数,结束后要求与清单声明的size完全一致(第 64-84 行)。 - 原子落盘:先写
.part临时文件并fsync,成功后才重命名为正式文件名,失败不会留下半成品。 - 响应上限:清单最大 256KB、commit 响应最大 16KB(第 138-145 行),防止异常响应撑爆内存。
下载完成后返回VerifiedPayloads三元组(第 12-16 行):profile、exploit 文件、KernelSU 文件,二者均被chmod +x。设备端集成测试 PayloadRepositoryTest.kt 会真实走一遍"解析清单→下载→校验大小"全流程。
五、安装流水线:InstallViewModel 状态机
InstallViewModel.kt 用一个显式枚举驱动全流程(第 19-27 行):
Checking → Ready → Downloading → Exploiting → LoadingKernelSu → Installed / Failed
install()方法(第 132-180 行)按阶段推进,每步写入实时日志并同步到历史存储。几个值得注意的细节:
- 成功判据是双标记:进程退出码为 0 且日志同时包含
exploit completed与done=1 root=1(第 252-261 行),任何一个不满足都判失败。 - 卡死与超时熔断:日志 90 秒无更新即视为 stalled,总耗时上限 15 分钟。
- KASLR 偏移缓存:从 exploit 日志里解析 KASLR 滑动偏移,按本次开机(
boot_id)缓存(第 350-371 行),同一开机周期内重试可跳过部分探测。 - 开机收据:成功后写入
boot_id + verified标记(第 333-341 行),配合 NativeProbe.isKernelSuActive() 判断"已 Root"状态,重启后凭收据仍可正确显示。
UI 侧 InstallActivity.kt 把四个阶段渲染成带进度条的可视化步骤卡(第 108-113 行),普通用户无需看懂日志也能跟随进度。
六、Native 探针:动手之前先"体检"
native_probe.c 编译为s25u_native库(CMakeLists.txt),在 exploit 之前回答一个问题:这个进程能碰到哪些内核攻击面?
它会逐一探测 tracefs、ashmem、perf_event_open、bpf_map_create、pagemap 等节点的可读性(第 136-245 行),记录每项ok/denied与 errno;更精巧的是 arm64 上的KASLR 时序侧信道——分别测量对可疑内核地址的 prefetch 延迟与经由 syscall 寄存器触达的延迟(第 48-114 行),用 128 个采样取最低 16 个均值滤除抖动,间接定位内核基址。探针结果会原样展示在界面日志中,方便开发者定位环境差异。
七、双通道执行:Shizuku 模式
ShizukuController.kt 提供了第二条执行通道:当 App 自身 UID 受 SELinux 限制无法直接读写 shell 拥有的/data/local/tmp时,可借助 Shizuku 以 shell 权限执行命令。exec()与writeFile()(第 68-101 行)分别对应"远程跑进程"和"暂存文件"两个原语。
InstallViewModel.helperFile() 体现了通道的对称性:无论走 Shizuku 还是本地ProcessBuilder,上层只看到统一的命令接口,Payload 与 helper 都会被暂存到/data/local/tmp并赋予 755 权限。用户可在设置页切换该模式(MainActivity.kt 设置区)。
八、历史存储:InstallHistory 的容错细节
InstallHistory.kt 把每次运行的完整日志存成独立 JSON 文件,几个细节值得学习:
- 用 Android
AtomicFile写盘(第 54-67 行),进程被杀也不会写坏已有记录; - 解析失败的文件自动改名为
.corrupt隔离而非崩溃(第 82-89 行); - 启动时把所有"卡在 Running"的旧记录标记为 Failed(第 34-43 行),避免僵尸状态。
九、分离设计到底带来了什么
回看这条主线,分离架构的收益可以归纳为四点:
| 收益 | 说明 |
|---|---|
| 📦 小体积、低暴露面 | APK 不含大体积 exploit 二进制,静态分析包即所见即所得 |
| 🚀 快速扩展机型 | 新机型只需在 Payload 仓库追加清单条目与二进制,App 零改动 |
| 🔒 快照一致性 | commit pin + 大小校验 + 原子落盘,下载链路可审计 |
| ⚙️ 关注点分离 | UI 状态机、设备匹配、下载校验、native 探针各自独立、可单测(见 test/ 与 androidTest/) |
关键文件速查:设备快照 DeviceSnapshot.kt|清单解析 SupportManifest.kt|可信下载 PayloadRepository.kt|安装状态机 InstallViewModel.kt|原生探针 native_probe.c|历史存储 InstallHistory.kt。
如果你在做"配置/数据与代码分离"的移动端项目(固件包、机型白名单、远程规则等),Root-My-Galaxy 这套"清单 schema 版本化 + commit pin + 原子校验下载 + 显式状态机"的组合,是非常值得抄作业的工程范式。
【免费下载链接】Root-My-Galaxy
KSU installer for supported Samsung Galaxy firmware with CVE-2026-43499
相关推荐
PPHC项目解析:TiDB分布式数据库的设计思路与架构剖析
PPHC项目解析:TiDB分布式数据库的设计思路与架构剖析 引言:分布式数据库的时代挑战 在当今数据爆炸的时代,传统单机数据库已经无法满足企业级应用对高并发、高
如何使用AlphaGenome进行高效变异评分?掌握这5个核心策略
如何使用AlphaGenome进行高效变异评分?掌握这5个核心策略 AlphaGenome是由Google DeepMind开发的强大基因组学模型,通过其API
Prisma GraphQL Server 架构详解:数据库层与应用层的分离设计
Prisma GraphQL Server 架构详解:数据库层与应用层的分离设计 本文基于 docs/1.13/04 Reference/01 Introduc
后端数据库GraphQL
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考