Desencriptando la base de datos de WhatsApp

Posted by in Bases de datos, Python

#WhatsApp se ha convertido en muy poco tiempo en una app imprescindible en el móvil. Muchos se preguntarán … ¿y por qué hablas en www.manejandodatos.es de WhatsApp? Bien, el motivo es sencillo:

Todo lo que ocurre en WhatsApp se almacena en algún sitio, concretamente, en una base de datos SQLite.

Antes de que se produjera su éxito, WhatsApp era una aplicación donde lo importante era el servicio que prestaba: comunicarte con tus contactos, compartir fotos, videos, … La base de datos seleccionada es la mejor para este tipo de aplicaciones: SQLite, aunque en las primeras versiones apenas se había prestado atención a la seguridad.

Sin embargo, tras las críticas que recibieron hace unas cuantas versiones, WhatsApp decidió cifrar su base de datos para mejorar la privacidad. Y claro, directamente desde algún administrador SQLite es imposible acceder a la base de datos.

Navegando por la red, conocí el proyecto WhatsApp Xtrac, de los fenómenos de XDA, y decidí probarlo. Cómo suelo trabajar con Python 2.7, me salto la parte de instalar Python. Además, cómo la versión de Python que utilizo es Anaconda, ni siquiera necesito instalar PyCripto, un paquete que ya está incluido.

PyCripto

PyCripto

De todas formas, dada la necesidad de PyCrypto, si no tienes el paquete disponible, puedes descargártelo de aquí, y en menos de un minuto, segundo paso completado!

Ahora pruebo a desencriptar:

Desencriptando WhatsApp

Desencriptando WhatsApp

Aunque ha dado error, parece que me escribe algunas tablas de SQLite, así que voy a un administrador a comprobarlo.

Desencriptando WhatsApp

Desencriptando WhatsApp

Algunas cosas del proyecto que no me convencen, pero debo reconocer que funcionar …. funciona!

Cómo no me ha convencido el resultado, y encima me salta un error … reviso la documentación, y compruebo que … me he equivocado. Vamos a volver a probar, pero ahora con la sentencia correcta:

Descencriptar WhatsApp

Descencriptar WhatsApp

Ahora sí lo ha hecho correctamente. Pongo aquí el listado de archivos:

Directorio de WhatsApp

Directorio de WhatsApp

Y el resultado en HTML obtenido,  con toooodas mis conversaciones (he ocultado información que es confidencial, pero se comprueba perfectamente el resultado!):

Informe de conversaciones en WhatsApp

Informe de conversaciones en WhatsApp

Más de uno se sorprenderá al comprobar que incluso en la base de datos se guardan las fotos en minuatura! Si deseas ver todo, entonces, además de msgstore.db.crypt, copia también los directorios /Media.

Quizás sea mi forma de trabajar, pero …. revisando el código de WhatsApp Xtract, no comprendo cómo toda la parafernalia de código CSS y Javascript la meten como una variable, en lugar de hacer una plantilla en HTML5, de forma que la tabla a generar se inserte en un lugar específico en dicha plantilla, así separamos lo que es Python, de lo que es CSS o HTML. Aunque sí tengo que decir que el diseño elegido es bonito!

Para los más atrevidos a meterle mano al código en Python, estoy seguro de que no les resultará dificil ampliar con nuevas funcionalidades, en lugar de una salida en HTML.

Por lo demás, la herramienta hace su función … perfectamente!!

Ah, y no me hago responsable de su uso, ni de lo que encontreis ni nada de nada. Solo expongo esto a título académico! Si te ha parecido interesante, acepto donaciones para mantener este blog!

Actualizo a fecha Febrero de 2018, y aquí teneis un proyecto para trabajar con WhatsApp: https://github.com/B16f00t/whapa

Un saludo, y buen día!

Google+ Comments - Comentarios Google+