indev.ghostlock.s26)针对 1ndevelopment/ghostlock-s26 的一键式 Android 封装: GhostLock(CVE-2026-43499)已移植到 整个三星 Galaxy S26 系列 (Android 16 / GKI 6.12)。一个 APK,三条内核线,运行时参数 匹配——无需针对每个构建版本制作应用变体。
仅可在你拥有或明确获授权测试的设备上使用。 临时 root 会在重启后消失。同一次启动中第二次运行漏洞利用可能 导致设备崩溃——重试前请先重启。
该漏洞利用按 内核线 匹配,而非按单个构建版本
(exploit/src/params_table.c 为权威来源;ParamsTable.kt 仅为 UI 判定而镜像该表):
| 设备代号 | 市场名称 | SoC | 内核线 |
|---|---|---|---|
| m1q | Galaxy S26 (SM-S942x) | Snapdragon | cn 或 intl(按 CSC) |
| m2q | Galaxy S26+ (SM-S947x) | Snapdragon | cn 或 intl(按 CSC) |
| m3q | Galaxy S26 Ultra (SM-S948x) | Snapdragon | cn 或 intl(按 CSC) |
| m1s | Galaxy S26 (SM-S942B) | Exynos | exynos |
| m2s | Galaxy S26+ (SM-S947B) | Exynos | exynos |
已测试构建(17 个):S9420ZCS4AZG1、S9470ZCS4AZG1、S9480ZCS3AZF1、 S9480ZCS4AZG1、S942BXXS4AZG5、S947BXXS3AZF1、S947BXXS4AZG5、 S942QOPU1AZDE、S942U1UES4AZG3、S942USQS4AZG3、S947USQS4AZG3、 S9480ZHS4AZG1、S948BXXS4AZG5/6、S948NKSS4AZG3、S948U1UES2AZE1、 S948USQS4AZG3。
未知 OTA 的回退方式与上游 params.c 完全一致:先精确匹配构建版本,
然后同型号 + 3 字符 CSC(OTA 复用),再然后同设备最新条目
(标记为未验证),否则 失败关闭(应用显示 UNSUPPORTED,原生层
以退出码 2 退出)。完全未知的型号会被拒绝——绝不强制尝试。
一个大按钮——Root my S26——运行整个流程,并在 Output 卡片中实时叙述:
adb shell 流程相同的上下文家族)。权限在启动时请求
一次(若服务器重启则再次请求);Root 流程会等待
授权而非放弃。若服务器未运行,应用会打开 Shizuku 管理器以便你启动它,
然后回退到应用内 shell。
将应用加入 Shizuku 允许列表可完全消除该提示。preload.so、su_daemon、ksud 复制到 /data/local/tmp
(preload.so、cve-2026-43499-root、ksud)并对其执行 chmod。如果你
已按上游 README 通过 adb push 推送了这些文件,它们会被
就地采用。env LD_PRELOAD=/data/local/tmp/preload.so sh(.so 构造函数运行
整条链并 _exit;stdout 漏洞利用日志),最多尝试 5 次——
该竞态是概率性的。提供 开关,但
重启更安全。其下方:单行 命令字段 + Run as root(通过 su 守护进程的 C 协议执行一次性命令;
交互式 PTY 不在 v1 范围内),
以及一个小型 Reset 链接,用于清除 /data/local/tmp/ghostlock-boot.log
以便无需重启即可重试运行(上游警告这可能引发 panic——
重启才是安全路径)。
exploit/ 内置上游(Makefile + src/,权威来源)
ksud 上游预构建 KernelSU 加载器(ARM64 PIE,也位于 assets 中)
app/src/main/assets/ksud APK 中随附的暂存副本
app/src/main/assets/ + 运行 stage-assets.sh 后的 preload.so / su_daemon
app/src/main/cpp/ 可选的 CMake 重新构建,从 exploit/src 构建 preload.so
app/src/main/java/indev/ghostlock/s26/
MainActivity.kt UI(设备 / 暂存 / 运行 / shell / 启动保护)
ParamsTable.kt 系列表镜像(17 个构建、3 条线、5 个代号)
DeviceCompat.kt Build.* 标识 + 系列判定
ShellRunner.kt Shizuku(uid 2000)+ 本地回退、暂存
SuClient.kt /data/local/tmp/temp_su.sock 'C' 模式客户端
GhostlockManager.kt 退出码解释器(0/1/2/3/4)
PORTING.upstream.md 移植说明(新固件 = 新 device_map 行)
要求:Android Studio(JBR 21)/ SDK 35 / NDK r26+ / CMake 3.22.1 / JDK 17。
# 1. Build the native payloads with the NDK (upstream flow):
cd exploit && make preload
# -> build/bin/preload.so, build/embed/su_daemon_aarch64_pie
# 2. Stage them into the APK assets:
./stage-assets.sh
# 3. Build the app:
./gradlew :app:assembleDebug
# -> app/build/outputs/apk/debug/app-debug.apk
ksud 已内置(ksud + app/src/main/assets/ksud),因此步骤 1–2
仅生成两个 NDK 输出。app/src/main/cpp/CMakeLists.txt 中的 CMake 目标
还可以从相同源码在 APK 内重新构建 libpreload.so
作为回退。
SDK 的 aapt2/NDK 是 x86_64,无法在设备上执行。已验证
流程(SDK 位于 ~/android-sdk,Gradle 8.9——AGP 8.5.2 拒绝
系统 Gradle 9.x):
# Native payloads with the Termux toolchain (API 35 target, system liblog):
cd exploit
clang -O2 --target=aarch64-linux-android35 -fPIE -pie -Isrc src/su_daemon.c \
-o build/embed/su_daemon_aarch64_pie
clang -O2 --target=aarch64-linux-android35 -fPIC -Isrc \
-Wno-unused-parameter -Wno-sign-compare -Wno-unused-function -Wno-macro-redefined \
src/main.c src/util.c src/bootclaim.c src/slide.c src/fops.c src/attr.c \
src/root.c src/params.c src/params_table.c src/preload.c \
-L/system/lib64 -llog -shared -o build/bin/preload.so
cd .. && ./stage-assets.sh
# APK (CMake native step auto-skips without SDK cmake; Termux aarch64 aapt2
# is injected via -P so checked-in files stay workstation-clean):
env ANDROID_HOME=~/android-sdk ANDROID_SDK_ROOT=~/android-sdk \
JAVA_HOME=$PREFIX/lib/jvm/java-21-openjdk \
~/gradle-dists/gradle-8.9/bin/gradle :app:assembleDebug --console=plain \
-Pandroid.aapt2FromMavenOverride=$(command -v aapt2)
uid=0 …。然后在 Root shell 卡片中运行命令。me.weishu.kernelsu);
守护进程会自动延迟加载 ksud(参见 su_daemon.c 的 K 模式)。Shizuku 是可选的,但强烈推荐:上游流程从
adb shell 运行(uid 2000,shell SELinux 上下文),而应用内回退
(untrusted_app)在 /data/local/tmp 上被 LD_PRELOAD/exec 阻止的可能性要大得多。
exploit/ + PORTING.upstream.md + ksud 来自
1ndevelopment/ghostlock-s26(Apache-2.0;参见 LICENSE.upstream、
NOTICE.upstream)。该应用未将任何漏洞利用代码链接进自身进程——
它暂存 NDK 构建的文件并启动文档所述的 LD_PRELOAD shell。BOOT_FORCE=1id 报告 uid=0:
先尝试临时守护进程套接字,然后尝试 KernelSU 风格的 su。这很重要,因为
在完全成功时 su_daemon 会按设计解除其套接字链接并退出
(移交给 KernelSU)——临时套接字已死但 su 可用意味着已 root,
而非损坏。打印 boot-claim 日志尾部并报告已 root /
退出码建议。| 代码 | 含义 | 该怎么做 |
|---|
| 0 | 成功(套接字已建立,ksud 延迟加载正常) | 检查 root,使用 shell |
| 1 | 竞态未命中 / 验证失败 | 直接重试(正常) |
| 2 | 不支持的构建(失败关闭) | 停止;固件需要移植 |
| 3 | carrier/root 失败 | 下次尝试前重启 |
| 4 | 本次启动已运行过 | 重启;BOOT_FORCE=1 可覆盖但可能崩溃 |