
# घोस्टलॉक वन-टैप निष्पादन ऐप (CVE-2026-43499)
中文: README_ZH.md
uname -r से मिलाता है और असमर्थित builds को अस्वीकार करता है, शीर्ष पर स्थिति दिखाते हुए। अंतर्निहित profiles app/src/main/assets/kernel_profiles/ में रहते हैं: प्रति release एक HOCON फ़ाइल, runtime index के रूप में index.conf, और <major.minor>-template.conf version-family templates।पूर्ण device-porting workflow, kernel-family template लिंक, और tuning rationale के लिए, Kernel Profile Porting Guide देखें।
स्पष्ट रूप से Shizuku required चिह्नित पंक्तियाँ shell UserService के माध्यम से चलती हैं। ADB के साथ Shizuku शुरू करें और पहुँच देने के लिए status card पर टैप करें; अन्य सभी पंक्तियाँ ऐप के सामान्य execution path का उपयोग करती हैं।
GhostLock खोलें और Run पर टैप करें। KernelSU (me.weishu.kernelsu), ReSukiSU (com.resukisu.resukisu), या KowSU (com.kowx712.supermanager) module loading के लिए ksud प्रदान करता है; इसके बिना, W1/W2 अभी भी uid 0 प्रदान करते हैं लेकिन कोई module लोड नहीं होता।
Execution chain तीन components की एक pipeline है: एक frontend (root_child startup/handoff), एक backend (CVE-2026-43499 futex primitive), और एक middleware route। Catalogued combinations build time पर instantiate होते हैं; resolved profile चुनता है कि कौन सा चलेगा। Route दो cores को race करता है: 6.6/6.12 tree-waiter kernels पर main thread select को hammer करता है जबकि एक consumer thread waiter की priority को perturb करता है; 6.1 compact-waiter kernels पर यह punched-hole page के माध्यम से getsockopt(TCP_ZEROCOPY_RECEIVE) को drive करता है; 5.15 kernels multicast waiter का उपयोग करते हैं। CPU pair भी resolved profile से आता है।
adb/shell में कोई seccomp filter नहीं है, इसलिए W3 छोड़ दिया जाता है - त्वरित सत्यापन के लिए उपयोगी:
make -C src ghostlock
./gradlew exportKernelProfiles
adb push build/native/ghostlock /data/local/tmp/ghostlock
adb push build/kernel-profiles/<release>.bin /data/local/tmp/profile.bin
adb shell chmod 755 /data/local/tmp/ghostlock
adb shell /data/local/tmp/ghostlock --load-prebuilt-profile /data/local/tmp/profile.bin
tools/extract_rs एक boot.img (साथ में वैकल्पिक xbl_config.img), एक पूर्ण OTA ZIP, या उसकी ओर इंगित करने वाले http(s) URL से offsets प्राप्त करता है। kallsyms --kallsyms से आते हैं या image की embedded table से recover किए जाते हैं। pselect_waiter_shift और off_slide_loggers_0_1 अंतर्निहित arm64 disassembler द्वारा प्राप्त किए जाते हैं। MediaTek images में xbl_config.img नहीं होता और आमतौर पर BTF भी नहीं: physical load address kallsyms _text से प्राप्त होता है (--phys से override करें)।
Push-Location tools/extract_rs
cargo build --release
Pop-Location
build/extract/release/ghostlock-extract.exe boot.img --xbl-config xbl_config.img --format conf --out profile.conf
build/extract/release/ghostlock-extract.exe OTA.zip --format conf --out profile.conf
--format conf extractor का output है: एक flattened, self-contained profile (कोई include lines नहीं, साझा 6.x credential/KernelSnitch constants inline, route --analysis evidence से चुना गया जब तक --route इसे override न करे)। Extractor वह हर field emit करता है जो image वास्तव में देता है और बाकी को छोड़ देता है; यह कभी भी पड़ोसी kernel family के अनुमानों (unverified-family 6.6, डिफ़ॉल्ट -2, 5.15 multicast constants, या एक phys default) से अंतराल नहीं भरता। प्रत्येक output एक unverified candidate है: importable और parseable, जिसमें missing या invalid fields ऐप के pre-execution validation द्वारा blocked होते हैं, इसलिए एक सफल run कभी भी device support का संकेत नहीं देता। 5.x पर यह init_cred से credential reference repair और BTF से multicast geometry भी प्राप्त करता है (docs/analysis/extractor-5x-derivation-plan.md देखें)। --format json v1 import path के लिए बना रहता है। एक built-in profile जोड़ने के लिए, matching version-family template को पूरा करें और validate करें, इसे एक standalone .conf profile के रूप में सहेजें, और इसे kernel_profiles/index.conf में जोड़ें। पुराना C offsets.h registry deprecated और हटा दिया गया है।
MediaTek images में xbl_config.img नहीं होता और आमतौर पर embedded BTF भी नहीं, इसलिए
extractor image से दो physical addresses (kernel_phys_load,
kernel_phys_offset) प्राप्त नहीं कर सकता और उन्हें null छोड़ देता है। Runtime तब
SoC formula पर fallback करता है, जो MediaTek पर W1 पर विफल हो जाता है। दोनों को भरने के लिए
rooted device पर अलग tools/mtk-phys/ extractor चलाएँ (यह
/proc/iomem पढ़ता है) और मानों को ऐप के advanced overrides में paste करें। देखें
MEDIATEK.md।
Extractor offsets निकालने से पहले remove_waiter() को disassemble करता है। Fix वाले kernels exit code 6 के साथ अस्वीकार किए जाते हैं; केवल vulnerable kernels आगे बढ़ते हैं।
एक पूर्ण OTA पूरी तरह से फ़ोन पर analyze किया जा सकता है: boot और xbl_config
स्वचालित रूप से extract होते हैं। ऐप sandbox के अंदर चलाते समय --work-dir को एक
app-writable dir दें। Cross-compile करें और push करें:
rustup target add aarch64-linux-android
$ndk = "$env:ANDROID_HOME\ndk\<version>\toolchains\llvm\prebuilt\windows-x86_64\bin"
$env:CC_aarch64_linux_android = "$ndk\aarch64-linux-android35-clang.cmd"
$env:AR_aarch64_linux_android = "$ndk\llvm-ar.exe"
$env:CARGO_TARGET_AARCH64_LINUX_ANDROID_LINKER = $env:CC_aarch64_linux_android
Push-Location tools/extract_rs
cargo build --release --target aarch64-linux-android
Pop-Location
adb push build/extract/aarch64-linux-android/release/ghostlock-extract /data/local/tmp/
adb shell /data/local/tmp/ghostlock-extract /sdcard/OTA.zip
नए kernels को अब ऐप rebuild की आवश्यकता नहीं है: Import offsets.conf (HOCON)
पर टैप करें और extractor की flattened .conf चुनें, या पुरानी JSON report के लिए Import offsets.json (v1)
का उपयोग करें। v1 JSON ऐप में convert किया जाता है, इसलिए device पर कुछ भी push नहीं करना पड़ता:
native हमेशा ऐप द्वारा stdin पर भेजे गए GLK1 document से शुरू होता है, और kernel को अस्वीकार करने से पहले
resolved profile के विरुद्ध वर्तमान uname -r से मिलाता है। Imports फ़ाइलों में merge होते हैं; पहले से
संग्रहीत release overwrite से पहले prompt करता है।
ऐप profile स्वयं भी generate कर सकता है — Parse OTA link (पूर्ण OTA ZIP
URL) और Parse image (boot.img + वैकल्पिक xbl_config.img) extractor को
in-process चलाते हैं और सफलता पर ऐप data dir में एक flattened .conf लिखते हैं: