☰
Root-My-Galaxy架构解析:应用、设备数据与Payload分离设计的完整思路
2026/10/13 3:35:02 网站建设 项目流程

【免费下载链接】Root-My-Galaxy

KSU installer for supported Samsung Galaxy firmware with CVE-2026-43499

项目地址:https://gitcode.com/gh_mirrors/ro/Root-My-Galaxy
点击查看免费下载

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 是整个分离架构中"信任链条"的核心,做了四件防御性设计:

  1. Commit 固定(pin):先查询 Payload 仓库 main 分支的 commit SHA(第 93-100 行),再把清单里的可变main/路径重写为该 commit 的固定路径(第 104-107 行)。清单与二进制永远来自同一快照,杜绝"清单 A 版本 + 二进制 B 版本"的错配。
  2. 大小校验:下载前比对Content-Length,下载中累计字节数,结束后要求与清单声明的size完全一致(第 64-84 行)。
  3. 原子落盘:先写.part临时文件并fsync,成功后才重命名为正式文件名,失败不会留下半成品。
  4. 响应上限:清单最大 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 文件,几个细节值得学习:

  • 用 AndroidAtomicFile写盘(第 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

项目地址:https://gitcode.com/gh_mirrors/ro/Root-My-Galaxy
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询