Postepay e quel vizietto di contattare servizi in background

Update 17:30: ho modificato il precedente titolo “Postepay e quel vizietto di contattare server di terze parti” in quanto, finche’ non si fa dello sniffing, non e’ possibile sapere a chi e’ destinato il traffico. Il bello e’ che lo avevo scritto anche nei commenti, ma mi era sfuggito il titolo ed e’ rimasto cosi’ quando l’ho pubblicato ^_^ Ribadisco, ho rimosso l’app perche’ effettuava delle chiamate in background pur non essendo stata avviata e senza un motivo apparente. Grazie ai ragazzi di 01tribe per avermi fatto notare la svista.
———————–

Stavo facendo un po’ sano di debug di una mia app Android quando,casualmente, mi cade l’occhio su queste stringhe nella shell con l’output di adb logcat:

D/dalvikvm(27834): GC_CONCURRENT freed 429K, 6% free 8894K/9412K, paused 26ms+47ms, total 115ms
D/kM      (27834): =============================== RESPONSE START ================================
D/kM      (27834): <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
D/kM      (27834): <ns2:context-response xmlns:ns2="http://moni.01tribe.com/context">
D/kM      (27834):     <ns2:response-header>
D/kM      (27834):         <ns2:status>
D/kM      (27834):             <ns2:status-code>999</ns2:status-code>
D/kM      (27834):             <ns2:status-description>Non e' stato possibile verificare la disponibilita' dei servizi</ns2:status-description>
D/kM      (27834):         </ns2:status>
D/kM      (27834):         <ns2:trace-id>791654851</ns2:trace-id>
D/kM      (27834):     </ns2:response-header>
D/kM      (27834):     <ns2:body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="PivotOutAppCheck"/>
D/kM      (27834): </ns2:context-response>
D/kM      (27834): ================================ RESPONSE END ================================
I/System.out(27834): <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
I/System.out(27834): <ns2:context-response xmlns:ns2="http://www.01tribe.com/context">
I/System.out(27834):     <ns2:response-header>
I/System.out(27834):         <ns2:status>
I/System.out(27834):             <ns2:status-code>999</ns2:status-code>
I/System.out(27834):             <ns2:status-description>Non e' stato possibile verificare la disponibilita' dei servizi</ns2:status-description>
I/System.out(27834):         </ns2:status>
I/System.out(27834):         <ns2:trace-id>791654851</ns2:trace-id>
I/System.out(27834):     </ns2:response-header>
I/System.out(27834):     <ns2:body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="PivotOutAppCheck"/>
I/System.out(27834): </ns2:context-response>
D/EXPIRED (27834): <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
D/EXPIRED (27834): <ns2:context-response xmlns:ns2="http://www.01tribe.com/context">
D/EXPIRED (27834):     <ns2:response-header>
D/EXPIRED (27834):         <ns2:status>
D/EXPIRED (27834):             <ns2:status-code>999</ns2:status-code>
D/EXPIRED (27834):             <ns2:status-description>Non e' stato possibile verificare la disponibilita' dei servizi</ns2:status-description>
D/EXPIRED (27834):         </ns2:status>
D/EXPIRED (27834):         <ns2:trace-id>791654851</ns2:trace-id>
D/EXPIRED (27834):     </ns2:response-header>
D/EXPIRED (27834):     <ns2:body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="PivotOutAppCheck"/>
D/EXPIRED (27834): </ns2:context-response>
D/fB      (27834): Siamo spiacenti. Non è stato possibile effettuare l'operazione richiesta. Si prega di riprovare più tardi

Mmmm, insospettito da un messaggio del genere, inizio a chiedermi cosa possa averlo generato e, scorrendo il log, trovo poco sopra quest’altro messaggio:

D/kM      (27834): +++++++++++++++++++++++++++++++ REQUEST START +++++++++++++++++++++++++++++++
D/kM      (27834):<?xml version="1.0" encoding="UTF-8"?>
<context:context-request xmlns:context="http://www.01tribe.com/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <context:request-header>
    <context:trace-id>791654851</context:trace-id>
    <context:channel>mobile</context:channel>
    <context:workflow-name>appCheckPublicWorkflow</context:workflow-name>
    <context:action-name>ActionAppCheck</context:action-name>
    <context:user-agent>Android</context:user-agent>
    <context:language-code>it</context:language-code>
    <context:country-code>IT</context:country-code>
  </context:request-header>
  <context:body>
    <PivotInAppCheck>
      <appName>postepay</appName>
      <appVersion>1.2.3</appVersion>
    </PivotInAppCheck>
  </context:body>
