WitAqua-tools/Root-My-Device
GitHub: WitAqua-tools/Root-My-Device
Root My Device 是一款基于内核漏洞并针对特定固件版本的 Android 一键 Root 安装工具,通过精确设备匹配实现 KernelSU 的自动化部署。
Stars: 4 | Forks: 1
# Root 我的设备
[BuSung-dev/Root-My-Galaxy](https://github.com/BuSung-dev/Root-My-Galaxy) 的 fork,
原作者为 [BuSung-dev](https://github.com/BuSung-dev)。本仓库保留了
原始的 Apache License 2.0 —— 详见 [LICENSE](LICENSE)。Payload 部分
是 [BuSung-dev/Root-My-Galaxy-Payloads](https://github.com/BuSung-dev/Root-My-Galaxy-Payloads) 的 fork。
Root My Device 是一款针对明确支持的固件版本的一键安装工具。应用程序本身与
设备偏移量 (offsets)、原生 exploit payload 以及 KernelSU 构建产物保持分离。
[最新发布版本](https://github.com/Witaqua-tools/Root-My-Device/releases)
设备数据和原生 payload 维护在
[Root-My-Device-Payloads](https://github.com/Witaqua-tools/Root-My-Device-Payloads) 仓库中。
每次向其 `main` 分支推送代码都会构建 payload,并将其作为
GitHub release 发布在该次运行对应的唯一标签下。应用会解析该
仓库的 `releases/latest`,从中读取 `targets-v2.json` 资产,并
下载其中列出的每一个构建产物——因此,一旦发布,其安装的 payload 集合就是
不可变的,且没有任何内容会以二进制文件的形式被提交。
## 应用程序
应用会自动为内核版本、完整构建显示 ID、SDK、ABI 和页大小 (page size) 精确匹配对应的版本。高级模式可以手动选择
配置文件,并提供独立的内核版本和构建警告。
## 构建
环境要求:
- Android Studio JBR 21
- Android SDK 37
- Android NDK 28 或更高版本
- CMake 3.22.1
APK 中包含一个并非由本仓库自身
源码构建的原生程序,因此请使用 submodule 进行克隆:
```
git clone --recurse-submodules https://github.com/Witaqua-tools/Root-My-Device
# 或者,在现有的 checkout 中
git submodule update --init payloads
```
```
$env:JAVA_HOME='C:\Program Files\Android\Android Studio\jbr'
.\gradlew.bat :app:assembleDebug
```
输出:
```
app/build/outputs/apk/debug/app-debug.apk
```
### Bootstrap 助手
APK 中的 `lib/arm64-v8a/libcve43499root.so` 并不是一个库——它是
bootstrap 助手,一个由应用程序通过 `ProcessBuilder` 从
`nativeLibraryDir` 中运行的可执行文件。它的作用是加载已下载的 payload,并在
payload 获取 root 权限后,通过 socket 提供 `su` 服务。
它由源码通过 [`app/src/main/cpp/CMakeLists.txt`](app/src/main/cpp/CMakeLists.txt) 编译,
而不是作为二进制文件提交。不过,其源码并不在此处:payload 的
standalone 路由会从固定路径执行同一个程序,因此 payload
仓库也必须构建它,并且保持为唯一副本。本仓库
通过 `payloads` submodule 访问它,其锁定的 commit 记录了
APK 构建时所基于的确切版本。
这意味着同一份源码会被刻意构建两次。Payload 仓库在 API 35 下锁定了
NDK 29,因为其 exploit payload 是一个固定大小的 blob,其
工具链构成了其身份的一部分;而在这里,CMake 使用本模块的 `ndkVersion`
在 `minSdk` 下进行构建。该助手对两者都不依赖——无论哪种方式它都是同一个程序,
并且应用搭载的副本就是在此处构建的那个。
关于它有两点至关重要,但很容易被意外破坏:它必须是一个**可执行文件**(`add_executable` 加上 `-pie`,使其具有共享库所不具备的 `PT_INTERP` 段),并且它必须被**命名为 `lib*.so`** 且设置
`jniLibs.useLegacyPackaging = true`,因为这样才能将其作为真实文件提取到
`nativeLibraryDir` 中,并设置可执行权限位。这两点在设置它们的
位置都加了注释。
仅限在您拥有或获得明确授权进行测试的设备上使用。
Root My Device 是一款针对明确支持的固件版本的一键安装工具。应用程序本身与
设备偏移量 (offsets)、原生 exploit payload 以及 KernelSU 构建产物保持分离。
[最新发布版本](https://github.com/Witaqua-tools/Root-My-Device/releases)
设备数据和原生 payload 维护在
[Root-My-Device-Payloads](https://github.com/Witaqua-tools/Root-My-Device-Payloads) 仓库中。
每次向其 `main` 分支推送代码都会构建 payload,并将其作为
GitHub release 发布在该次运行对应的唯一标签下。应用会解析该
仓库的 `releases/latest`,从中读取 `targets-v2.json` 资产,并
下载其中列出的每一个构建产物——因此,一旦发布,其安装的 payload 集合就是
不可变的,且没有任何内容会以二进制文件的形式被提交。
## 应用程序
应用会自动为内核版本、完整构建显示 ID、SDK、ABI 和页大小 (page size) 精确匹配对应的版本。高级模式可以手动选择
配置文件,并提供独立的内核版本和构建警告。
## 构建
环境要求:
- Android Studio JBR 21
- Android SDK 37
- Android NDK 28 或更高版本
- CMake 3.22.1
APK 中包含一个并非由本仓库自身
源码构建的原生程序,因此请使用 submodule 进行克隆:
```
git clone --recurse-submodules https://github.com/Witaqua-tools/Root-My-Device
# 或者,在现有的 checkout 中
git submodule update --init payloads
```
```
$env:JAVA_HOME='C:\Program Files\Android\Android Studio\jbr'
.\gradlew.bat :app:assembleDebug
```
输出:
```
app/build/outputs/apk/debug/app-debug.apk
```
### Bootstrap 助手
APK 中的 `lib/arm64-v8a/libcve43499root.so` 并不是一个库——它是
bootstrap 助手,一个由应用程序通过 `ProcessBuilder` 从
`nativeLibraryDir` 中运行的可执行文件。它的作用是加载已下载的 payload,并在
payload 获取 root 权限后,通过 socket 提供 `su` 服务。
它由源码通过 [`app/src/main/cpp/CMakeLists.txt`](app/src/main/cpp/CMakeLists.txt) 编译,
而不是作为二进制文件提交。不过,其源码并不在此处:payload 的
standalone 路由会从固定路径执行同一个程序,因此 payload
仓库也必须构建它,并且保持为唯一副本。本仓库
通过 `payloads` submodule 访问它,其锁定的 commit 记录了
APK 构建时所基于的确切版本。
这意味着同一份源码会被刻意构建两次。Payload 仓库在 API 35 下锁定了
NDK 29,因为其 exploit payload 是一个固定大小的 blob,其
工具链构成了其身份的一部分;而在这里,CMake 使用本模块的 `ndkVersion`
在 `minSdk` 下进行构建。该助手对两者都不依赖——无论哪种方式它都是同一个程序,
并且应用搭载的副本就是在此处构建的那个。
关于它有两点至关重要,但很容易被意外破坏:它必须是一个**可执行文件**(`add_executable` 加上 `-pie`,使其具有共享库所不具备的 `PT_INTERP` 段),并且它必须被**命名为 `lib*.so`** 且设置
`jniLibs.useLegacyPackaging = true`,因为这样才能将其作为真实文件提取到
`nativeLibraryDir` 中,并设置可执行权限位。这两点在设置它们的
位置都加了注释。
仅限在您拥有或获得明确授权进行测试的设备上使用。标签:Android, Bash脚本, DSL, Root, Web报告查看器, 后台面板检测, 提权, 移动端工具