Anatre ladri

Debug di app Android di terze parti

Mentre il reverse engineering delle app Android è relativamente comune eseguire l'analisi dinamica insieme all'analisi statica per ottenere informazioni di runtime dell'app.

Esistono molti modi per ottenere queste informazioni da app di terze parti

  • Usa gli hook Frida per stampare gli argomenti delle funzioni
  • Correggi l'app in modo che sia eseguibile il debug
  • Patch l'app per registrare le informazioni sensibili

I metodi di cui sopra hanno diversi difetti, Frida è in grado di agganciare solo una funzione specifica prima o dopo la funzione e le app di bracconaggio sono relativamente complesse e quasi sempre causano bug nell'app.
Inoltre, molti programmi di compressione/malware rilevano APK modificati e si arrestano in modo anomalo per rendere intenzionalmente più difficile l'analisi.

Soluzioni migliori per il debug di app Android di terze parti

Sono un grande fan di Android Studio Debugger (JDWP sotto il cofano), poiché puoi facilmente impostare punti di interruzione, modificare il codice e persino aggiungere logica ad esso, tutto in fase di esecuzione, dal tuo IDE preferito.
Purtroppo, per farlo è necessario ricompilare le app e questo ha un'alta probabilità di fallimento.
Poiché il mio dispositivo è rootato e altamente personalizzato, ho deciso di trovare un modo per rendere tutte le app debuggabili.

Ricerca AOSP

Per eseguire il debug di un'app, Android Studio comunica con l'app utilizzando la comunicazione JDWP su ADB, come mostra il grafico di livello molto alto:

AOSP JDWP e grafico su come eseguire il debug di app Android di terze parti

Se sei interessato a una spiegazione più approfondita dell'implementazione è il tuo giorno fortunato, perché per qualche motivo qualcuno dei ragazzi di AOSP ha scritto un domcatuion abbastanza decente su 

/sistema/core/adb/jdwp_service.cpp 

Ulteriori ricerche dell'AOSP hanno rivelato il

DEBUG_ENABLE_JDWP

Che se impostato come flag per zygote durante l'inizializzazione di una nuova app, renderà l'app debuggabile.
Più interessante è la funzione “applyDebuggerSystemProperty"

AOSP ricerca JDWP e come eseguire il debug di app Android di terze parti

Apparentemente esiste già un supporto per le mie esigenze di debug e tutto ciò che devo fare è impostare la proprietà di sistema ro.debuggable su 1.

Modifica dell'immagine di avvio

Apparentemente tutte le proprietà del sistema ro.* si trovano sotto l'immagine di avvio del dispositivo e non possono essere impostate utilizzando il comando standard "adb shell setprop".
Anche rimontare da solo non farà il trucco.
Esistono metodi specifici del dispositivo su come eseguire il flashing delle immagini di avvio modificate, ma la maggior parte di essi non è semplice e richiede una quantità relativamente elevata di conoscenza del processo di avvio di Android.
Ho deciso di trovare un approccio più semplice e fortunatamente per me qualcuno ha già creato un modulo magisk che fa esattamente questo

le impostazioni nascoste

Installalo e puoi modificare la proprietà da adb shell.

Anche da Android 10 e versioni successive sistema-come-root è implementato in modo che tu possa semplicemente passare alle proprietà di sistema ro.* usando i mount 

monta -o rw, rimonta /
vi /predefinito.prop 
# sostituisci ro.debuggable=0 con ro.debuggable=1 in /default.prop
reboot 

Debug

Ora è possibile eseguire il debug di tutto: basta usare "attach debugger" (usa solo Java altrimenti fallisce)!

AOSP JDWP e come eseguire il debug di app Android di terze parti - Debug

Se vuoi eseguire il debug di file smali e non Java, usa questo plugin:
https://github.com/JesusFreke/smalidea

Salta al contenuto