</context:context-request>
D/kM      (27834): ++++++++++++++++++++++++++++++++ REQUEST END ++++++++++++++++++++++++++++++++

Postepay app on Android E scopro che l’artefice di tutto questo e’ l’applicazione Postepay, realizzata da 01tribe.

Ora, de gustibus, ma a me app che mandano richieste in background a servizi senza dirmi niente, senza essere in esecuzione e che richiedono permessi anche un po’ sospetti (tipo Phone calls, Your social information) anche se poi vengono tutti usati legittimamente dentro l’app, a me queste app mi provocano una reazione immediata: disinstallazione.

Certo, potrei controllare con uno sniffer il traffico realmente scambiato (ammesso di riuscire a riprodurre questa situazione) e verificare che sia innocuo per la mia privacy, ma in questo momento ho altro da fare, quindi bye bye Postepay, io ho installato la tua app, non capisco perche’ devi contattare server di un sito di cui non so niente in background. E per fare cosa poi?

Nexus One, un Android come Torrent server

Nexus One come Torrent serverDopo un paio d’anni quasi di glorioso servizio (prima come smarthphone principale e poi come device di test per lo sviluppo), proprio non riuscivo a contemplare l’idea di mandare in pensione il mio glorioso Nexus One. Cosi’, dopo qualche sperimentazione, ho scoperto che posso ancora reimpiagarlo con successo come torrent client domestico, centralizzando su di esso (quasi) tutto il download. Di materiale legale, ovviamente!

Per prima cosa ho messo sul  mio N1 una CyanogenMod, giusto per dare un’aggiornata al sistema e incrementarne un po’ le performance. Questo passo e’ solo consigliato, ma non necessario. Inoltre, ho messo un microSD da 16Gb come storage, per avere la possibilita’ di mettere piu’ di qualche file in coda contemporaneamente. Anche tagli piu’ piccoli di microSD vanno bene: dipende tutto da quello che ci si vuole fare.

Come software per il download dei torrent ho scelto, tra tanti, tTorrent, principalmente per questi motivi:

  • riavvio automatico del programma al riavvio del dispositivo ed altre impostazioni per il risparmio di energia
  • supporto dell’uPNP, quindi con i router compatibili (tutto oggigiorno) non devo preoccuparti di aprire le porte necessarie per massimizzare il traffico in entrata
  • possibilita’ di limitare la banda sia in download che in upload
  • capacita’ di analizzare qualunque file messo in una determinata cartella e, se corrisponde ad un .torrent, viene automaticamente messo in download
  • plugin per la ricerca dei torrent direttamente all’interno del programma
  • scelta dei file da scaricare contenuti in ogni .torrent
  • ha un’interfaccia ottimizzata per i tablet

Gli altri software che ho esaminato, come aTorrentµTorrent Beta o BitTorrent Beta (che e’ uguale ad µTorrent) non avevano tutte queste caratteristiche assieme, soprattutto quella dell’analisi dei file .torrent messi in una cartella del dispositivo. Magari nel tempo le implementeranno.

Altra esigenza da gestire e’ quella di condivedere i file scaricati dal telefono al proprio PC. La soluzione piu’ semplice e’ quella di collegare il telefono all’USB del proprio computer e abilitare l’USB storage, anche se poi questo interromperebbe i download in corso. Soluzione piu’ elegante prevede l’uso di un server FTP sul dispositivo. Ho scelto Ftp Server, anche se non mi soddisfa ancora appeno (non riparte, ad esempio, al riavvio del dispositivo). Dai test che ho fatto, con questa app riesco a fare il download dei file a piu’ di 2 Mbyte/secondo, tenendo pero’ disattivato il tTorrent, altrimenti va molto piu’ lento. In alternativa, anche un server samba, come Samba Filesharing, puo’ egregiamente svolgere il suo compito, dipende tutto dalle vostre preferenze.

