
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, तीन kernel लाइनें, रनटाइम पैरामीटर मिलान - प्रति-बिल्ड ऐप वेरिएंट की आवश्यकता नहीं।
केवल उन्हीं डिवाइस पर उपयोग करें जिनका आप स्वामी हैं या जिन्हें परीक्षण के लिए स्पष्ट रूप से अधिकृत किया गया है। Temp root रीबूट पर समाप्त हो जाता है। उसी बूट में दूसरी बार exploit चलाने से डिवाइस क्रैश हो सकता है - दोबारा प्रयास करने से पहले रीबूट करें।
Exploit kernel लाइन के आधार पर मैच करता है, व्यक्तिगत बिल्ड के आधार पर नहीं
(exploit/src/params_table.c प्रामाणिक है; ParamsTable.kt केवल UI निर्णय के लिए
इसकी प्रतिलिपि है):
| डिवाइस कोडनेम | मार्केटिंग | 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 बिल्कुल upstream params.c की तरह fallback करते हैं: पहले सटीक बिल्ड,
फिर समान मॉडल + 3-अक्षर CSC (OTA पुनःउपयोग), फिर समान-डिवाइस की नवीनतम प्रविष्टि
(असत्यापित के रूप में चिह्नित), अन्यथा fail-closed (ऐप UNSUPPORTED दिखाता है और
native लेयर exit 2 करती है)। पूरी तरह अज्ञात मॉडल अस्वीकार किए जाते हैं - कभी
जबरदस्ती नहीं।
एक बड़ा बटन - Root my S26 - पूरी पाइपलाइन चलाता है और Output कार्ड में विवरण देता है:
adb shell फ़्लो के समान context परिवार)। अनुमति लॉन्च पर एक बार
माँगी जाती है (और सर्वर पुनः आरंभ होने पर दोबारा); Root फ़्लो बाहर निकलने के
बजाय अनुदान की प्रतीक्षा करता है। यदि सर्वर बंद है तो ऐप Shizuku मैनेजर खोलता है
ताकि आप इसे शुरू कर सकें, फिर in-app shell पर fallback करता है। ऐप को Shizuku
की allowlist में जोड़ने से प्रॉम्प्ट पूरी तरह हट जाता है।preload.so, su_daemon, ksud को /data/local/tmp में कॉपी करता है
(preload.so, cve-2026-43499-root, ksud) और उन्हें chmod करता है। यदि आपने
upstream README के अनुसार फ़ाइलें पहले ही adb push कर दी हैं, तो वे यथास्थान
उठा ली जाती हैं।env LD_PRELOAD=/data/local/tmp/preload.so sh ( कंस्ट्रक्टर चेन चलाता है और
करता है; stdout exploit लॉग है), 5 प्रयासों तक -
रेस संभाव्य है। एक स्विच उपलब्ध है लेकिन रीबूट करना अधिक सुरक्षित है।इसके नीचे: एक command फ़ील्ड + Run as root पंक्ति (su daemon के C प्रोटोकॉल के
माध्यम से one-shot कमांड; इंटरैक्टिव PTY v1 के दायरे से बाहर है), और एक छोटा
Reset लिंक जो /data/local/tmp/ghostlock-boot.log साफ़ करता है ताकि रीबूट किए
बिना रन दोबारा आज़माया जा सके (upstream चेतावनी देता है कि इससे panic हो सकता है -
रीबूट सुरक्षित रास्ता है)।
exploit/ vendored upstream (Makefile + src/, प्रामाणिक)
ksud upstream prebuilt KernelSU loader (ARM64 PIE, assets में भी)
app/src/main/assets/ksud APK में शिप की गई staged प्रतिलिपि
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) + स्थानीय fallback, staging
SuClient.kt /data/local/tmp/temp_su.sock 'C'-मोड क्लाइंट
GhostlockManager.kt exit-code व्याख्याकार (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 के साथ native payloads बनाएँ (upstream फ़्लो):
cd exploit && make preload
# -> build/bin/preload.so, build/embed/su_daemon_aarch64_pie
# 2. उन्हें APK assets में stage करें:
./stage-assets.sh
# 3. ऐप बनाएँ:
./gradlew :app:assembleDebug
# -> app/build/outputs/apk/debug/app-debug.apk
ksud पहले से vendored है (ksud + app/src/main/assets/ksud) इसलिए चरण 1–2
केवल दो NDK आउटपुट उत्पन्न करते हैं। app/src/main/cpp/CMakeLists.txt में CMake
लक्ष्य fallback के रूप में APK के अंदर उन्हीं स्रोतों से libpreload.so का
पुनर्निर्माण भी कर सकता है।
SDK के aapt2/NDK x86_64 हैं और ऑन-डिवाइस निष्पादित नहीं हो सकते। सत्यापित
प्रक्रिया (SDK ~/android-sdk पर, Gradle 8.9 - AGP 8.5.2 सिस्टम Gradle 9.x को
अस्वीकार करता है):
# Termux टूलचेन के साथ native payloads (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 native चरण SDK cmake के बिना स्वतः छूट जाता है; Termux aarch64 aapt2
# -P के माध्यम से इंजेक्ट किया जाता है ताकि checked-in फ़ाइलें वर्कस्टेशन-क्लीन रहें):
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 late-load करता है (su_daemon.c K मोड देखें)।Shizuku वैकल्पिक है लेकिन दृढ़ता से अनुशंसित: upstream फ़्लो adb shell (uid 2000,
shell SELinux context) से चलता है, और in-app fallback (untrusted_app) के
/data/local/tmp पर LD_PRELOAD/exec से अवरुद्ध होने की संभावना बहुत अधिक है।
exploit/ + PORTING.upstream.md + ksud
1ndevelopment/ghostlock-s26 से (Apache-2.0; LICENSE.upstream,
NOTICE.upstream देखें)। ऐप अपनी प्रक्रिया में कोई exploit कोड लिंक नहीं करता -
यह NDK-निर्मित फ़ाइलों को stage करता है और दस्तावेज़ित LD_PRELOAD shell को
spawn करता है।.so_exitBOOT_FORCE=1id किसी भी चैनल के माध्यम से uid=0 रिपोर्ट
करता है: पहले temp-daemon socket, फिर KernelSU-शैली su। यह महत्वपूर्ण है क्योंकि
पूर्ण सफलता पर su_daemon डिज़ाइन के अनुसार अपना socket unlink करके बाहर निकल
जाता है (KernelSU को हैंडओवर) - मृत temp socket के साथ कार्यशील su का अर्थ है
rooted, टूटा हुआ नहीं। boot-claim लॉग का अंतिम भाग प्रिंट करता है और rooted /
exit-code सलाह रिपोर्ट करता है।| कोड | अर्थ | क्या करें |
|---|
| 0 | सफलता (socket up, ksud late-load OK) | Check root, shell का उपयोग करें |
| 1 | रेस चूकी / सत्यापन विफल | बस दोबारा प्रयास करें (सामान्य) |
| 2 | असमर्थित बिल्ड (fail-closed) | रुकें; फ़र्मवेयर को पोर्ट चाहिए |
| 3 | carrier/root विफल | अगले प्रयास से पहले रीबूट करें |
| 4 | इस बूट में पहले ही चल चुका | रीबूट करें; BOOT_FORCE=1 ओवरराइड करता है पर क्रैश हो सकता है |