
GhostLock One-Tap Execution App (CVE-2026-43499)
中文: README_ZH.md
uname -r ab und lehnt nicht unterstützte Builds ab, wobei der Status oben angezeigt wird. Integrierte Profile liegen in app/src/main/assets/kernel_profiles/: eine HOCON-Datei pro Release, index.conf als Laufzeitindex und <major.minor>-template.conf-Vorlagen für Versionsfamilien.Den vollständigen Workflow zum Portieren auf Geräte, die Links zu den Kernel-Familienvorlagen und die Begründung für die Optimierungen finden Sie im Kernel Profile Porting Guide.
Zeilen, die ausdrücklich mit Shizuku erforderlich markiert sind, laufen über einen Shell-UserService. Starten Sie Shizuku mit ADB und tippen Sie auf die Statuskarte, um den Zugriff zu gewähren; alle anderen Zeilen verwenden den normalen Ausführungspfad der App.
Öffnen Sie GhostLock und tippen Sie auf Run. KernelSU (me.weishu.kernelsu), ReSukiSU (com.resukisu.resukisu) oder KowSU (com.kowx712.supermanager) stellt ksud für das Laden von Modulen bereit; ohne dies gewähren W1/W2 weiterhin uid 0, aber es wird kein Modul geladen.
Die Ausführungskette ist eine Pipeline aus drei Komponenten: einem Frontend (root_child-Start/Übergabe), einem Backend (dem CVE-2026-43499-Futex-Primitiv) und einer Middleware-Route. Die katalogisierten Kombinationen werden zur Build-Zeit instanziiert; das aufgelöste Profil wählt aus, welche ausgeführt wird. Die Route lässt zwei Kerne gegeneinander antreten: Bei den 6.6/6.12-Tree-Waiter-Kernels hämmert der Hauptthread auf select, während ein Consumer-Thread die Priorität des Waiters stört; bei den 6.1-Compact-Waiter-Kernels treibt sie getsockopt(TCP_ZEROCOPY_RECEIVE) durch eine Seite mit gestanztem Loch; die 5.15-Kernels verwenden den Multicast-Waiter. Das CPU-Paar stammt ebenfalls aus dem aufgelösten Profil.
adb/shell hat keinen seccomp-Filter, daher wird W3 übersprungen – praktisch für eine schnelle Verifizierung:
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 leitet Offsets aus einem boot.img (plus optionalem xbl_config.img), einem vollständigen OTA-ZIP oder einer http(s)-URL ab, die auf eines davon zeigt. kallsyms stammen aus --kallsyms oder werden aus der eingebetteten Tabelle des Images wiederhergestellt. pselect_waiter_shift und off_slide_loggers_0_1 werden vom integrierten arm64-Disassembler abgeleitet. MediaTek-Images haben kein xbl_config.img und meist kein BTF: Die physische Ladeadresse wird aus kallsyms _text abgeleitet (überschreibbar mit --phys).
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 ist die Extraktor-Ausgabe: ein abgeflachtes, eigenständiges Profil (keine include-Zeilen, die gemeinsamen 6.x-Credential/KernelSnitch-Konstanten inline, die Route ausgewählt anhand der --analysis-Evidenz, sofern --route sie nicht überschreibt). Der Extraktor gibt jedes Feld aus, das das Image tatsächlich liefert, und lässt den Rest weg; er füllt Lücken niemals mit Vermutungen einer benachbarten Kernel-Familie (unverifizierte Familie 6.6, der Standardwert -2, die 5.15-Multicast-Konstanten oder ein phys-Standardwert). Jede Ausgabe ist ein unverifizierter Kandidat: importierbar und parsebar, wobei fehlende oder ungültige Felder durch die Vorabvalidierung der App blockiert werden, sodass ein erfolgreicher Lauf niemals Geräteunterstützung impliziert. Unter 5.x leitet er außerdem die Reparatur der Credential-Referenz aus init_cred und die Multicast-Geometrie aus BTF ab (siehe docs/analysis/extractor-5x-derivation-plan.md). --format json bleibt für den v1-Importpfad erhalten. Um ein integriertes Profil hinzuzufügen, vervollständigen und validieren Sie die passende Vorlage der Versionsfamilie, speichern Sie sie als eigenständiges .conf-Profil und fügen Sie es zu kernel_profiles/index.conf hinzu. Die alte C-Registry offsets.h ist veraltet und wurde entfernt.
MediaTek-Images haben kein xbl_config.img und meist kein eingebettetes BTF, daher
kann der Extraktor die beiden physischen Adressen (kernel_phys_load,
kernel_phys_offset) nicht aus dem Image ableiten und lässt sie null. Die Laufzeit
greift dann auf die SoC-Formel zurück, die bei MediaTek bei W1 fehlschlägt. Füllen Sie beide, indem
Sie den separaten Extraktor tools/mtk-phys/ auf einem gerooteten Gerät ausführen (er liest
/proc/iomem) und die Werte in die erweiterten Überschreibungen der App einfügen. Siehe
MEDIATEK.md.
Der Extraktor disassembliert remove_waiter(), bevor er Offsets extrahiert. Kernel mit
dem Fix werden mit Exit-Code 6 abgelehnt; nur anfällige Kernel fahren fort.
Ein vollständiges OTA kann vollständig auf dem Telefon analysiert werden: boot plus xbl_config
werden automatisch extrahiert. Übergeben Sie --work-dir ein von der App beschreibbares Verzeichnis, wenn
Sie innerhalb der App-Sandbox ausführen. Cross-Compile und 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
Neue Kernel erfordern keinen App-Neubau mehr: Tippen Sie auf Import offsets.conf (HOCON)
und wählen Sie die abgeflachte .conf des Extraktors, oder verwenden Sie Import offsets.json (v1)
für einen älteren JSON-Bericht. v1-JSON wird in der App konvertiert, sodass nichts auf
das Gerät gepusht werden muss: Native startet immer vom GLK1-Dokument, das die App
über stdin sendet, und gleicht das aktuelle uname -r mit dem aufgelösten Profil
ab, bevor der Kernel abgelehnt wird. Importe werden über Dateien hinweg zusammengeführt; ein bereits
gespeichertes Release fragt vor dem Überschreiben nach.