#Investigazione della app PostePay senza radice!

Scrivo questo #post in risposta al seguente:

"App postepay — chiaramente c'è qualcosa che non va"
https://t.me/journalctl_micro/3193

Molto funny: la #app #Android di PostePay rileva modifiche di sistema ad un #telefono che passerebbe #SafetyNet, col bootloader bloccato, e suppongo quindi senza #root. 😁️

Ho preso 5 minuti (uhmm, no, magari) per un breve #ReverseEngineering di quella parte della #applicazione, arrivando a questa sezione del file (baksmaliato dall'ultima versione presente su APKMirror) smali_classes6/posteitaliane/posteapp/apppostepay/ui/activity/SplashActivity.smali, che invoca il dialogo di avviso in foto: 🤓️

# riga 4358
.method public final e()V

# ... inizializzazione di altra roba

# riga 4503
new-instance v1, Lcom/scottyab/rootbeer/b;
invoke-direct {v1, v0}, Lcom/scottyab/rootbeer/b;-><init>(Landroid/content/Context;)V
invoke-virtual {v1}, Lcom/scottyab/rootbeer/b;->a()Z
move-result v1
if-eqz v1, :cond_2

# ... visualizza il dialogo se il codice sopra non ha saltato

# riga 4542
:cond_2
# ... ritorna e termina il metodo

Detto in italiano, questo #codice invoca un metodo (dal nome offuscatino?) presente in una certa classe "com.scottyab.rootbeer"... ed esce fuori, con una #ricerca sul web, che questa è una #libreria #OpenSource (evidentemente integrata dagli sviluppatori di #PostePay) per controllare se un #dispositivo Android è #rootato. (Non se passa o meno #SlaveryNet, attenzione.) 🍻️

È un po' troppo rubatempo mettersi a capire quale effettivamente è nel codice Java quella funzioncina b;->a()Z ora, quindi tiriamo a #indovinare. Ci sono, in RootBeer.java, tante #funzioni boolean, di cui varie ausiliarie, e 2 principali: isRooted[With/Without]BusyBoxCheck(). Queste due principali restituiscono un valore positivo qualora anche solo una delle ausiliari chiamate restituisca true, l'unica differenza tra le due è il fare anche il controllo per la presenza del binario busybox, oppure no... E quindi le opzioni sono le seguenti: 📜️

  • checkForBinary(BINARY_SU), checkSuExists(), checkForRootNative(), checkForMagiskBinary(): controllo effettivo del root; escludo, da quel che ricordo il suo telefono non è rootato, ed avendo il bootloader bloccato direi che possiamo stare tranquilli.
  • detectRootManagementApps(): scarto, se il telefono non è rootato non avrebbe senso tenere app di gestione del root.
  • detectPotentiallyDangerousApps(): controlla se sono installate app "a umma umma"; escludo perché credo nessuna sia utile senza il root, e qualcuna forse è pure malware... eccetto Lucky Patcher, che però ad oggi si auto-spoofa.
  • checkForRWPaths(): scarto, controlla se alcuni percorsi sensibili sono scrivibili, immagino di no col bootloader bloccato e senza root.
  • checkForDangerousProps(): da verificare, controlla se alcune #BuildProps di Android sono particolari.
  • detectTestKeys(): inizialmente sospettavo, ma lo abbiamo verificato (con getprop | grep build.tags), e pare non sia il caso (tutto è listato come "release-keys").
  • checkForBinary(BINARY_BUSYBOX): questa potrebbe essere, ed è #interessante, controlla come ho detto prima la presenza del binario busybox, ma da questo commit del 2020 non è più usata nel check predefinito perché — come detto nel commento in quella parte di #source, e alla sezione "False positives" del readme — alcuni #OEM lo lasciano quando non dovrebbero (io credevo fosse normale tralaltro, non un'anomalia!).

Quest'ultima #ipotesi mi cattura perché innanzitutto, te micro hai proprio un #MotoE da quello che ricordo, che è uno dei #telefoni listati esplicitamente sul readme... certo, se la #lib usata nella app fosse stata aggiornata, questo non sarebbe dovuto succedere, a meno che i programmatori delle #Poste non abbiano stupidamente usato la funzione di #controllo aggressiva. Però tbh, considerando la qualità del #software #statale o semi-statale qui in #Italia, secondo me semplicemente quella #dipendenza non è mai stata aggiornata (da un lato però, come biasimarli... "se funziona, non toccare"...). Al momento però non riesco a #provare ciò, perché non trovo #APK abbastanza vecchi di PostePay, quindi lancio solo #idee al vento. 😩️

Io punto su #busybox per risolvere questo #mistero. Lo #smartphone non è il mio, quindi io ora posso solo aspettare, se dovessero uscire novità farò un banale edit. (Sperando non siano così grosse da necessitare di un nuovo #messaggio). 😼️

Edit: non ci ho beccato nemmeno per il cavolo: dalla regia, che ha ora testato con il #programma di #test di #RootBeer, vengo a scoprire #malamente che le mie opzioni tecnicamente più plausibili si sono rivelate sbagliate. "Root Management Apps" è cosa fa scattare gli allarmi, cosa che io giustamente ho escluso a priori, ma la regia mi fa appunto sapere che aveva #Magisk Manager installato (soltanto a prendere polvere perché, questo l'ho pensato bene, non ha il root nell'effettivo); e, come previso, la disinstallazione mette a tacere i falsi positivi. Vabbè oh, non potevo immaginarmelo... 🤕️

@octospacc



  • Tags: Android, APK, app, applicazione, BuildProps, busybox, codice, controllo, dipendenza, dispositivo, funzioni, idee, indovinare, interessante, ipotesi, Italia, lib, libreria, Magisk, malamente, messaggio, mistero, MotoE, OEM, OpenSource, post, Poste, PostePay, programma, provare, ReverseEngineering, ricerca, root, rootato, RootBeer, SafetyNet, SlaveryNet, smartphone, software, source, statale, telefoni, telefono, test
  • Categories: Senza categoria