Aronne Brivio

Writer & Developer


- - -

| Public Key |

F9DD 2397 9690 D118 F6CD B870 A1B7 4C9D D1D3 A421


subject

Migliori articoli

Magisk: il root, systemless

Magisk Is A Magic Mask to Alter System Systemless-ly Si chiama Magisk, abbreviazione di Magic Mask, e promette di poter fruire di determinate Mod, fino ad ora rigorosamente installate nella partizione di sistema del telefono, senza però toccare tale partizione. Fino ad oggi qualsiasi Mod, quale l'ottenimento dei permessi di Root, l'utilizzo del framework Xposed e dei suoi moduli, Viper4Android, AdAway e chi più ne ha più ne metta, per poter funzionare dovevano essere installati sotto /system, la partizione contenente tutti i file e le applicazioni di sistema di Android. Un vero limite, se pensiamo che la modifica della partizione di sistema compromette la possibilità  di ricevere aggiornamenti OTA ufficiali, piuttosto che utilizzare le più famose app per il Mobile Banking o qualsiasi applicazione che per sicurezza controlli l'integrità  del sistema. Nasce così il root systemless, in grado quindi di mantenere inalterata questa partizione di Android, che ha debuttato con l'avvento di Android Lollipop 5.0, ma senza ottenere chissà  che successo non fornendo alcuna funzionalità  in più rispetto al sistema di rooting standard. È solo con l'arrivo di Android Pay (in Italia.. va beh [ndr]) che qualcosa sotto questo fronte ha iniziato realmente a muoversi. Perchè? Perchè Google ha pensato - correttamente - di negare l'utilizzo di Android Pay ai dispositivi con permessi di root per questioni di sicurezza. Come? Fornendosi di Google Play Services, un servizio presente su tutti i dispositivi Android (o per lo meno tutti quelli con GApps installate), per far comunicare i terminali con SafetyNet, un sistema remoto di controllo di integrità del sistema Android. Chiaramente tutti i dispositivi con una modifica anche minima della partizione di sistema risultano non conformi, di conseguenza impossibilitati ad utilizzare Android Pay e qualunque altra app che utilizzi la SafetyNet API (Qualcuno ha detto Pokemon GO?!?). Magisk nasce proprio con questo obiettivo, quello di poter passare il test di integrità  di SafetyNet e usufruire dei benefici del root sullo stesso dispositivo. Al posto di modificare /system va ad installare nella boot image del sistema un "layer" aggiuntivo tra il sistema stesso e le varie Mod. Ma che benefici ci dà ? La partizione di sistema non viene toccata, SafetyNet OK! Il root, come i moduli Xposed e qualsiasi altra Mod possono essere attivati e disattivati (montati e smontati) "On The Fly", senza dover riavviare il dispositivo (per i moduli Xposed ad esempio) e senza effettuare la procedura di unroot Non toccando /system ad ogni aggiornamento non sarà  necessario reinstallare le mod Ma se fino alla versione 6 Magisk era utile per nascondere il root da applicazioni con questo tipo di controllo, con l'aggiornamento alla versione 7 rilasciato il 3 ottobre e successive, lo sviluppatore topjohnwu ha deciso di puntare più in alto, mirando a fare di Magisk un'interfaccia universale, offrendo la possibilità di installare qualsiasi Mod in modalità systemless attraverso la nuova applicazione Magisk Manager, inclusi Root e Xposed. Vediamo quindi la procedura di installazione in modo da coprire tutte le possibilità . 1) Dispositivo senza root Riavviare il dispositivo in recovery [1] Flashare Magisk Flashare phh's SuperUser [2] Riavviare il telefono e installare Magisk Manager 2) Dispositivo con SuperSU Systemless o con una precedente versione di Magisk Installare Magisk Manager Effettuare l'installazione/update di Magisk dall'applicazione Riavviare il dispositivo 3) Dispositivo con root in modalità NON systemless Installare SuperSU dal PlayStore Effettuare la procedura di unroot dall'applicazione Riavviare il telefono e seguire i passi di 1)  Link alla discussione ufficiale su XDA: http://forum.xda-developers.com/apps/magisk/official-magisk-v7-universal-systemless-t3473445   N.B. Con la versione 9 di Magisk è stato introdotta la scheda Magisk Hide, che permette di "nascondere" il root alle applicazioni selezionate. Sarà quindi sufficiente selezionare Google Play Services (com.google.android.gms), i due demoni associati .policy e .setup e le applicazioni che richiedono un dispositivo "vergine" e senza permessi di root per funzionare (Qualcuno ha detto Pokemon GO?!? pt.2). N.B.2 Nel caso in cui, anche dopo aver abilitato Magisk Hide non riusciste ad utilizzare le applicazioni protette attraverso SafetyNet, sarà sufficiente installare il modulo Universal SafetyNet Fix e riavviare il dispositivo (attualmente supporta le versioni 12 e 13.1 di Magisk). Il risultato positivo sarà confermato dalla doppia spunta verde nella sezione Controllo SafetyNet di Magisk Manager. Per concludere, se mai doveste avere la necessità di disinstallare Magisk, dopo aver rimosso i moduli direttamente dall'app e aver riavviato il dispositivo, basterà flashare da recovery questo pacchetto zip. [1] È necessario disporre di una recovery modificata, di conseguenza aver precedentemente sbloccato il Bootloader. La più nota, completa ed utilizzata attualmente è la TWRP ed essendo la procedura di installazione potenzialmente personalizzata per ogni dispositivo, vi rimando al sito ufficiale per maggiori informazioni a riguardo. [2] Dalla versione 11, trattata nello specifico in questo articolo, non è più necessaria l'installazione del pacchetto phh's Superuser, poichè i binari necessari ai permessi di root sono integrati in Magisk.

