Skip to content

Privilege Chain

AceGuru-mjh edited this page Oct 1, 2026 · 4 revisions

权限执行链

🔧 能力 · 🏠 首页 › Privilege-Chain

Home Version Kotlin Modules Tools License

Privilege-Chain

📑 本页目录

同一个 shell_execute 工具,在有 Root / 有 Shizuku / 什么都没有的设备上都能用, 只是能做的事不同 —— 这是 platform:privilege 存在的全部理由。

1. 三级特权模型

┌──────────────────────── 优先级递降 ────────────────────────┐
│ ① Root      su -c                    全系统:/system /data mount │
│                                          SELinux iptables ptrace │
│ ② Shizuku   Shizuku.newProcess        ADB 级(uid=2000):pm install│
│             (uid=2000,无需 root)      am start/stop settings put│
│                                          dumpsys input screencap  │
│ ③ Shell     sh -c                     应用沙箱:/sdcard 基本文件操作│
└──────────────────────────────────────────────────────────────────┘
级别 PrivilegeLevel 获取条件 典型能力
① ROOT 设备已 Root 且 su 可用 全系统:挂载、SELinux、iptables、ptrace、系统分区读写
② SHIZUKU 安装 Shizuku 并对本应用授权 ADB 级(uid=2000):pm install / am start / settings put / input / dumpsys / screencap
③ NORMAL_SHELL 永远可用 应用沙箱 sh -c:/sdcard 与私有目录的文件操作

2. 运行时探测

flowchart TD
    A["PrivilegeDetector.detect()"] --> B{"su 二进制扫描<br/>+ binder 活性 + 授权检查"}
    B -->|Root 可用| R["ROOT"]
    B -->|否| C{"Shizuku binder 存活<br/>且已授权?"}
    C -->|是| S["SHIZUKU"]
    C -->|否| N["NORMAL_SHELL"]
    R --> Z["PrivilegeManager.getPrivilegeLevel()"]
    S --> Z
    N --> Z
    Z --> P["PrivilegeInfoProvider → 注入系统提示"]
    P --> M["模型知道:我能做什么 / 缺什么权限<br/>(缺权限时建议用户装 Shizuku)"]
Loading

Note

探测失败向安全侧收敛:宁可按低权限执行,也不要尝试一次注定失败的特权命令。

3. 统一流式管道

三级 shell 共享同一条流式读取管道:

  • ProcessStreamFactory 按当前级别产出 ShellStreamSource(普通进程 / Root 进程 / Shizuku 进程);
  • ShizukuStreamAdapter 把 Shizuku.newProcess 的 IO 适配到同一接口;
  • stderr 行自动加 [stderr] 前缀,与 stdout 交错实时上屏 —— 长时间安装/编译命令不会"黑屏等到死"。
stdout ─┐
        ├─▶ ShellStreamSource(流式 Flow)──▶ UI / 工具流式输出
stderr ─┘   ([stderr] 前缀,保留顺序)

4. 无障碍与 UI 自动化

组件 位置 作用
ApexAccessibilityService platform/privilege/.../accessibility/ 提供 ui_tap / ui_swipe / ui_dump / input_text 的底层能力
PrivilegedCommandSpawner app/tools/ 需要更高权限的命令落脚点
RiskAwareToolGate app/tools/ destructive 工具的人工确认(注入 UserQuestionGateway)

无 Root + 无 Shizuku 时仍可用无障碍完成大部分"看屏 + 点按"。

5. 权限矩阵(速查)

能力 Root Shizuku 沙箱 shell 无障碍
读 /sdcard 文件 ✅ ✅ ✅ —
写 /sdcard 文件 ✅ ✅ ✅ —
安装 APK ✅ ✅ ❌ —
读取系统设置 ✅ ✅ 部分 —
写入系统设置 ✅ ✅ ❌ —
模拟输入 / 截屏 ✅ ✅ ❌ ✅
UI 树 dump / 点按 ✅ ✅ ❌ ✅
读写 /system ✅ ❌ ❌ —
iptables / ptrace ✅ ❌ ❌ —
完整 Linux 发行版(PRoot) ✅(更快) ✅ ✅¹ —

¹ PRoot 是用户态 ptrace 沙箱,因此免 Root 也能跑 Ubuntu —— 见 终端运行时。

6. 给用户的建议顺序

  1. 什么都不用装 → 先玩文件/对话/记忆;
  2. 想不 Root 也能装应用、改设置 → 装 Shizuku(推荐绝大多数人走到这一步);
  3. 想 UI 自动化 / cs-mem 屏幕感知 → 开无障碍服务;
  4. 已 Root → 自动解锁全系统上限(无需额外配置)。

7. 安全边界

  • 权限级别只影响能调用什么,不影响是否确认:破坏性操作仍走 工具系统 的风险门 (HIGH 风险工具会要求人工确认);
  • UI 自动化与 cs-mem 屏幕感知同属"可被滥用的能力",因此 cs-mem 带 记忆免疫系统,防御悬浮窗钓鱼与无障碍劫持。

8. 相关页面

footer

🏠 返回首页 · 📚 文档索引 · ❓ FAQ · 🔧 故障排查 · 🗺️ 路线图 · 🐛 提 Issue

Android Guru Agent · v1.4.4 · Kotlin 2.0.21 · Compose · PRoot · Room

Clone this wiki locally