>_ DevTrendsit

Lingua

Home

Linguaggi

Sezioni

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embedded Sicurezza
Java

Come eseguire moduli Xposed senza accesso root usando NPatch

Quando hai bisogno di esplorare un'app Android di qualcun altro, aggirare lo SSL pinning o abilitare il debug nascosto, l'istinto naturale è ricorrere a Magisk o KernelSU. Ma effettuare il root di un telefono che usi quotidianamente solo per una utility è scomodo. I clienti bancari iniziano a lamentarsi, Play Integrity smette di funzionare, e sui dispositivi aziendali il root è semplicemente vietato dalle policy di sicurezza.

Per lungo tempo questo problema è stato risolto dal progetto LSPatch. Prendeva un APK già pronto, embeddava un runtime LSPosed e gli hook necessari al suo interno, dopodiché l'app poteva funzionare con i moduli Xposed senza privilegi di sistema. Quando il LSPatch originale ha smesso di essere mantenuto attivamente, un fork chiamato NPatch (Neo LSPatch) è intervenuto per colmare il vuoto.

Star History Chart

Cosa fa questo strumento

Il progetto prende un normale file APK e lo ricompila. All'interno dell'archivio inietta i file DEX del loader e le librerie native (.so) responsabili dell'intercettazione delle chiamate ART (Android Runtime). Quando l'app patchata viene avviata, questo strato embedded parte per primo. Inizializza l'ambiente di esecuzione dell'API Xposed direttamente all'interno del processo isolato dell'app.

Per il resto del sistema, stai semplicemente eseguendo un normale programma utente. Non richiede diritti superuser, non tocca la partizione di sistema /system, e non tenta di sostituire zygote. Tutte le modifiche e gli hook sono confinati rigorosamente all'interno della sandbox di quel pacchetto specifico.

Le versioni a partire da Android 9 fino alle attuali release Android compatibili con la codebase JingMatrix/LSPosed sono supportate.

Come funziona il processo di patching

Sotto il cofano, NPatch si basa sul lavoro di diversi progetti open-source:

  • LSPosed gestisce le chiamate API Xposed e l'intercettazione dei metodi runtime in ART.
  • Xpatch ha fornito il concetto fondamentale di iniettare codice in un APK senza intervento di sistema.
  • Apkzlib viene utilizzato per decomprimere, modificare l'archivio zip e ricompilare rapidamente senza decompilazione completa in smali.

A differenza del classico combo apktool + jarsigner, dove la decompilazione di progetti grandi e offuscati spesso va in crash con errori, questo approccio è più veloce e affidabile. Le risorse e il manifest vengono adjustati direttamente, dopodiché il loader viene iniettato.

Opzioni di utilizzo

Puoi lavorare con lo strumento in due modi: su un computer tramite terminale o direttamente sul telefono.

Opzione 1. Console tramite jar

Se stai automatizzando l'assemblaggio di build di test su CI o analizzando software su una workstation, è più comodo scaricare il file jar pronto all'uso dai releases:

# Базовый синтаксис запуска утилиты
java -jar npatch.jar [аргументы]

L'utility prende l'APK sorgente e i moduli da embeddare come input. L'output è un pacchetto modificato pronto che richiede solo la firma con una chiave di test e l'installazione tramite adb install.

Opzione 2. Manager sul dispositivo

Per le attività quotidiane è più semplice scaricare manager.apk dalla sezione releases su GitHub.

  1. Installa il manager sul tuo dispositivo Android.
  2. Seleziona un'app installata o un file APK locale.
  3. Specifica i moduli Xposed che devono caricarsi all'avvio.
  4. Il manager costruisce un nuovo pacchetto di installazione e suggerisce di rimuovere l'originale prima di installare la modifica.

Dato che la firma dell'app cambia inevitabilmente durante il ricompilazione, non sarai in grado di aggiornare il programma originale su di esso. Dovrai rimuoverlo, perdendo i dati locali se non sono stati sincronizzati.

Casi d'uso pratici

Uso regolarmente questi patcher nel reverse engineering e nel test dei client mobile.

  • Aggirare lo SSL Pinning per l'intercettazione del traffico. Wrappare il traffico in Burp Suite o mitmproxy è molto più semplice quando puoi embeddare un modulo come TrustMeAlready o JustTrustMe direttamente nell'APK. Non c'è bisogno di spingere certificati nel system store tramite Magisk.
  • Strumentazione e raccolta log. Se hai bisogno di vedere quali argomenti vengono passati ai metodi privati in un SDK di terze parti, scrivi un piccolo hook Xposed, iniettalo nella build e logga lo stack delle chiamate in logcat.
  • Testare moduli su dispositivi puliti. Gli sviluppatori di moduli lo trovano utile per verificare come il loro codice si comporta in isolamento senza LSPosed di sistema.

Caveat e limitazioni

L'approccio senza root ha confini naturali che dovresti conoscere fin dall'inizio:

  • I moduli di sistema non funzioneranno. Se un hook è progettato per cambiare il comportamento di SystemUI, delle notification shade o dei servizi Android, NPatch è impotente qui. Vive strettamente all'interno del processo utente.
  • Alcune app con strict anti-cheat o protezione avanzata (controlli di integrità della firma, rilevamento di file .so estranei) rileveranno la manomissione e usciranno all'avvio.
  • La documentazione nel repository è ancora scarsa. La maggior parte dei dettagli vengono discussi nella chat Telegram del progetto, e le build fresche spesso devono essere prelevate direttamente dagli artifact di GitHub Actions.

Vale la pena provarlo

Se periodicamente hai bisogno di scavare sotto il cofano di un'app Android di terze parti o testare rapidamente un'ipotesi senza riflashare il tuo dispositivo, aggiungi npatch.jar al tuo toolkit. Il progetto mantiene il codebase LSPatch aggiornato e gestisce il ricompilazione delle app per versioni Android più recenti senza problemi.

Progetti correlati