Magisk v11: la soluzione All-In-One per il modding di Android

Avevamo già parlato di Magisk tempo fa, una mod molto particolare che permette di installare altre modifiche - dette moduli -, quali i permessi di root, Xposed e Viper4Android in modalità systemless, vale a dire senza toccare la partizione di sistema del dispositivo. Questo avviene grazie ad una modifica della partizione di /boot che permette di caricare virtualmente queste mod nella partizione di sistema ad ogni avvio di Android, rendendo quindi possibile un futuro aggiornamento del sistema senza effettuare nuovamente tutti i passaggi per installare le modifiche volute. Nell'ultimo periodo lo sviluppo di questo sistema ha subito una forte accelerazione introducendo sempre più funzionalità come Magisk Hide, che permette di nascondere i permessi di root alle applicazioni che "non li digeriscono" (Android Pay, Pokemon Go e molte applicazioni di mobile banking ad esempio) e atterrando sul Play Store (Magisk Manager). È di stanotte - 6 febbraio 2017 n.d.r. - l'ultimo aggiornamento, che porta Magisk alla versione 11 e il Manager (l'applicazione di gestione) alla versione 4, rendendo questa mod una soluzione All-In-One per la gestione di moduli e permessi di root. Infatti non sarà più necessario installare a parte un gestore dei permessi di superutente, come possono essere Phh Superuser e SuperSU (per il quale viene comunque mantenuta la compatibilità), poichè ora è integrato direttamente in Magisk. Chiamato MagiskSU, non è altro che una versione modificata del gestore di Phh, ma che permette di chiudere il cerchio, rendendo Magisk la piattaforma più completa nell'ambito del modding di Android. Per maggiori informazioni vi rimando alla discussione ufficiale sul forum di XDA.

Android e le notifiche push con Firebase

Firebase Cloud Messaging (FCM), successore di Google Cloud Messaging GCM, è un servizio che offre una soluzione alla messaggistica istantanea multipiattaforma. Offerto da Google permette, oltre alla gestione di cloud database, piattaforme di testing, crash reporting e autenticazione, di inviare messaggi push in modo del tutto gratuito e illimitato. Vediamo quindi come utilizzare FCM per implementare le notifiche push in un sistema composto da un server PHP e un'applicazione Android. Per quanto riguarda il lato applicazione, Android Studio ci viene in aiuto integrando la piattaforma Firebase (raggiungibile da Tools > Firebase) e con pochi click potremo connettere l'app al servizio e inserire le dipendenze mancanti nel nostro progetto. Sarà infatti sufficiente specificare le dipendenze per la compilazione nei due file build.gradle, importare com.google.firebase.iid.FirebaseInstanceId nella classe in cui andremo ad utilizzarlo e inserire il file google-services.json - che possiamo reperire dalla console di Firebase - sotto app/ .   A questo punto la configurazione dell'applicazione è terminata e il token identificativo di registrazione al servizio sarà raggiungibile attraverso la chiamata al metodo FirebaseInstanceId.getInstance().getToken(). Possiamo verificare il corretto funzionamento direttamente dal pannello di Firebase, dove, nella pagina Notifications, potremo creare manualmente delle notifiche da inviare alla nostra applicazione.   Per quanto riguarda invece la configurazione lato server, utile per automatizzare l'invio delle push in determinate occorrenze, come potrebbe essere la pubblicazione di un nuovo articolo, avremo bisogno di uno script in PHP che, prese in input la chiave per le API lato server e i token delle applicazioni, invii la notifica. Innanzitutto dovremo ottenere la API key per il server, che possiamo trovare nel pannello di gestione delle API di Google. Dovrebbero esserci tre chiavi con la dicitura (auto created by Google Service) tra cui anche la Server Key.   Il codice seguente permette di generare una notifica e "spedirla" all'applicazione specificando $title e $body come titolo e contenuto della stessa: $msg = array(    'body' => $body,    'title' => $title,    'vibrate' => 1,    'sound' => 1,);$fields = array(    'registration_ids' => $registrationIds,    'notification' => $msg);$headers = array(    'Authorization: key=' . API_ACCESS_KEY,    'Content-Type: application/json');$ch = curl_init();curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send' );curl_setopt( $ch,CURLOPT_POST, true );curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );$result = curl_exec($ch );curl_close( $ch );return $result; Dove API_ACCESS_KEY è la Server Key e $registrationIds sarà un array di stringhe contenente i token delle applicazioni registrate. Per completare la procedura e renderla funzionante manca soltanto la gestione dei token. Per farlo sarà necessario salvare nel database del server tutti i codici delle applicazioni registrate, che avremo ottenuto attraverso il metodo getToken() citato all'inizio. Sarà quindi sufficiente, lato applicazione, chiamare questo metodo ed inviare il token al server attraverso una richiesta GET o PUSH, che provvederà poi a salvarlo nel database e recuperarlo all'occorrenza per popolare $registrationIds.