Combinando tTorrent e il server FTP (o Samba), basta copiare un file .torrent in una specifica cartella del dispositivo (di default /sdcard/torrent/incoming) e tTorrent iniziera’ a scaricare quanto richiesto, senza neanche toccare il telefono. Se invece volete direttamente ricercare e scaricare tutto dal telefono, il consiglio e’ di installare il plugin apposito di tTorrent per fare le ricerche direttamente dentro l’app oppure Torrent Search, in grado di cercare su IsoHunt e BitSnoop ed con alcuni filtri predefiniti come il tipo di file da cercare (video, musica ecc) e l’history delle ricerche fatte.

Ciliegina sulla torta: iMediaShare per visualizzare direttamente i video su TV dotate di WiFi e server DLNA, oppure con una XBox 360 o PlayStation 3 collegate. Non c’e’ neanche piu’ da accendere il pc o collegare cavi :)

Per quanto riguarda il consumo energetico, posso dire che e’ praticamente nullo: senza corrente la batteria del telefono dura per piu’ di una giornata, mentre per la ricarica l’ho attaccato alla presa USB del mio router, risparmianto un alimentatore e una presa di corrente.

I limiti attuali del sistemino che ho messo in piedi sono sostanzialmente due: la prima e’ la velocita’ di download, che nella versione Lite di uTorrent e’ limitata a 250 kb/sec, ma basta acquistare la versione a full dell’app e non e’ piu’ un problema, oppure usare un altro torrent client come aTorrent. La seconda rigurda le dimensioni del file: essendo la microSD formattata in FAT32, non si possono scaricare file piu’ grandi di 4GB. Devo fare qualche prova per vedere se, formattando con ext2, questo limite puo’ essere aggirato (risolto, guardare la sezione primo update).

Nonostante questi limiti, la goduria e’ massima: aver riciclato un device che altrimenti avrei lasciato inutilizzato, un consumo energetico praticamente pari a zero, portabilita’ totale, magari per andare una sera a casa di amici e continuare a scaricare da loro ;)

Variazioni sul tema: invece di scaricare sulla microSD del dispositivo, se avere gia’ uno storage server domestico che supporta il protocollo SMB (direi tutti), potete sempre mappare la sua condivisione Samba su una cartella del device con app quali AndSMB, e impostare poi tTorrent per scaricare direttamente su quella cartella. Perdete la portabilita’, ma almeno non avrete piu’ problemi di spazio e/o dimensione del file. Occorrerebbe verificare le performance, che potrebbero diminuire facendo passare tutto e sempre sulla rete WiFi.

 

Primo update

Come pensavo, grazie alla combinazione Cyanogenmod (o altra ROM che supporta il filesystem di tipo ext2), mi e’ bastato formattare la SD in ext2 invece che un FAT32 per aggiungere il supporto a download di file oltre i 4GB. Per fare questa operazione ho collegato il Nexus all’USB del mio pc con Ubuntu e ho attivato l’USB storage su quest’ultimo, potendo in questo modo usare la SD del device come un normale disco esterno sul mio desktop. Ho copiato tutti i dati presenti nell’unita’, ho lanciato GParted e l’ho formattata in ext2. Finita la formattazione, ho ricopiato i dati salvati nella sd e dal terminale ho eseguito questo comando: sudo chmod -R 777 * (all’interno della root folder della SD). Ho smontato dal pc l’unita’ e ho riavviato il Nexus.

Ubuntu for Android, la convergenza del tutto!

httpv://www.youtube.com/watch?v=ZQozs5tXxwY

Finalmente un senso a questi processori sempre piu’ potenti. Finalmente un device che tra storage locali e dati nel cloud, connettivita’ always-on e context-aware, diventa un punto di aggregazione unico per la mia vita digitale. Finalmente un mediacenter che ha anche altre funzioni. Nonostante le cose ancora da migliorare, forse il primo tecnogadget per cui sento davvero la voglia metterci le mani sopra il prima possibile! Speriamo di vedere qualcosa al MWC.

Continue reading

Tethering dallo smartphone, ecco come gli operatori telefonici possono scoprirlo

Molte delle promozioni per la navigazione web dal proporio smartphone precisano che l’accesso ad Internet e’ consentito *solo dal device*, e non attaccando il device ad un computer attraverso il tethering (wifi o usb). Mi sono sempre chiesto come facessero i carrier a capire quando stavo navigando nell’uno o nell’altro modo, e grazie a questo commento a questo post ho avuto la risposta, almeno per Android:

The built-in tether support acts as a WiFi hotspot and router. This does a USB tether, and acts as a network proxy. Very different.

