-
Notifications
You must be signed in to change notification settings - Fork 2
Privilege Chain
AceGuru-mjh edited this page Oct 1, 2026
·
4 revisions
同一个
shell_execute工具,在有 Root / 有 Shizuku / 什么都没有的设备上都能用, 只是能做的事不同 —— 这是platform:privilege存在的全部理由。
┌──────────────────────── 优先级递降 ────────────────────────┐
│ ① 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 与私有目录的文件操作 |
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)"]
Note
探测失败向安全侧收敛:宁可按低权限执行,也不要尝试一次注定失败的特权命令。
三级 shell 共享同一条流式读取管道:
-
ProcessStreamFactory按当前级别产出ShellStreamSource(普通进程 / Root 进程 / Shizuku 进程); -
ShizukuStreamAdapter把Shizuku.newProcess的 IO 适配到同一接口; -
stderr行自动加[stderr]前缀,与 stdout 交错实时上屏 —— 长时间安装/编译命令不会"黑屏等到死"。
stdout ─┐
├─▶ ShellStreamSource(流式 Flow)──▶ UI / 工具流式输出
stderr ─┘ ([stderr] 前缀,保留顺序)
| 组件 | 位置 | 作用 |
|---|---|---|
ApexAccessibilityService |
platform/privilege/.../accessibility/ |
提供 ui_tap / ui_swipe / ui_dump / input_text 的底层能力 |
PrivilegedCommandSpawner |
app/tools/ |
需要更高权限的命令落脚点 |
RiskAwareToolGate |
app/tools/ |
destructive 工具的人工确认(注入 UserQuestionGateway) |
无 Root + 无 Shizuku 时仍可用无障碍完成大部分"看屏 + 点按"。
| 能力 | Root | Shizuku | 沙箱 shell | 无障碍 |
|---|---|---|---|---|
读 /sdcard 文件 |
✅ | ✅ | ✅ | — |
写 /sdcard 文件 |
✅ | ✅ | ✅ | — |
| 安装 APK | ✅ | ✅ | ❌ | — |
| 读取系统设置 | ✅ | ✅ | 部分 | — |
| 写入系统设置 | ✅ | ✅ | ❌ | — |
| 模拟输入 / 截屏 | ✅ | ✅ | ❌ | ✅ |
| UI 树 dump / 点按 | ✅ | ✅ | ❌ | ✅ |
读写 /system
|
✅ | ❌ | ❌ | — |
iptables / ptrace
|
✅ | ❌ | ❌ | — |
| 完整 Linux 发行版(PRoot) | ✅(更快) | ✅ | ✅¹ | — |
¹ PRoot 是用户态 ptrace 沙箱,因此免 Root 也能跑 Ubuntu —— 见 终端运行时。
- 什么都不用装 → 先玩文件/对话/记忆;
- 想不 Root 也能装应用、改设置 → 装 Shizuku(推荐绝大多数人走到这一步);
- 想 UI 自动化 / cs-mem 屏幕感知 → 开无障碍服务;
- 已 Root → 自动解锁全系统上限(无需额外配置)。
- 权限级别只影响能调用什么,不影响是否确认:破坏性操作仍走 工具系统 的风险门 (HIGH 风险工具会要求人工确认);
- UI 自动化与 cs-mem 屏幕感知同属"可被滥用的能力",因此 cs-mem 带 记忆免疫系统,防御悬浮窗钓鱼与无障碍劫持。
-
MCP 生态总览
新 - (沙箱 MCP · 官方 Hub · 逆向 Host · 门控语义)
- 终端运行时
- 终端 API 契约
- SDK 边界
- Termux 能力矩阵
- Ubuntu rootfs 供给
- Ubuntu 生命周期
- PRoot 二进制溯源
- VT100/ANSI 模拟器
- 终端性能
- 终端迁移
- 原生层 C++/JNI