Sigarette elettroniche: sigle e differenze

Fino a un paio di anni fa la sigaretta elettronica era la classica stilo, stretta e allungata, che tutti conosciamo. Che fosse Justfog, Ovale o Cloudia l'obiettivo era sempre quello di avere un prodotto che assomigliasse il più possibile ad una sigaretta "analogica" e di contenere il più possibile le dimensioni. Poi qualcosa è cambiato e accanto alle "classiche" sono comparse box sempre più grandi e con molte più funzionalità ed oggi chi si avvicina per la prima volta al mondo dello svapo si imbatte in una varietà incredibile di hardware che rende complicata la scelta del primo acquisto. In realtà però possiamo fare chiarezza distinguendo diverse categorie, ognuna identificata con una sigla e con target differenti. MTL e DTL Iniziamo con queste due sigle, che stanno rispettivamente per Mouth To Lung e Direct To Lung, e rappresentano la differenza più evidente tra le sigarette elettroniche, perchè distingue la tipologia di tiro per cui è stata costruita. Per MTL si intende infatti il classico tiro "di guancia", quello delle sigarette e delle pipe per intenderci, un tiro chiuso, con poca aria in ingresso, caratterizzato da una poca produzione di vapore e un'elevata resa aromatica. Per DTL invece si intende il tiro "di polmone", paragonabile a quello di un narghilè e caratterizzato da un'alta produzione di vapore e da molta aria in ingresso. Si tratta del tipo di svapo che sta andando per la maggiore ultimamente cavalcando l'onda del cloud chasing e indirizzato quindi alla produzione di "grandi nuvoloni".   Bisogna sottolineare che la differenza sostanziale a livello di hardware per queste due categorie sta nella resistenza, che ne condiziona però l'intera box. Per un tiro di polmone abbiamo infatti la necessità di usare una resistenza molto più bassa rispetto al tiro di guancia (parliamo di 0.1ohm~0.75ohm per DTL e 1ohm~2+ohm per MTL), in modo che la batteria riesca ad erogare più potenza che permette di scaldare di più la resistenza e vaporizzare quindi più liquido. Vige infatti la legge di Ohm, da cui si ricava che la potenza (Watt) è data dal quadrato della differenza di potenziale (Volt) fratto la resistenza (Ohm). E se fissiamo quindi i Volt a 3.7 (valore nominale delle batterie LiPo o IMR più comuni) vediamo come, per una resistenza da 1.8omh (quindi di guancia) la potenza erogata è pari a 7.61W, mentre con una resistenza da DTL da 0.3ohm vengono erogati 45.63W di potenza.   Di conseguenza per il tiro di polmone avremo bisogno di batterie molto più spinte (e grosse) e di atomizzatori più ariosi per evitare un eccessivo surriscaldamento della resistenza (e quindi più grossi). RBA, RTA, RDA e RDTA Vediamo ora un'altra distinzione fra gli atomizzatori, non più suddivisi per tipologia di tiro ma per il "rapporto" con resistenze e liquidi. Per quanto riguarda i liquidi esistono due tipologie di atomizzatori, i Dripper e i Tank. Per tank si intendono i più diffusi atomizzatori con un contenitore per il liquido, il tank appunto, che attraverso delle asole permette un afflusso di liquido continuo alla resistenza. Per dripper invece si intendono gli atomizzatori privi di tank e che hanno bisogno di essere alimentati manualmente ogni 4/5 tiri gocciolando il liquido direttamente sulle resistenze. Ultimamente è stata introdotta una nuova tipologia che potremmo definire un'evoluzione del dripper classico. Stiamo parlando dei Bottom Feeder, dripper caratterizzati da un pin positivo (quello che farà contatto con il polo positivo della batteria) forato, che permette, grazie ad apposite box, di essere collegato ad una boccetta di liquido da premere - "squonkare" - per bagnare le resistenze. Vediamo ora la distinzione che viene fatta prendendo in considerazione le resistenze: anche qui troviamo due macrocategorie con alcune ulteriori specializzazioni. Gli atomizzatori più comuni sono quelli con le testine intercambiabili, le cosiddette head coil. Si tratta di resistenze preconfezionate inserite in un corpo metallico in modo da renderne semplice il ricambio. Ovviamente le resistenze hanno una "vita", un periodo di tempo espresso in quantità di liquido vaporizzabile oltre il quale perdono in termini di resa o sanno di bruciato per via dei residui che si accumulano sulle spire e del cotone che si degrada. È la soluzione più comoda in quanto è sufficiente svitare la testina vecchia e inserire quella nuova per poter tornare a svapare.   Contrapposti agli atomizzatori a testine abbiamo i cosiddetti rigenerabili, vale a dire atomizzatori che dispongono di torrette metalliche (positive e negative) che permettono di inserire resistenze homemade. Si tratta di una soluzione più complessa, non certo per i principianti e che prevede manualità e tempo a disposizione, ma che offre un'altissima personalizzazione in base al tipo di svapo desiderato. Per rigenerare un atomizzatore di questo tipo sarà infatti necessario "avvitare" il filo in modo da creare le spire delle resistenze previo il calcolo della resistività in base al materiale del filo, allo spessore dello stesso, al numero di spire e di resistenze in parallelo, per poi procedere all'aggiunta del cotone. Della categoria dei rigenerabili fanno parte tutti quegli atomizzatori la cui sigla inizia per R (Rebuildable). Abbiamo quindi RBA che li accomuna tutti (ReBuildable Atomizer), che si distinguono in RTA, RDA e RDTA. La T sta per Tank, vale a dire quegli atomizzatori forniti di un contenitore per il liquido, mentre la D sta per Dripping.   Infine, anche per quanto riguarda quest'ultima distinzione, si stanno diffondendo degli atomizzatori con una doppia funzionalità, vale a dire che offrono la possibilità di utilizzare le testine preconfezionate, offrendo anche un deck per essere utilizzato come rigenerabile. Si ringrazia Gregorio per parte dell'hardware mostrato in foto.

