15 mayo 2012

WhatsApp Forensics

Siguiendo la línea de algunos posts sobre la aplicación WhatsApp (que de seguro todos conocemos), en este post me gustaría presentaros una herramienta para facilitar la extracción e interpretación de los datos generados por esta aplicación. 

 Si bien es cierto que la aplicación cifra los logs de los mensajes cuando realiza el backup en la sdcard, todos estos registros así como las conversaciones actuales, agenda de contactos y demás ficheros propios de la aplicación, se encuentran sin cifrar en la memoria interna del dispositivo, de tal forma, que accediendo a la memoria del dispositivo podremos extraer dichos ficheros para analizarlos en otro entorno. 

 La aplicación que me gustaría presentaros está escrita en Python (DJango) y aunque es una versión Beta y espero poder seguir agregándole más funcionalidades, nos facilitará bastante la tarea a la hora de interpretar la información basándose en los registros de los siguientes ficheros:
  • wa.db (agenda de contactos)
  • msgstore.db (conversaciones actuales)
  • whatsapp-YYYY-MM-DD.log.gz (registro de conversaciones)
  • msgstore-YYYY-MM-DD.X.db.crypt (registro de conversaciones cifrado)
Listado de archivos de interés
Nota: Como registro de mensajes solo se usará msgstore.db, pero podemos reemplazar este archivo por cualquiera de los registros de mensajes guardados. Para descargar la aplicación, podemos hacerlo desde la URL del proyecto descargando el fichero zip/tgz o clonando el repositorio:
~$ git clone git://github.com/sch3m4/wforensic.git Cloning into 'wforensic'... remote: Counting objects: 136, done. remote: Compressing objects: 100% (117/117), done. remote: Total 136 (delta 11), reused 135 (delta 10) Receiving objects: 100% (136/136), 364.66 KiB | 163 KiB/s, done. Resolving deltas: 100% (11/11), done. ~$ 
Una vez hecho esto, entramos en el directorio creado y copiamos en él los ficheros wa.db y msgstore.db:
~$ cd wforensic/ ~/wforensic$ cp -v /tmp/*.db . `/tmp/msgstore.db' -> `./msgstore.db' `/tmp/wa.db' -> `./wa.db' ~/wforensic$ ls -1 CHANGELOG LICENSE README msgstore.db tools wa.db wforensic ~/wforensic$
En caso de necesitar utilizar un registro de log, procederemos de la misma manera, descomprimiendo el fichero:
~$ gzip -d whatsapp-2012-05-03.1.log.gz ~$ mv whatsapp-2012-05-03.1.log wforensic/msgstore.db ~$
Hecho esto, podemos iniciar la aplicación y acceder al navegador accediendo al puerto correspondiente, que por defecto es el 8000:
Ejecutando el servidor DJango
 Hecho esto, si accedemos a la URL especificada podremos ver como página principal un breve resumen de la actividad:
Index (1/2)
Index (2/2)
Si por el contrario, solo tenemos acceso a los ficheros cifrados, podemos usar el script "tools/decrypt.py" (gracias al post de Alejandro Ramos):
Volcando y descifrando un registro de mensajes desde la sdcard.
Ahora volvemos a acceder a la aplicación y navegar por todos sus apartados para revisar el registro descifrado:
Contactos
Página Principal
En la parte de "Contacts" (como en el resto de la aplicación) se muestran tanto los contactos con WhatsApp como los que no. Cuando un contacto tiene WhatsApp instalado en su dispositivo, aparecerá con el icono (como se muestra) al lado del nombre, el número de mensajes intercambiados y un enlace en su número de teléfono para mostrar la conversación. 

En el menú superior de la aplicación, aparecen secciones para ver la lista de contactos, los chats mantenidos, mostrar los mensajes con coordenadas GPS, mensajes con contenido multimedia, etc. Cuando un mensaje posee algún tipo de adjunto (imagen, contacto, coordenadas, etc.) a demás de mostrar el thumbnail del contenido, nos aparecerá un icono al lado del nombre del contacto, con la URL al contenido original, (en el caso de las coordenadas GPS, será un enlace a Google Maps). Y para sorpresa (o no) de muchos, esto es lo que pasa cuando accedemos a la URL original:
Mensajes multimedias
Contenido original
Y finalizando, dos capturas para ver cómo se muestra el listado de chat y las conversaciones:

Chat
Lista de Chats
Como dije al principio del post, se trata de una beta y se le pueden agregar muchas más opciones que espero poder agregar. No obstante, toda contribución de ideas (se incorporarán al TODO) , manual o mejora (serán agregadas lo antes posible) es bienvenida.

Artículo cortesía de Chema García

16 comments :

Amigo dijo...

soy nuevo en esto y si necesito revisar algunas mis conversaciones en Whatsapp, alquien me pude dar isntrucciones de des cero.

sbzo dijo...

Excelente desarrollo, muchas gracias.

silverhack dijo...

Cojonuda aplicación Lympex!!
Me ha gustado mucho
Enhorabuena

Jbscarva dijo...

Muito bom! Excelente e obrigado!

Keiller dijo...

Probado!! Muy bueno. Gracias.

paco dijo...

hola Chema,

una pregunta: ¿crees que hay posibilidad de enviar whatsapps a tus contactos desde aplicaciones externas? ya sea en android emulados o en terminales de verdad...

saludos, paco

pelopicopata dijo...

hola buenas, estoy muy interesado en descifrar un fichero whats app de bb, soy un poco novato en este tipo de cosas, alguien me podria ayudar? gracias

Marilosal dijo...

Con este metodo aparecen tambien los mensajes eliminados? es que con el anterior solo accedia a los que no habian sido borrados.

gracias

elSant0 dijo...

Muy buena. Creo que mucha gente podrá sacarle provecho.

Por cierto, una futura ampliación podría ser la posibilidad de manipular los ficheros msgstore.db y wa.db situados en memoria interna de los teléfonos ("/data/data/com.whatsapp/").
En mi caso particular, estoy migrando WhatsApp de un móvil con Symbian a uno con Android. En Symbian no están las bases de datos encriptadas, por lo que rescato el fichero msgstore.db de la moria interna. Pero estoy buscando el modo de colocarlo en la memoria interna del Android y me resulta imposible (ni siquiera siendo root soy capaz de pegar nada en "/data/data").

Salu2

Mariano Santi dijo...

Tengo instalado ActivePython 2.7, me baje el programa programa wforensic, tengo los archivos 2012-06-07.log.1.gz y 2012-06-07.log, el archivo  msgstoredb.cpp no lo he podido sacar del celular imagino debido a que tengo que usar algo para apagar el whatsapp ya que este lo oculta o lo protege, 

jodido dijo...

Hola, no me puedo creer que la unica base de datos que no se puede abrir es la de symbian, la verdad que es increible¿y si nos juntamos todos los que queremos abrir una y le pagamos a alguien que sepa de verdad para que nos consiga la bendita clave?

Security By Default dijo...

Alguien que sepa de verdad? Madre mía...

El 10/07/2012, a las 09:23, Disqus escribió:
[image: DISQUS]

1v4n dijo...

también sirve para los archivos messageStore.db de blackberry..???

Inexperto dijo...

Espero no ofender a nadie con este pedido, pero hay posibilidad de empacar esto con py2exe para usuarios (cro-magnones como yo mismo) que usamos solo Win y no tenemos ni idea de Linux.

hluisgarcia dijo...

Lo tengo todo instalado en ubuntu 13.10, pero a la hora de arrancar la aplicación, en la web solo aparece "A server error occurred. Please contact the administrator."

en la terminal puedo leer todo esto, tras tratar de actualizar la web:

File "/usr/lib/python2.7/dist-packages/django/template/defaulttags.py", line 404, in render
raise NoReverseMatch("'url' requires a non-empty first argument. "
NoReverseMatch: 'url' requires a non-empty first argument. The syntax changed in Django 1.5, see the docs.


Problema de sintaxis, parece sencillo, pero no tengo ni idea de python. ¿Alguna sugerencia?

milisdad dijo...

mismo conmigo