The biggest difference, from the carrier’s end, is that routing is pretty easy to detect; each packet that goes through the router, the time-to-live (TTL) field in the IPv4 header is decremented. In addition, there is NAT going on, and there are heuristics to detect that. There are ways around this using Linux’s iptables that can masquerade the routing/NAT, but I’m unaware of any mainstream implementations of this on Android, and it would require root. This app doesn’t; I’m like 90% sure it’s all done over ADB (Android Debug Bridge), which every Android device supports.

With the USB tether acting as a network proxy, there is simply no routing/NAT going on, so there is no way for the carrier to detect what’s going on. It just appears to be data coming from the phone.

Ottimo, penso anche che il meccanismo sia estendibile anche ad altre piattaforme, non si finisce mai di imparare dai commenti! Prossima mossa, vedere se veramente il tethering USB non viene scoperto dai carrier.

Linkflood 20111029: Holodesk ed applicazioni Android su Win/Mac

The Essence of Google Dart: Building Applications, Snapshots, Isolates – Un articolo che parla un po’ piu’ in dettaglio di Dart, il nuovo linguagguio di programmazione per il web creato da Google.

Problema di sicurezza iPad 2: la SmartCover scardina le password – Il codice di sicurezza degli iPad2 che protegge l’accesso al dispositivo ad estranei e’ facilmente aggirabile usando la SmartCover. Un esempio di hardware hacking. Fortunatamente l’accesso e’ completo al dispositivo, ma limitato alle app aperte prima di bloccarlo.

Bluestacks – Eseguire applicazioni Android su Windows non sembra piu’ un sogno, grazie a Bluestack. Dalle prove che ho fatto, devo dire che …

Codify iPad – Un editor LUA per iPad, con la possibilita’ di gestire la scrittura di codice anche in modo touch. Esperimento interessante, ma non mi convince molto, dato che la tastiera, e al limite il mouse, sono da sempre stati i migliori amici del dev. ;) Rimane pero’ il fatto che e’ un editor LUA per iPad con alcune interessanti funzioni (auto competition, project browser ecc).

MonoGame Goes Multi-platform: MonoGame 2.0 Announced – Si aggiunge un nuovo nato alla famiglia Mono / Monotouch/ MonoDroid: e’ infatti arrivato MonoGame, versione crossplaform per desktop e mobile delle API XNA. Quindi Windows, Linux, Mac, Android, iPad. Supporto nativo del codice, invece, da parte di XBOX e Windows Phone 7. Decisamente un qualcosa da provare non appena trovo un po’ di tempo libero!

Qualcomm Augmented Reality Mobile SDK  – Un SDK per realizzare applicazioni in realtà aumentata rilasciato da Qualcomm per Android e iPhone. Stiamo parlando di riconoscimento di forme, non piu’ solo location-base. Da tenere sott’occhio assieme agli SDK rilasciati da Layar e da Wikitude.

Holodesk bt Microsoft – Sensori 3D, Kinect, complesse computazioni, qualche specchio ben piazzato ed ecco nato un desktop olografico made in Microsoft, che da la possibilita’ di interagire in maniera naturale con gli oggetti creati al suo interno.

Android Orphans: Visualizing a Sad History of Support – Un’infografica che mostra lo stato attuale della frammentazione del mondo Android per quanto riguarda la disponibilita’ di aggiornamenti del sistema operativo rilasciati dai produttori dei dispositivi nell’arco di 3 anni. Una triste situazione, con moltissimi device lasciati a se stessi. Impossibile immaginare uno scenario diverso: i produttori hanno tutto l’interesse a far acquistare nuovi device, piuttosto che rilasciare aggiornamenti per mantenerli ancora competitivi sul mercato. Speriamo che quando dichiarato da Google al Google I/O, riguardante la policy sul supporto agli aggiornamenti del sistema operativo per almeno 18 mesi dalla data di rilascio di un dispositivo, sai davvero rispettata.

Trailer, le risposte della SIAE – Embeddate video di trailer cinematografici nel  vostro sito, che contengono colonne sonore coperte da diritto d’autore (come tutte quelle dei film)? Bene, dovete pagare la SIAE.

Continuous Integration for Mobile – LinkedIn non e’ nuova a scrivere dei dettagliati post che spiegano com’e’ organizzata la sua struttura IT per gestire specifiche situazioni. Stavolta tocca all’ambiente di Continuous Integration per le applicazioni mobili del portale.