
Root-My-Device v0.0.6
Installer KSU per firmware supportati con CVE-2026-43499
Root My Device
Un fork di BuSung-dev/Root-My-Galaxy, con licenza Apache 2.0 — vedi LICENSE e Credits.
Root My Device è un installer con un clic per build firmware esplicitamente supportate. L'applicazione stessa è mantenuta separata dagli offset dei dispositivi, dai payload di exploit nativi e dagli artefatti di build di KernelSU.
Il feed dei dispositivi e i payload nativi sono mantenuti in
Root-My-Device-Payloads.
Ogni push sul ramo main compila i payload e li pubblica come una
release GitHub con un tag univoco per quella esecuzione. L'app risolve
releases/latest di quel repository, legge l'asset targets-v2.json da esso e
scarica ogni artefatto nominato al suo interno — quindi l'insieme di payload che installa è
immutabile una volta pubblicato, e nulla viene committato come binario.
Applicazione
L'app seleziona automaticamente una corrispondenza esatta per la kernel release, l'ID di visualizzazione completo della build, SDK, ABI e dimensione di pagina. La modalità avanzata può selezionare un profilo manualmente e presenta avvisi separati per kernel release e build.
Modalità di debug
Un profilo rimane fuori dal feed finché il percorso dell'app non è stato completato su quel dispositivo, e il feed è ciò che l'app legge — quindi l'esecuzione che stabilirebbe se quel percorso funziona non ha nulla da scaricare. La modalità di debug serve a questo caso: un interruttore separato dalla modalità avanzata, disattivato per impostazione predefinita, che legge il payload da una cartella sul dispositivo. Attivandola viene mostrata la cartella a cui puntare, che contiene tre file al suo livello superiore:
profile.json
cve-2026-43499-app.release.so
ksud
I due artefatti sono ciò che il repository del payload compila, e quei nomi sono
i predefiniti. Un daemon trasportato con il nome ksud-<id> usato dalle release
di quel repository deve essere rinominato, oppure indicato nel manifest come kernelsu.name
(exploit.name per il payload).
profile.json contiene solo ciò che non può essere ricavato dal dispositivo, usando
i nomi di chiave del feed:
{
"profileId": "xig07-jp-OS3.0.7.0.WNEJPKD",
"kernelsu": { "kmi": "android14-6.1", "managerPackage": "me.weishu.kernelsu" }
}
Quei tre campi sono obbligatori. Ogni campo su cui il feed confronta un dispositivo —
kernel release, ID di visualizzazione della build, SDK, ABI, dimensione di pagina — proviene invece
da questo dispositivo, poiché un profilo locale non viene confrontato con nulla.
Nominare comunque kernelRelease o buildDisplay è facoltativo e viene verificato rispetto al
dispositivo, ed è ciò che rende sicuro tenere fianco a fianco le cartelle di più target.
Nessuno dei controlli a cui è sottoposto un payload scaricato si applica qui, e l'app
lo dichiara. Un'esecuzione da cartella è contrassegnata come tale nel log, nella panoramica
e come local:<folder> nella sua voce di cronologia, quindi nessuna esecuzione completata
può essere letta in seguito come esecuzione da feed.
Build
Requisiti:
- Android Studio JBR 21
- Android SDK 37
- Android NDK 28 o successivo
- CMake 3.22.1
L'APK contiene un programma nativo che non viene compilato dal sorgente di questo repository, quindi clona con i sottomoduli:
git clone --recurse-submodules https://github.com/Witaqua-tools/Root-My-Device
# or, in an existing checkout
git submodule update --init payloads
$env:JAVA_HOME='C:\Program Files\Android\Android Studio\jbr'
.\gradlew.bat :app:assembleDebug
Output:
app/build/outputs/apk/debug/app-debug.apk
L'helper di bootstrap
lib/arm64-v8a/libcve43499root.so nell'APK non è una libreria — è l'helper
di bootstrap, un eseguibile che l'app avvia con ProcessBuilder da nativeLibraryDir.
È ciò che carica un payload scaricato e, successivamente, ciò che serve su su un socket
una volta che il payload ha ottenuto i permessi di root.
È compilato dal sorgente tramite app/src/main/cpp/CMakeLists.txt,
non committato come binario. Il sorgente però non è qui: il percorso standalone del payload
esegue lo stesso programma da un percorso fisso, quindi anche il repository del payload
deve compilarlo, e resta l'unica copia. Questo repository lo raggiunge tramite il
sottomodulo payloads, il cui commit fissato è la registrazione di esattamente quale
revisione sia stata usata per compilare un APK.
Ciò significa due build dello stesso sorgente, deliberatamente. Il repository del payload
fissa NDK 29 su API 35 perché il suo payload di exploit è un blob di dimensioni fisse
la cui toolchain fa parte della sua identità; qui CMake usa ndkVersion di questo modulo
su minSdk. L'helper non dipende da nessuno dei due — è lo stesso programma in entrambi
i casi, e la copia distribuita dall'app è quella compilata qui.
Due cose al suo riguardo sono fondamentali e facili da annullare per sbaglio:
deve essere un eseguibile (add_executable più -pie, quindi ha un PT_INTERP
che una libreria condivisa non avrebbe), e deve essere chiamato lib*.so con
jniLibs.useLegacyPackaging = true, perché è ciò che viene estratto in nativeLibraryDir
come file reale con il bit di esecuzione impostato. Entrambe sono commentate nel punto
in cui vengono impostate.
Usalo solo su dispositivi di tua proprietà o per i quali sei esplicitamente autorizzato a fare test.
Credits
Questa applicazione
Un fork di Root-My-Galaxy di BuSung-dev, che mantiene la licenza Apache 2.0 originale — vedi LICENSE.
I payload che esegue
Questa applicazione scarica ed esegue ciò che Root-My-Device-Payloads pubblica — a sua volta un fork di Root-My-Galaxy-Payloads di BuSung-dev.
Niente di ciò che spetta a un payload si trova in questo repository, e nulla di esso viene ripetuto qui. KernelSU — ciò che un'esecuzione riuscita carica — l'upstream di ciascun core, il sorgente da cui quei core derivano e i termini di licenza di tutto ciò che viene compilato lì sono riconosciuti nel README del repository dei payload, che è il luogo in cui va un credito lato payload e dove vengono compilati quegli artefatti.