
GhostLock (CVE-2026-43499) تطبيق لسلسلة Galaxy S26
indev.ghostlock.s26)غلاف Android بنقرة واحدة لـ 1ndevelopment/ghostlock-s26: GhostLock (CVE-2026-43499) مُنقول إلى سلسلة Samsung Galaxy S26 بالكامل (Android 16 / GKI 6.12). تطبيق APK واحد، ثلاثة خطوط kernel، مطابقة معاملات وقت التشغيل - بلا متغيرات تطبيق لكل إصدار.
استخدمه فقط على الأجهزة التي تملكها أو المصرّح لك صراحةً باختبارها. الـ root المؤقت يختفي عند إعادة التشغيل. تشغيل الاستغلال مرة ثانية في نفس جلسة الإقلاع قد يؤدي إلى انهيار الجهاز - أعد التشغيل قبل إعادة المحاولة.
يطابق الاستغلال حسب خط kernel، وليس حسب الإصدار الفردي
(exploit/src/params_table.c هو المرجع؛ ParamsTable.kt يحاكيه
لحكم الواجهة فقط):
| اسم الجهاز الرمزي | الاسم التجاري | SoC | خط Kernel |
|---|---|---|---|
| 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 الأصلي: الإصدار
المطابق أولًا، ثم نفس الطراز + CSC من 3 أحرف (إعادة استخدام OTA)، ثم أحدث
إدخال لنفس الجهاز (مُعلَّم كغير موثّق)، وإلا الفشل المُغلَق (يعرض التطبيق
UNSUPPORTED وتخرج الطبقة الأصلية بالرمز 2). الطرازات المجهولة تمامًا
تُرفض - ولا تُفرض أبدًا.
زر واحد كبير - Root my S26 - يشغّل خط الأنابيب بالكامل ويسرد التفاصيل في بطاقة Output:
adb shell في README). يُطلب الإذن مرة واحدة عند
التشغيل (ومرة أخرى إذا أُعيد تشغيل الخادم)؛ ينتظر تدفق Root المنح بدلًا
من التوقف. إذا كان الخادم متوقفًا يفتح التطبيق مدير Shizuku لتشغيله، ثم
يتراجع إلى shell داخل التطبيق. إضافة التطبيق إلى قائمة Shizuku المسموح
لها تُلغي الطلب تمامًا.preload.so، su_daemon، ksud إلى /data/local/tmp
(preload.so، cve-2026-43499-root، ksud) وينفّذ chmod عليها. إذا
كنت قد نفّذت adb push للملفات مسبقًا وفق README الأصلي، فسيتم التقاطها
في مكانها.env LD_PRELOAD=/data/local/tmp/preload.so sh (مُنشئ يشغّل السلسلة
ثم ؛ stdout سجل الاستغلال)، حتى 5 محاولات - السباق احتمالي.
مفتاح متاح لكن إعادة التشغيل أكثر أمانًا.أسفل ذلك: صف واحد حقل أمر + Run as root (أوامر لمرة واحدة عبر بروتوكول
C الخاص بـ su daemon؛ PTY التفاعلي خارج نطاق v1)، ورابط Reset صغير
يمسح /data/local/tmp/ghostlock-boot.log حتى يمكن إعادة محاولة التشغيل دون
إعادة تشغيل الجهاز (يحذّر الأصل من أن هذا قد يسبب panic - إعادة التشغيل هي
المسار الآمن).
exploit/ vendored upstream (Makefile + src/, authoritative)
ksud upstream prebuilt KernelSU loader (ARM64 PIE, also in assets)
app/src/main/assets/ksud staged copy shipped in the APK
app/src/main/assets/ + preload.so / su_daemon after stage-assets.sh
app/src/main/cpp/ optional CMake rebuild of preload.so from exploit/src
app/src/main/java/indev/ghostlock/s26/
MainActivity.kt UI (device / stage / run / shell / boot guard)
ParamsTable.kt series table mirror (17 builds, 3 lines, 5 codenames)
DeviceCompat.kt Build.* identity + series verdict
ShellRunner.kt Shizuku (uid 2000) + local fallback, staging
SuClient.kt /data/local/tmp/temp_su.sock 'C'-mode client
GhostlockManager.kt exit-code interpreter (0/1/2/3/4)
PORTING.upstream.md porting notes (new firmware = new device_map row)
المتطلبات: 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 الاثنين. هدف CMake في
app/src/main/cpp/CMakeLists.txt يمكنه إضافيًا إعادة بناء libpreload.so
من نفس المصادر داخل APK كخيار احتياطي.
aapt2/NDK الخاصان بـ SDK هما 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)؛
يقوم الـ daemon بتحميل ksud تلقائيًا متأخرًا (انظر وضع K في
su_daemon.c).Shizuku اختياري لكنه موصى به بشدة: التدفق الأصلي يعمل من adb shell
(uid 2000، سياق SELinux shell)، والتراجع داخل التطبيق (untrusted_app)
أكثر عرضة بكثير للحظر من LD_PRELOAD/exec على /data/local/tmp.
exploit/ + PORTING.upstream.md + ksud من
1ndevelopment/ghostlock-s26 (Apache-2.0؛ انظر LICENSE.upstream،
NOTICE.upstream). التطبيق لا يربط أي كود استغلال في عمليته الخاصة -
بل يجهّز الملفات المبنية بـ NDK ويشغّل shell LD_PRELOAD الموثّق..so_exitBOOT_FORCE=1id يُبلّغ عن uid=0 عبر أي قناة: مقبس
temp-daemon أولًا، ثم su بنمط KernelSU. هذا مهم لأنه عند النجاح الكامل
يقوم su_daemon بفصل مقبسه والخروج بحكم التصميم (تسليم إلى KernelSU) -
مقبس مؤقت ميت مع su يعمل يعني أنه مُجذَّر، وليس معطلًا. يطبع ذيل سجل
boot-claim ويُبلّغ عن rooted / نصيحة رمز الخروج.| الرمز | المعنى | ما يجب فعله |
|---|
| 0 | نجاح (المقبس يعمل، تحميل ksud المتأخر جيد) | تحقق من root، استخدم shell |
| 1 | فات السباق / فشل التحقق | أعد المحاولة فقط (طبيعي) |
| 2 | إصدار غير مدعوم (فشل مُغلَق) | توقف؛ البرنامج الثابت يحتاج نقلًا |
| 3 | فشل carrier/root | أعد التشغيل قبل المحاولة التالية |
| 4 | شُغّل بالفعل في هذا الإقلاع | أعد التشغيل؛ BOOT_FORCE=1 يتجاوز لكنه قد يسبب انهيارًا |