Es la aplicación 'de moda' en el mundo móvil, casi acto seguido al 'dame tu teléfono' viene como pregunta ' ¿ Y tienes WhatsApp ?'. Claramente esta aplicación está cambiando el concepto de los SMS ofreciendo mensajería gratuita.

Alberto, ya alertó sobre la inseguridad de WhatsApp por la forma en la que transmite en claro los datos y lo que eso supone en entornos donde el medio es compartido.


Hoy toca hablar de la parte interna, de la forma en la que WhatsApp almacena y gestiona los datos. Si observamos desde dentro la estructura de ficheros de la aplicación llegamos a dos ficheros llamados msgstore.db y wa.db (las ubicaciones varían, como es lógico, de Android a Iphone). Estos ficheros están en formato SQLite.

Una vez importamos estos ficheros con alguna herramienta que permita ojear su interior (por ejemplo SQLite Manager) nos encontramos la primera sorpresa: ninguno de los datos ahí contenidos están cifrados. En wa.db se almacenan los contactos y en msgstore.db todos los mensajes enviados


Un momento ¿He dicho todos? Si, así es, toda la relación de mensajes enviados y recibidos están ahí. Y porqué hago hincapié en *todos*, sencillamente porque aunque WhatsApp teóricamente da la oportunidad mediante su interface gráfica de eliminar conversaciones, la realidad es que permanecen en la base de datos ad infinitum.

Y el tema es aun mas divertido si el envío o recepción de mensajes se produce en un momento donde esté activado el GPS, ya que WhatsApp almacena también en el fichero msgstore.db las coordenadas


En el caso de Android aun hay mas 'chicha' almacenada que podría ser interesante para un investigador forense -o novio celoso-. Por lo visto WhatsApp viene configurado by default con un nivel de logging extremadamente 'verbose' y almacena, dentro del directorio /files/Logs, unos ficheros con esta fisonomía:

Código:
 
# pwd
/data/data/com.whatsapp/files/Logs
# ls
whatsapp-2011-06-06.1.log.gz whatsapp-2011-06-09.1.log.gz
whatsapp-2011-06-07.1.log.gz whatsapp.log
whatsapp-2011-06-08.1.log.gz
#
En esos ficheros se registra con un nivel altísimo de debug todas las transacciones XMPP que realiza la aplicación, anotando con su correspondiente hora/fecha cuando se recibe o envía un mensaje (entre otras cosas).

Código:
 
011-06-09 00:47:21.799 xmpp/reader/read/message [email protected] 1307XXXXXX-30 0 false false

Esos ficheros son fácilmente 'parseables' para extraer la relación de números con los que se ha mantenido algún tipo de conversación. He creado un pequeño script que analiza el fichero y saca dicha relación de números:

Código:
import re 
import sys 
  
  
logfile = sys.argv[1] 
logdata = open(logfile,"r") 
dump = logdata.readlines() 
  
numerosin = [] 
numerosout = [] 
  
for line in dump: 
  
        m = re.search('(?<=xmpp/reader/read/message )\d+', line) 
  
       if m: 
  
                if not numerosin.count(m.group(0)): 
  
                        numerosin.append(m.group(0)) 
  
  
        m = re.search('(?<=xmpp/writer/write/message/receipt )\d+', line) 
  
        if m: 
  
                if not numerosout.count(m.group(0)): 
  
                        numerosout.append(m.group(0)) 
  
print "Numeros desde los que se han recibido mensajes\n"
print "\n".join(numerosin) 
print "\nNumeros a los que se han enviado mensajes\n"
print "\n".join(numerosout)
Que muestra una salida tal que así:

$ python whatsnumbers.py whatsapp-2011-06-08.1.log
Numeros desde los que se han recibido mensajes

34611111111
34622222222

Numeros a los que se han enviado mensajes

34611111111
34622222222

English version: http://www.securitybydefault.com/2011/06/what-whatsapp-doesnt-tell-you.html

Publicado por Yago Jesus en http://www.securitybydefault.com/2011/06/lo-que-no-te-cuenta-whatsapp.html