martedì 14 febbraio 2017

SMS Server su Android

Se con i vecchi Nokia era molto semplice creare un SMS server, con Android cio' non e' possibile perche' i dati sono contenuti in una sezione del disco non accessbile in modo immediato e non esiste la possibilita' di default di creare un backup.
Alcuni hanno sviluppati applicazioni Android che leggono il database degli SMS e li reinviano via mail ma la soluzione non e' molto elegante e flessibile...l'ideale e' accedere via ADB

Per prima cosa pero' e' necessario effettuare il root del dispositivo (nel mio caso un Moto E)



i dati degli SMS sono contenuti nel file  /data/data/com.android.providers.telephony/databases/mmssms.db 
(e' un database Sqlite) che risulta essere accessibile solo a root....il gioco e' quindi copiarlo in una porzione del disco raggiungibile via adb pull come /data/local/tmp (da creare a mano via adb shell una volta per tutte).

----------------------------------
adb shell "su -c 'rm /data/local/tmp/mmssms.db'"

adb shell "su -c 'cp /data/data/com.android.providers.telephony/databases/mmssms.db /data/local/tmp'"
adb shell "su -c 'chmod 755 /data/local/tmp/mmssms.db'"
adb pull /data/local/tmp/mmssms.db
----------------------------------

Una volta ottenuto il file sul proprio computer gran parte del lavoro e' fatto.
Usando DB Browser for SQLite (per comodita') si osservano tutte le tabelle


il mio interesse e' quello di avere in uscita in CSV dei soli dati degli SMS. 

A questo punto mi interessa estrarre solo i campi body e date_sent e si puo' fare con il seguente script bash

------------------
sqlite3 mmssms.db << EOF
.mode csv
.headers on
.separator ";"
.output sms2.csv
select body,datetime(date_sent/1000, 'unixepoch','localtime') from sms;
.exit
EOF
------------------