Lo que no te cuenta WhatsApp

La última moda en aplicaciones móviles se llama WhatsApp, una App que cada vez se hace más popular y está redefiniendo el sistema de mensajería SMS. 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 un servicio mucho más completo, mejor y de momento gratuito.

Pero hoy quiero hablaros 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/a celoso/a-. 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:

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

011-06-09 00:47:21.799 xmpp/reader/read/message 346XXXXXXX@s.whatsapp.net 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. A continuación un pequeño script que analiza el fichero y saca dicha relación de números:


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
Números desde los que se han recibido mensajes:
34611111111
34622222222

Números a los que se han enviado mensajes:
34611111111
34622222222

Visto en: Security By Default.

1 comentario

  1. Muchas gracias por la informacion. Esta claro que toda esa informacion no se alamacena por casualidad. Como puedo acceder a esos “archivos msgstore.db” para borrarlos definitivamente? muchas gracias

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.