Antecedentes
Independientemente de la información existente, mi reto no era descifrar la base de datos y recuperar los mensajes (sobre esto si se encuentra disponible un amplio abanico de artículos en Internet), sino recuperar mensajes eliminados de la base de datos, tanto si la aplicación ha sido eliminada (desinstalada) como si simplemente se ha eliminado el historial de chat desde el interfaz de la aplicación.
Por tanto, el trabajo es analizar la estructura interna de una base de datos SQLite, con el objetivo de recuperar la información que ha sido eliminada y que una sentencia SQL no es capaz de mostrar.
En este punto es donde empieza mi artículo, analizar el formato de SQLite para recuperar información eliminada.
Estructura de SQLite
Lo principal para analizar una base de datos SQLite internamente es conocer su formato interno, para ello lo mejor es consultar la documentación oficial (SQLite Database File Format) donde se explica como se organiza la información dentro del fichero con extensión .db (SQLite).
Una base de datos SQLite se organiza internamente en páginas, y dentro de cada página se almacenan los registros (filas), que se llaman celdas, correspondientes a la información de las tablas de la base de datos. Cada página tiene asignada una función dentro de la estructura del esquema de la base de datos (sql_master), es decir, una tabla de la base de datos almacena información en las celdas de una página.
De forma resumida, se puede representar el funcionamiento interno de una base de datos SQLite tal y como se puede ver en la siguiente imagen:
![]() |
ST2Labs 1 - SQLite Format Brief |
SELECT * FROM sqlite_master;
o bien, he creado mi propia herramienta que facilita la consulta de información de una base de datos SQLite, tal que así:python sqlite_ex.py msgstore.db
![]() |
ST2Labs 2 - WhatsApp sql_master (db_schema) |
Además la herramienta permite hacer un "dump" de la base de datos, guardar en un archivo el esquema de la base de datos al completo, o mostrar la información de una tabla en particular, por ejemplo, y siguiendo con el hilo del articulo, vamos a consultar la información sobre la tabla "message" que es donde Whatsapp almacena la información de los mensajes que se intercambian.
python sqlite_ex.py -i messages msgstore.db
![]() |
ST2Labs 3 - WhatsApp Messages Table Info |
Volviendo a la imagen 2, se observa que la tabla "messages" de WhatsApp se encuentra almacenada en la página 3 de la base de datos SQLite (msgstore.db) y la imagen 3 nos muestra el "contenido" como será organizado en la celda que se generan dentro de la base de datos en la página 3.
Volveremos más tarde a esta información, que nos resultará útil más adelante cuando empiece a analizar la estructura interna del fichero msgstore.db para recuperar la información eliminada.
Pero esto lo dejo para mi siguiente artículo.
La herramienta que he utilizado en éste artículo la podéis encontrar en mi repositorio oficial (https://github.com/ST2Labs/DFIR) o descargar la versión para windows directamente a continuación:
sqlite_ex.exe
sha1:
7IR6FALIEDG6EPAIE6LVMTZY2UFQVEOO (sha1 base 32)
sha-256:
6FE6BB8DB06D1A8E17ACD8B79A372821B23260468A92B54EAE229906D32FFACF
sha-512:
9D8A9AC6037F5F75367F31E2516D98613E8633C79536B99A76ACAD56865250A7845C8A411F1AB8213353DE7EB67AE3E429AAE063049E9A44B4E5E95444C3500C
Referencias:
[1] SQLlite File Format
#ST2Labs #GEOSystemSoftware
#DFIR
#Forensics
0 comentarios:
Publicar un comentario