SKRoot Pro 奥创版是SKRoot的最新专业版本,专门针对Linux 6.6内核深度优化。基于超强隐蔽版架构,新增三个Phase的增强功能。
| 版本 | 特性 |
|---|---|
| Lite版 | 基础ROOT + SELinux绕过 |
| Pro版 | 模块系统 + 动态Hook |
| 超强隐蔽版 | .text段NOP注入 + 分布式存储 |
| 奥创版 | 内存安全 + prctl通信 + dm-verity绕过 |
- 内存边界检查: CMD 1/2验证内核地址范围(高16位=0xFFFF)
- 块复制优化: 8字节批量复制,性能提升8倍
- 缓存刷新: CMD 5添加DC/IC/DSB/ISB序列确保Hook立即生效
- 错误码体系: CommError命名空间定义-1到-7错误码
- 进程隐藏:
.sk_前缀文件/进程在/proc中不可见 - SELinux动态控制: CMD 9运行时切换enforcing/permissive
- 反检测框架: kallsyms过滤、maps隐藏、完整性检查绕过
- prctl通信: 比execve更隐蔽,难以被strace检测
- dm-verity绕过: 绕过Android根文件系统完整性验证
- syscall符号支持: sys_call_table地址查找
patch_kernel_sk/
├── patch_kernel_sk.cpp # 主程序
├── patch_kernel_sk.h # 主头文件
├── patch_base_6_6.h/cpp # 6.6专用基类
├── patch_do_execve_6_6.h/cpp # execve提权hook
├── patch_communication.h/cpp # 通信处理器 (含奥创版增强)
├── patch_hook_area.h/cpp # Hook跳板区
├── patch_avc_denied_6_6.h/cpp # SELinux绕过
├── patch_audit_log_start_6_6.h/cpp # 审计日志隐藏
├── patch_filldir64_6_6.h/cpp # 目录隐藏
├── patch_current_avc_check_6_6.h/cpp # AVC检查函数
├── # 奥创版新增
├── patch_proc_hide_6_6.h/cpp # 进程隐藏
├── patch_selinux_6_6.h/cpp # SELinux增强
├── patch_anti_detect_6_6.h/cpp # 反检测
├── patch_prctl_comm_6_6.h/cpp # prctl通信
├── patch_verity_bypass_6_6.h/cpp # dm-verity绕过
├── analyze/ # 符号分析
└── 3rdparty/ # 第三方库
docker build -t skroot-ultron .
docker run --rm -v $(pwd)/output:/output skroot-ultronmkdir build && cd build
cmake ..
make -j$(nproc)magiskboot unpack boot.img
# 得到 kernel 文件# 自动模式
./patch_kernel_sk kernel --auto
# 交互模式
./patch_kernel_sk kernelmagiskboot repack boot.img
fastboot flash boot new-boot.img格式: /<root_key>/<cmd>/<param1>/<param2>/...
命令码:
1 = 读取内核内存: /key/1/<kaddr>/<size>/<user_buf>
2 = 写入内核内存: /key/2/<kaddr>/<size>/<user_buf>
3 = 执行shellcode: /key/3/<code_addr>/<result_buf>
4 = 符号查找: /key/4/<name_ptr>/<result_buf>
5 = 安装Hook: /key/5/<target_addr>/<hook_handler>/<result_buf>
6 = 分配内核内存: /key/6/<size>/<result_buf>
7 = 释放内核内存: /key/7/<kaddr>
8 = 获取Hook区信息: /key/8/<result_buf>
9 = SELinux切换: /key/9/<state>/<result_buf> (奥创版新增)
// 操作码: 0x534B0000 - 0x534BFFFF
prctl(0x534B0000, key_ptr, 0, 0, 0); // 认证
prctl(0x534B0001, kaddr, size, ubuf, 0); // 读内存
prctl(0x534B0002, kaddr, size, ubuf, 0); // 写内存
prctl(0x534B0003, code_addr, result_ptr, 0, 0);// 执行
prctl(0x534B0004, name_ptr, result_ptr, 0, 0); // 符号查找
prctl(0x534B0009, 0, 0, 0, 0); // 提权
prctl(0x534B0008, state, result_ptr, 0, 0); // SELinux#include "module_base_kernel_mem.h"
kernel_module::init_root_key("your_48_char_root_key");
uint64_t kaddr = 0xffff800012340000;
uint8_t buf[128];
KModErr err = kernel_module::read_kernel_mem(kaddr, buf, sizeof(buf));#include "module_prctl_comm.h"
using namespace kernel_module::prctl_comm;
// 检查可用性
if (is_available()) {
// 认证
authenticate("your_48_char_root_key");
// 读内核内存
uint8_t buf[128];
read_kernel_mem(0xffff800012340000, buf, sizeof(buf));
// 获取ROOT
get_root();
// 设置SELinux为permissive
int old_state;
set_selinux(0, &old_state);
}| 错误码 | 名称 | 说明 |
|---|---|---|
| 0 | OK | 成功 |
| -1 | ERR_INVALID_CMD | 无效命令码 |
| -2 | ERR_INVALID_ADDR | 无效地址 |
| -3 | ERR_SIZE_TOO_LARGE | 请求大小超限(>1MB) |
| -4 | ERR_SYMBOL_NOT_FOUND | 符号未找到 |
| -5 | ERR_ALLOC_FAILED | 内存分配失败 |
| -6 | ERR_HOOK_RANGE | Hook跳转超出±128MB |
| -7 | ERR_NOT_AVAILABLE | 功能不可用 |
- 仅支持Linux 6.6内核: ARM64架构
- 需要解锁Bootloader: 刷入修改后的boot.img需要解锁
- 建议先测试: 在QEMU/模拟器中测试后再刷入实机
- 保留备份: 操作前务必备份原始boot.img
- 内核修改可能导致设备无法启动
- 错误的Hook可能导致系统崩溃
- dm-verity绕过可能影响OTA更新
- 请确保了解所有操作的后果
- 新增Phase 1-3全部功能
- prctl隐蔽通信
- dm-verity绕过框架
- 内存安全检查
- SELinux动态控制
- .text段NOP注入
- 分布式代码存储
- 文件大小不变
- 模块系统
- 动态Hook
- 内核内存操作
本项目仅供学习研究使用。