Scrivo questo #post in risposta al seguente:
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 binariobusybox
, 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... 🤕️