
GhostLock(CVE-2026-43499)Galaxy S26シリーズ向けアプリ
indev.ghostlock.s26)1ndevelopment/ghostlock-s26 のワンクリックAndroidラッパー: GhostLock (CVE-2026-43499) を Samsung Galaxy S26シリーズ全体 (Android 16 / GKI 6.12) に移植。単一のAPK、3つのカーネルライン、実行時パラメータマッチング - ビルドごとのアプリバリアントは不要。
所有しているデバイス、または明示的にテストを許可されたデバイスでのみ使用してください。 一時rootは再起動で消えます。同じブート内で2回目のエクスプロイトを実行すると デバイスがクラッシュする可能性があります - 再試行する前に再起動してください。
エクスプロイトは個々のビルドではなく カーネルライン でマッチングします
(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再利用)、次に同一デバイスの最新エントリ
(未検証としてフラグ付け)、それ以外は fail-closed (アプリはUNSUPPORTEDを表示し、
ネイティブ層は終了コード2で終了)。完全に未知のモデルは拒否されます - 強制実行は決してされません。
大きなボタンが1つ - Root my S26 - パイプライン全体を実行し、Outputカードに ナレーションを表示します:
adb shell
フローと同じコンテキストファミリー)。権限は起動時に一度要求され (サーバーが再起動した
場合は再度要求)、Rootフローは中断せずに許可を待ちます。サーバーが停止している場合、
アプリはShizukuマネージャーを開いて起動できるようにし、その後アプリ内シェルに
フォールバックします。アプリを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 のコンストラクタがチェーンを
実行して します; stdoutが エクスプロイトログです)、最大5回試行 -
レースは確率的です。 スイッチも利用可能ですが、再起動のほうが安全です。その下に: 単一の コマンドフィールド + Run as root 行 (su daemonの C プロトコル経由の
ワンショットコマンド; 対話型PTYはv1の対象外)、および小さな Reset リンクがあり、
/data/local/tmp/ghostlock-boot.log をクリアして再起動せずに実行を再試行できます
(上流はこれがパニックを引き起こす可能性があると警告しています - 再起動が安全な方法です)。
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/ exploit/srcからのpreload.soのオプションCMake再ビルド
app/src/main/java/indev/ghostlock/s26/
MainActivity.kt UI (device / stage / run / shell / boot guard)
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. NDKでネイティブペイロードをビルド (上流フロー):
cd exploit && make preload
# -> build/bin/preload.so, build/embed/su_daemon_aarch64_pie
# 2. それらをAPKアセットにステージング:
./stage-assets.sh
# 3. アプリをビルド:
./gradlew :app:assembleDebug
# -> app/build/outputs/apk/debug/app-debug.apk
ksud はすでにベンダリングされている (ksud + app/src/main/assets/ksud) ため、
ステップ1〜2は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を拒否):
# Termuxツールチェーンでのネイティブペイロード (API 35ターゲット、システム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ネイティブステップはSDK cmakeなしで自動スキップ; Termux aarch64 aapt2
# は-P経由で注入され、チェックインされたファイルはワークステーションクリーンのまま):
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) をインストール/使用してください;
daemonは 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 シェルを起動するだけです。_exitBOOT_FORCE=1id が uid=0 を報告することを確認します:
まずtemp-daemonソケット、次にKernelSU形式の su。これが重要なのは、完全成功時に
su_daemonが 設計上ソケットをunlinkして終了する (KernelSUへのハンドオーバー) ためです -
死んだtempソケットでも su が機能していれば、壊れているのではなくroot化されています。
boot-claimログの末尾を表示し、root化済み / 終了コードのアドバイスを報告します。| コード | 意味 | 対処 |
|---|
| 0 | 成功 (ソケット起動、ksudレイトロードOK) | Check root、シェルを使用 |
| 1 | レース失敗 / 検証失敗 | ただ再試行 (正常) |
| 2 | 非対応ビルド (fail-closed) | 停止; ファームウェアに移植が必要 |
| 3 | carrier/root失敗 | 次の試行の前に再起動 |
| 4 | このブートで既に実行済み | 再起動; BOOT_FORCE=1 で上書き可能だがクラッシュの恐れ |