Shizuku Privileged API
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。
Shizuku 是一个开源服务,使用 app_process
启动一个特权 Java 进程,并通过 Binder 暴露选定的 Android 系统 API。由于该进程以与 ADB 相同的 shell
UID 权限启动,任何绑定到导出的 AIDL 接口的应用程序(或终端)都可以执行许多通常需要 WRITE_SECURE_SETTINGS
、INSTALL_PACKAGES
、在 /data
内的文件 I/O 等操作 – 无需获取设备的 root 权限。
典型用例:
- 从未 root 的手机进行安全审计
- 移除预装软件 / 精简系统应用
- 收集日志、Wi-Fi 密钥、进程和套接字信息以供蓝队/DFIR 使用
- 从自定义应用或 shell 脚本自动配置设备
1. 启动特权服务
moe.shizuku.privileged.api
可以通过三种不同方式启动 – 结果 Binder 服务在所有情况下表现相同。
1.1 无线 ADB (Android 11+)
- 启用 开发者选项 ➜ 无线调试 并配对设备。
- 在 Shizuku 应用中选择 “通过无线调试启动” 并复制配对代码。
- 服务在下次重启之前保持有效(无线调试会话在启动时清除)。
1.2 USB / 本地 ADB 一行命令
adb push start.sh \
/storage/emulated/0/Android/data/moe.shizuku.privileged.api/
# spawn the privileged process
adb shell sh /storage/emulated/0/Android/data/moe.shizuku.privileged.api/start.sh
同样的脚本可以通过 network ADB 连接执行(adb connect <IP>:5555
)。
1.3 已获取root权限的设备
如果设备已经获取root权限,请运行:
su -c sh /data/adb/shizuku/start.sh
1.4 验证它是否正在运行
adb shell dumpsys activity service moe.shizuku.privileged.api | head
成功启动会返回 Running services (1)
以及特权进程的 PID。
2. 从应用程序绑定
第三方应用只需在其 AndroidManifest.xml
中包含以下内容:
<uses-permission android:name="moe.shizuku.manager.permission.API"/>
在运行时,他们获取了 binder:
IBinder binder = ShizukuProvider.getBinder();
IPackageManager pm = IPackageManager.Stub.asInterface(binder);
从此时起,应用程序可以调用任何**shell
用户**可能调用的方法,例如:
pm.installPackage(new Uri("file:///sdcard/app.apk"), null, 0, null);
Settings.Global.putInt(resolver, Settings.Global.ADB_ENABLED, 1);
维护着一个超过 170 个 Shizuku 启用应用程序 的精选列表,地址在 awesome-shizuku。
3. Rish – 在 Termux 中的提升 shell
Shizuku 设置屏幕显示 “在终端应用中使用 Shizuku”。启用它会下载 rish (/data/local/tmp/rish
)。
pkg install wget
wget https://rikka.app/rish/latest -O rish && chmod +x rish
# start elevated shell (inherits the binder connection)
./rish
whoami # ➜ shell
id # uid=2000(shell) gid=2000(shell) groups=... context=u:r:shell:s0
3.1 有用的 rish shell 命令
- 列出给定包的运行进程:
ps -A | grep com.facebook.katana
- 枚举监听套接字并将其映射到包(例如 CVE-2019-6447 ES File Explorer):
netstat -tuln
for pid in $(lsof -nP -iTCP -sTCP:LISTEN -t); do
printf "%s -> %s\n" "$pid" "$(cat /proc/$pid/cmdline)";
done
- 转储每个应用程序的日志:
logcat -d | grep -iE "(error|exception)"
- 读取存储的 Wi-Fi 凭据(Android 11 及以上):
cat /data/misc/wifi/WifiConfigStore.xml | grep -i "<ConfigKey>"
- 批量卸载(示例):
pm uninstall --user 0 com.miui.weather2
4. 安全考虑 / 检测
- Shizuku 需要 ADB 调试 权限,因此 开发者选项 → USB/无线调试 必须 启用。
组织可以通过 MDM 或
settings put global development_settings_enabled 0
来阻止此操作。 - 该服务以
moe.shizuku.privileged.api
的名称注册自己。 简单的adb shell service list | grep shizuku
(或端点安全规则)可以检测到它的存在。 - 功能仅限于
shell
用户已经可以做的事情 – 它 不是 root。 需要system
或root
用户的敏感 API 仍然无法访问。 - 会话在重启后 不会存活,除非设备已获得 root 权限并且 Shizuku 被配置为启动守护进程。
5. 缓解措施
- 在生产设备上禁用 USB/无线调试。
- 监控暴露
moe.shizuku.privileged.api
的 Binder 服务。 - 使用 SELinux 策略(Android 企业)阻止未管理应用程序访问 AIDL 接口。
参考文献
- Blog – Shizuku: Unlocking Advanced Android Capabilities Without Root
- Shizuku 官方文档
- awesome-shizuku – 支持的应用程序列表
- rish shell (特权反向 adb shell)
tip
学习和实践 AWS 黑客技术:HackTricks Training AWS Red Team Expert (ARTE)
学习和实践 GCP 黑客技术:HackTricks Training GCP Red Team Expert (GRTE)
学习和实践 Azure 黑客技术:
HackTricks Training Azure Red Team Expert (AzRTE)
支持 HackTricks
- 查看 订阅计划!
- 加入 💬 Discord 群组 或 Telegram 群组 或 在 Twitter 🐦 上关注我们 @hacktricks_live.
- 通过向 HackTricks 和 HackTricks Cloud GitHub 仓库提交 PR 来分享黑客技巧。