Svapo: TC, VW e Bypass/Meccanico

Nell'articolo precedente abbiamo visto la distinzione tra tiro di guancia e polmonare e tra atomizzatori rigenerabili e non. Oggi invece vediamo un'ulteriore distizione tra le sigarette elettroniche, che prende in considerazione la modalità con cui viene fornita potenza alla resistenza. Le prime sigarette elettroniche erano infatti a voltaggio fisso, semplicemente era sufficiente premere il tasto di erogazione senza preoccuparsi di altro. Con l'evoluzione di questi dispositivi e soprattutto l'avvento del sub-ohm (quindi l'utilizzo di resistenze sotto l'ohm) si sono diffuse le cosiddette box a wattaggio variabile - VW -, batterie che permettono di regolare l'erogazione espressa in Watt. Si tratta della modalità più diffusa, presente praticamente su tutte le box, e più semplice da usare poichè tutte le testine sul mercato specificano il range di Watt entro le quali essere usate.     Accanto a questa modalità troviamo il Controllo di Temperatura, il TC, che permette di regolare, invece che la potenza erogata, la temperatura massima che la resistenza può raggiungere, con l'effetto di avere un tiro più regolare, che non aumenta di intensità al passare dei secondi. Bisogna notare però che questa modalità non è utilizzabile con tutte le resistenze. Questo perchè le resistenze più utilizzate sono costruite in Kanthal A1, una lega metallica caratterizzata da un'alta resistività e resistenza all'ossidazione. Queste caratteristiche garantiscono una maggior stabilità della resistenza nel momento in cui viene scaldato, dilatandosi in modo pressochè impercettibile all'aumentare della temperatura, permettendo quindi di trascurare la differenza di resistività nel tempo. Il controllo di temperatura invece deve essere effettuato con resistenze di metalli con una bassa resistività, che quindi sono caratterizzati da una dilatazione non trascurabile all'aumentare della temperatura. Ed è proprio questa dilatazione che sta alla base del TC, permettendo alla box, attraverso appositi calcoli, di regolare automaticamente la potenza erogata nell'istante di tempo in modo da mantenere costante la temperatura.     Infine, oltre a queste due, troviamo quella che concettualmente è la più semplice, la modalità Bypass. Questa infatti non permette di regolare nessun parametro e la potenza erogata viene lasciata nelle mani della legge di Ohm, in base al voltaggio della batteria ed al valore della resistenza. Il risultato sarà quindi quello di avere un'erogazione più potente con batteria carica, che andrà via via calando man mano che si scarica la batteria. Questa è anche la modalità con cui funzionano le box meccaniche, caratterizzate dall'assenza di un chip di controllo. Queste box e questa modalità impongono una conoscenza ancora maggiore, poichè se con una box elettronica è possibile andare oltre la potenza erogabile dalla batteria stessa mediante l'utilizzo di accumulatori ed altri componenti elettronici del chip, su un meccanico (o una box in modalità Bypass) è necessario considerare lo spessore del filo ed il suo materiale al fine di non ottenere una resistenza troppo "dura a scaldarsi". Per concludere faccio un ultimo appunto sulle box meccaniche. Facendo due calcoli infatti, considerando il voltaggio nominale della batteria pari a 3.7V, con una resistenza di 0.1 ohm la box erogherebbe ben 115.60W, ben superiore alla potenza erogabile da qualsiasi box elettronica monobatteria.   Se invece considerassimo una resistenza da 0.3 ohm, un valore molto comune anche nelle testine preconfezionate per tiro polmonare, un meccanico erogherebbe 38.53W, che potrebbero risultare insufficienti per scaldare correttamente la resistenza, quando con una box elettronica monobatteria possiamo raggiungere anche i 75/80W. La conclusione vien da sè: sui meccanici dobbiamo riuscire ad abbassare il più possibile la resistenza, raggiungendo valori incredibilmente bassi (0.2 - 0.1 omh). Bisogna però prestare moltissima attenzione, perchè finora non abbiamo considerato l'amperaggio di scarica, vale a dire l'intensità di corrente che nell'unità di tempo percorre il circuito. Ogni batteria infatti ha una capacità massima di scarica che non deve MAI essere superata per evitare di incorrere in sfiammate o esplosioni, cosa che invece viene controllata dal circuito in una box elettronica che all'occorrenza è in grado di bloccare l'erogazione. Si ringrazia Gregorio per le foto delle varie modalità.