Magazine Informatica

Reverse engineering sul servizio MMS via Web di Vodafone.it

Creato il 22 novembre 2011 da Nightfly

Ormai da qualche tempo il servizio MMS via Web di Vodafone.it è stato sospeso. Ne è la riprova il fatto che sul sito non esiste più il link che ci consentiva di accedere all'interfaccia per l'invio degli MMS.

Nonostante ciò non mi sono dato per vinto ed ho iniziato ad esaminare il file VodafoneMMS.py di MoioSMS. Grazie a questa analisi ho individuato la URL che identifica l'interfaccia per l'invio degli MMS, ovvero:

http://mmsviaweb.net.vodafoneomnitel.it/WebComposer/web/mms.jsp

Inolte, per poter visualizzare tale pagina è necessario che prima vi logghiate sul sito della Vodafone, in modo da salvare in un cookie l'ID della sessione (JSESSIONID).

 

mms.jpg

Per quanto mi riguarda, però, il problema non è stato risolto. Infatti utilizzavo tale servizio per monitorare alcuni server (gli alert mi arrivavano direttamente sul telefonino sottoforma di MMS). Il client che mi permetteva di inviare i messaggi da bash era MoioSMS (come avrete certamente intuito), progetto open source realizzato da Silvio Moioli e non più mantenuto. Fatto sta che da qualche settimana gli alert hanno cessato di arrivare sul mio telefono cellulare, indi per cui ho deciso di realizzare uno script che svolge le stesse funzioni del client menzionato in precedenza.

Ecco lo script:

#!/bin/bash
echo "Inserisci il destinatario:"
read destinatario
echo "Inserisci l'oggetto del messaggio:"
read oggetto
echo "Inserisci il testo del messaggio:"
read testo
echo "$testo" > text
sed -e "s/ /%20/g"  text > encoded
enc=$(cat encoded)
curl -c cookiev.txt -F "username=vostrousername" -F "password=vostrapassword" https://www.vodafone.it/190/trilogy/jsp/login.do 2&>1
curl -b cookiev.txt --data "recipient=$destinatario&subjecttosend=$oggetto&SmilName=&TextName=$enc&ImageName=&AudioName=&nextPage=/web/servletresult.html" http://mmsvi
aweb.net.vodafoneomnitel.it/WebComposer/web/elaborapop.jsp | grep -o -E '"s*(.*)>(.*)"' > out
sed -n '2p' out > out1
sed -e s/"//g out1 > out2
sed -e "s/ /+/g" out2 > out3
url="http://mmsviaweb.net.vodafoneomnitel.it"
url1=$(cat out3)
url2=$(echo "$url$url1")
curl -b cookiev.txt $url2 2&>1
sudo rm out*

Come potete notare lo script prevede un minimo di interattività, ovvero richiede l'inserimento del numero del destinatario (munito di prefisso +39), l'oggetto del messaggio ed il testo.

Affinchè il messaggio possa essere inviato correttamente, è necessario che il testo venga sottoposto ad url-encoding. Inoltre, poichè trattasi di uno script versione alfa, ho previsto l'url-encoding solo per gli spazi. La riga di codice che svolge tale funzione è la seguente:

sed -e "s/ /%20/g"  text > encoded

A questo punto, grazie a cURL ho proceduto con l'invio delle credenziali per il login sul sito della Vodafone:

curl -c cookiev.txt -F "username=vostrousername" -F "password=vostrapassword" https://www.vodafone.it/190/trilogy/jsp/login.do 2&>1

Una volta loggato (e salvate le info necessarie all'interno di un apposito cookie), ho inoltrato l'MMS vero e proprio:

curl -b cookiev.txt --data "recipient=$destinatario&subjecttosend=$oggetto&SmilName=&TextName=$enc&ImageName=&AudioName=&nextPage=/web/servletresult.html" http://mmsviaweb.net.vodafoneomnitel.it/WebComposer/web/elaborapop.jsp | grep -o -E '"s*(.*)>(.*)"' > out

E qui viene il bello. Infatti cURL non supporta javascript, quindi ogni qualvolta cercavo di inviare un MMS mi beccavo una pagina Web del tipo:

<html><head><title>302 Moved Temporarily</title></head>
<body bgcolor="#FFFFFF">
<p>This document you requested has moved temporarily.</p>
<p>It's now at <a href="/WebComposer/web/invia.jsp?SmilName=x1321909087221&recipient=345*******&subjecttosend=prova">/WebComposer/web/invia.jsp?SmilName=x1321909087221&recipient=345*******&subjecttosend=prova</a>.</p>
</body></html>

ovvero un fantastico redirect HTTP.

Bhè, alla fine non si è rivelato essere un ostacolo insormontabile, è bastato infatti dare in pasto la pagina precedente a grep, in modo da estrapolare il contenuto delle virgolette ("") mediante regex:

grep -o -E '"s*(.*)>(.*)"' > out

Il file out aveva il seguente contenuto:

"#FFFFFF"
"/WebComposer/web/invia.jsp?SmilName=x1321909004082&recipient= 39345*******&subjecttosend=prova"

Fortunatamente sed è venuto nuovamente in mio aiuto:

sed -n '2p' out > out1
sed -e s/"//g out1 > out2
sed -e "s/ /+/g" out2 > out3

Ovvero ho rispettivamente:

1) ricavato la seconda riga del file out, per poi inserirla in out1;

2) rimosso le virgolette;

3) sostituito l'unico spazio vuoto con il carattere + (per il prefisso internazionale).

A formattazione dei dati completata, ho eseguito l'invio definitivo dell'MMS:

curl -b cookiev.txt $url2 2&>1

dove $url2 non è altro che la concatenazione tra le variabili stringa $url ed $url1:

url="http://mmsviaweb.net.vodafoneomnitel.it"
url1=$(cat out3)
url2=$(echo "$url$url1")

Infine, ho rimosso tutti i file temporanei generati durante l'esecuzione dello script.

Per poter eseguire lo script dovete salvarlo in un file testuale, chiamandolo, ad esempio, autovodafone:

nightfly@nightbox:~$ sudo nano autovodafone

Rendete eseguibile il file appena creato:

nightfly@nightbox:~$ sudo chmod +x autovodafone

Generate un file di log (vuoto) nella directory /var/log:

nightfly@nightbox:/var/log$ sudo touch autovodafone.log

Ed avete finito.

Adesso abbiamo il nostro piccolo client bash per l'invio degli MMS Vodafone.

A presto.

PS: tempo permettendo estenderò lo script, realizzando l'URL-encoding di tutti i caratteri speciali e procedendo con l'implementazione di alcuni meccanismi di controllo per identificare l'esito dell'invio.


Potrebbero interessarti anche :

Ritornare alla prima pagina di Logo Paperblog

Possono interessarti anche questi articoli :