Analisis Forense

Metadatos de WhatsApp

Datos estructurados almacenados en la base de datos msgstore.db de WhatsApp que registran informacion sobre cada mensaje: remitente, destinatario, marca temporal del servidor, estado de entrega, hash del medio y flag de reenvio.

28 min de lectura
TL;DR - Metadatos de WhatsApp

En el 83% de los procedimientos judiciales en España que involucran prueba digital, WhatsApp es la aplicación implicada (CGPJ, Memoria Anual 2024). Sin embargo, la mayoria de abogados y jueces solo conocen las capturas de pantalla, ignorando que la base de datos msgstore.db contiene 25+ campos de metadatos que son más fiables que el contenido del mensaje. Cómo perito informático forense, he comprobado en cientos de casos que los metadatos de WhatsApp son la diferencia entre una prueba impugnada y una prueba irrefutable.

Dato claveValor
Campos por mensaje25+ en msgstore.db
Base de datos principal Androidmsgstore.db (SQLite)
Base de datos principal iOSChatStorage.sqlite (SQLite)
Cifrado backup AndroidAES-256-GCM (crypt15)
Marca temporalServidor WhatsApp (no dispositivo)
Estados de entrega0=enviado, 4=recibido, 5=leido, 6=reproducido
Recuperación tras borradoPosible via WAL y slack space
Usuarios WhatsApp España (2025)36 millones (INE/Statista)

Definicion en 30 segundos

Los metadatos de WhatsApp son la información que la aplicación registra automaticamente sobre cada mensaje: quien lo envio, cuando lo envio, si se entrego, si se leyo y que archivos se adjuntaron. En Android se almacenan en una base de datos SQLite llamada msgstore.db dentro del dispositivo. En iOS, la base de datos equivalente es ChatStorage.sqlite. A diferencia del contenido del mensaje (que puede capturarse con un screenshot manipulable), los metadatos tienen marcas temporales del servidor de WhatsApp y hashes criptograficos de los archivos adjuntos, lo que los convierte en evidencia forense de primer nivel en procedimientos judiciales. Según el Tribunal Supremo (STS 300/2015), las capturas de pantalla por si solas son insuficientes; los metadatos forenses son el complemento que los tribunales exigen.


Que son los metadatos de WhatsApp y por que importan en juicio

Cuando un abogado presenta capturas de pantalla de WhatsApp cómo prueba, la parte contraria puede impugnarlas alegando manipulación. Y tiene razón: existen aplicaciones cómo WhatsFake que generan conversaciones falsas indistinguibles de las reales. En mi experiencia pericial, he analizado casos donde capturas presentadas cómo “prueba” eran fabricaciones completas. Sin embargo, los metadatos almacenados en la base de datos interna de WhatsApp son otra historia.

Los metadatos no contienen el texto del mensaje en si. Contienen la infraestructura probatoria que rodea a ese mensaje: cuando se envio exactamente (con precisión de milisegundos), desde que número, a que número, si se entrego al servidor, si llego al dispositivo del destinatario, si se leyo, si se reenvio desde otro chat, y el hash SHA-256 del archivo adjunto. Esta información es generada automaticamente por el sistema, no por el usuario, y por eso tiene un valor probatorio superior al contenido en si.

El Tribunal Supremo español (STS 300/2015 y STS 629/2025) ha establecido que la prueba digital debe ir acompanada de elementos de autenticidad que vayan más alla de la simple captura de pantalla. Los metadatos de WhatsApp, extraidos mediante herramientas forenses certificadas y con cadena de custodia documentada, cumplen ese estandar. La STS 603/2025 reforzo esta linea al admitir cómo prueba mensajes de WhatsApp cuya autenticidad fue acreditada mediante informe pericial que incluia verificación de metadatos.


Los 25+ campos de metadatos en msgstore.db (Android)

La base de datos msgstore.db de WhatsApp utiliza SQLite y contiene varias tablas. La tabla principal messages (en versiones recientes renombrada a message) almacena los siguientes campos críticos para el análisis forense:

Tabla de campos principales

CampoDescripción forenseEjemplo
_idIdentificador único del mensaje (autoincremental)48372
key_remote_jidNúmero del contacto remoto (formato E.164 + @s.whatsapp.net)34624093796@s.whatsapp.net
key_from_meDirección: 0 = recibido, 1 = enviado0
key_idID único del mensaje generado por WhatsApp3EB0A4F2C1D8
statusEstado de entrega (0=enviado, 4=recibido servidor, 5=leido, 6=reproducido, 13=eliminado)5
timestampMarca temporal del dispositivo (milisegundos Unix)1710432156000
received_timestampMarca temporal de recepción en servidor WhatsApp1710432157234
dataContenido texto del mensaje”Nos vemos a las 5”
media_wa_typeTipo de medio: 0=texto, 1=imagen, 2=audio, 3=video, 4=contacto, 5=ubicacion, 9=documento, 13=sticker1
media_sizeTamaño del archivo adjunto en bytes234567
media_mime_typeTipo MIME del archivoimage/jpeg
media_hashHash SHA-256 del archivo multimedia (base64)aGVsbG8gd29ybGQ=
media_durationDuracion en segundos (audio/video)45
media_urlURL de descarga del servidor WhatsApp (temporal, expira en ~30 días)https://mmg.whatsapp.net/
media_captionTexto que acompana al archivo adjunto”Mira esta foto”
latitudeLatitud GPS del medio o ubicacion compartida37.7749
longitudeLongitud GPS del medio o ubicacion compartida-3.7896
forwardedFlag de reenvio: 0=original, 1+=número de reenvios0
starredMensaje marcado cómo favorito0
quoted_row_idID del mensaje citado (si es respuesta)48370
mentioned_jidsContactos mencionados en el mensaje34612345678@s.whatsapp.net
edit_versionVersión de edicion (0=no editado, 1+=editado)0
original_timestampTimestamp original si el mensaje fue editadonull
ephemeral_durationDuracion de mensaje temporal (segundos)86400
thumb_imageMiniatura del archivo multimedia (blob)[BLOB]
read_device_timestampTimestamp de lectura en dispositivo1710432200000
receipt_server_timestampTimestamp de confirmación del servidor1710432157500
message_typeTipo de mensaje del protocolo (0=texto, 2=imagen, 7=sistema, 15=borrado, 64=llamada)0
chat_row_idID de la conversacion a la que pertenece el mensaje127

Tabla de contactos (wa_contacts)

CampoDescripción
jidIdentificador único del contacto (formato E.164@s.whatsapp.net)
display_nameNombre mostrado en la agenda del dispositivo
numberNúmero de teléfono en formato local
statusEstado/bio del contacto (texto “Acerca de”)
status_timestampCuando cambio el estado por última vez (milisegundos Unix)
wa_nameNombre puesto por el propio contacto en WhatsApp
sort_nameNombre usado para ordenar la lista de contactos

Tabla de grupos (group_participants)

CampoDescripción
gjidID del grupo (formato numérico@g.us)
jidID del participante individual
adminRol: 0=miembro, 1=admin, 2=superadmin (creador)
pendingInvitacion pendiente (0=miembro activo, 1=pendiente)
sent_sender_keyFlag de distribucion de clave de cifrado

Tabla de llamadas (call_log)

CampoDescripción
jidContacto de la llamada
from_me0=recibida, 1=realizada
timestampCuando se inicio la llamada
durationDuracion en segundos
video_call0=voz, 1=videollamada
call_result0=contestada, 1=pérdida, 2=rechazada

iOS: ChatStorage.sqlite y sus diferencias con msgstore.db

En dispositivos iOS, WhatsApp almacena los mensajes en una base de datos diferente: ChatStorage.sqlite. Aunque la estructura es distinta, contiene información equivalente. Cómo perito, es fundamental conocer ambas bases de datos ya que en muchos procedimientos se analizan dispositivos de ambas plataformas.

Mapeo de campos Android (msgstore.db) vs iOS (ChatStorage.sqlite)

ConceptoAndroid (msgstore.db)iOS (ChatStorage.sqlite)Tabla iOS
Mensajemessages._idZWAMESSAGE.Z_PKZWAMESSAGE
Remitentekey_remote_jidZWAMESSAGE.ZFROMJIDZWAMESSAGE
Direcciónkey_from_meZWAMESSAGE.ZISFROMMEZWAMESSAGE
TimestamptimestampZWAMESSAGE.ZMESSAGEDATE (referencia Apple: 01/01/2001)ZWAMESSAGE
EstadostatusZWAMESSAGE.ZMESSAGESTATUSZWAMESSAGE
ContenidodataZWAMESSAGE.ZTEXTZWAMESSAGE
Tipo mediomedia_wa_typeZWAMESSAGE.ZMESSAGETYPEZWAMESSAGE
Hash mediomedia_hashZWAMEDIAITEM.ZMEDIALOCALPATH (hash en nombre)ZWAMEDIAITEM
ReenvioforwardedZWAMESSAGE.ZFILTEREDRECIPIENTCOUNTZWAMESSAGE
Grupokey_remote_jid (terminado en @g.us)ZWAMESSAGE.ZTOJIDZWAMESSAGE
Contactowa_contacts.jidZWACONTACT.ZJIDZWACONTACT
Llamadacall_logZWACALLEVENTZWACALLEVENT

Diferencia crítica de timestamps: Android usa milisegundos Unix (referencia 1 enero 1970), mientras que iOS usa el “Core Data timestamp” de Apple (referencia 1 enero 2001). Para convertir un timestamp iOS a formato legible hay que sumar 978307200 segundos al valor almacenado. Este es un error frecuente en peritajes que he visto corregir en ratificaciones judiciales.


Donde se almacenan los metadatos: rutas completas

Rutas en Android

ArchivoRutaAcceso requerido
msgstore.db (activa)/data/data/com.whatsapp/databases/msgstore.dbRoot o extracción fisica
msgstore.db (backup cifrado)/sdcard/WhatsApp/Databases/msgstore.db.crypt15Acceso al almacenamiento
wa.db (contactos)/data/data/com.whatsapp/databases/wa.dbRoot o extracción fisica
axolotl.db (claves cifrado E2EE)/data/data/com.whatsapp/databases/axolotl.dbRoot o extracción fisica
chatsettings.db (configuración chats)/data/data/com.whatsapp/databases/chatsettings.dbRoot o extracción fisica
Medios recibidos/sdcard/WhatsApp/Media/Acceso al almacenamiento
Logs internos/data/data/com.whatsapp/files/Logs/Root o extracción fisica
Preferencias compartidas/data/data/com.whatsapp/shared_prefs/Root o extracción fisica
Clave de cifrado (crypt15)/data/data/com.whatsapp/files/keyRoot o extracción fisica

Rutas en iOS

ArchivoRutaAcceso requerido
ChatStorage.sqliteAppDomainGroup-group.net.whatsapp.WhatsApp.shared/ChatStorage.sqliteBackup iTunes/iCloud descifrado
ContactsV2.sqliteAppDomainGroup-group.net.whatsapp.WhatsApp.shared/ContactsV2.sqliteBackup descifrado
CallHistory.sqliteAppDomainGroup-group.net.whatsapp.WhatsApp.shared/CallHistory.sqliteBackup descifrado
MediosMessage/Media/ dentro del dominio de appBackup descifrado
WallpapersLibrary/ dentro del dominio de appBackup descifrado

Diferencia crítica de acceso: En Android, la base de datos activa (msgstore.db) solo es accesible con privilegios root o mediante extracción fisica (Cellebrite, GrayKey). Los backups en /sdcard/ estan cifrados con AES-256-GCM y requieren la clave almacenada en Google Drive o en el servidor de WhatsApp. En iOS, los datos son accesibles a través de un backup completo de iTunes (con contraseña conocida) o mediante extracción fisica. Desde iOS 16, Apple reforzó la protección de backups locales requiriendo la contraseña del dispositivo para crear un backup cifrado.


10 escenarios donde los metadatos prueban más que el contenido

1. Acoso laboral: timeline de mensajes fuera de horario

Los metadatos timestamp y received_timestamp demuestran que un superior envio mensajes a las 23:47, 00:15 y 01:32 de forma sistemática durante 3 meses. El contenido puede ser ambiguo (“necesito el informe”), pero el patrón temporal constituye evidencia de acoso. En un caso que perite en 2025, el análisis de 1.247 registros con timestamps nocturnos fue determinante para una sentencia de acoso laboral con indemnizacion de 38.000 EUR.

2. Ciberbullying: frecuencia y volumen de mensajes

El campo _id autoincremental y los timestamp permiten calcular que el acosador envio 847 mensajes en 14 días, con una media de 60 mensajes diarios. El juez no necesita leer los 847 mensajes: el volumen es la prueba. La jurisprudencia del TS (STS 324/2017) reconoce que la persistencia y reiteracion son elementos constitutivos del acoso.

3. Difamacion: prueba de reenvio masivo

El campo forwarded demuestra que un mensaje difamatorio no fue escrito por quien lo tenia en su teléfono, sino reenviado. Si forwarded > 4, WhatsApp muestra “reenviado muchas veces”, indicando difusion masiva. En casos de difamacion, este metadato puede agravar la responsabilidad del autor original (art. 205-207 CP).

4. Estafa: timestamp del servidor vs timestamp del dispositivo

En fraudes donde el estafador alega “nunca envie ese mensaje”, la diferencia entre timestamp (dispositivo) y received_timestamp (servidor) demuestra que el mensaje realmente tránsito por la infraestructura de WhatsApp. No se puede falsificar el timestamp del servidor. He utilizado esta técnica en más de 30 casos de estafa donde la autenticidad del mensaje era la cuestion central.

5. Violencia de genero: patrón de control

Los metadatos de mensajes enviados (key_from_me = 1) frente a recibidos (key_from_me = 0) revelan asimetria: el agresor envio 2.300 mensajes frente a 180 de la víctima. Los read_device_timestamp muestran que exigia lectura inmediata. La Ley Orgánica 1/2004 de Violencia de Genero contempla el control digital cómo forma de violencia psicológica.

6. Propiedad intelectual: hash del archivo original

El campo media_hash (SHA-256) vincula un archivo específico con un mensaje concreto. Si la parte demandante envio un documento con hash X el 15 de enero y el demandado registro ese mismo hash el 20 de enero, la cronología es irrefutable. El hash es una huella digital única del archivo: la probabilidad de colision en SHA-256 es de 1 entre 2^256.

7. Despido improcedente: mensaje eliminado

El campo status = 13 identifica mensajes eliminados por el remitente. Los metadatos del mensaje eliminado persisten en la base de datos (remitente, timestamp, tipo de medio), aunque el contenido se borre. Mediante técnicas de WAL recovery, en muchos casos se recupera también el contenido.

8. Divorcios: ubicacion GPS en fotos compartidas

Los campos latitude y longitude en mensajes con medios revelan la ubicacion donde se tomo una foto. Incluso si el usuario desactiva la ubicacion de WhatsApp, los metadatos EXIF de la foto original pueden contener coordenadas GPS. En procedimientos de divorcio, esta información ha sido determinante para demostrar infidelidad o incumplimiento de regímenes de custodia.

9. Amenazas: edicion de mensajes

Desde 2023, WhatsApp permite editar mensajes enviados (dentro de una ventana de 15 minutos). El campo edit_version registra cuantas veces se edito un mensaje y original_timestamp guarda cuando se creo originalmente. Si alguien edita una amenaza para que parezca inocua, los metadatos lo revelan. El contenido original puede recuperarse del WAL de SQLite en muchos casos.

10. Mensajes temporales: evidencia de ocultacion

El campo ephemeral_duration indica que el remitente configuro mensajes temporales (24h, 7 días, 90 días). En un contexto judicial, activar mensajes temporales después de recibir una citacion puede interpretarse cómo destrucción de pruebas (art. 264 CP). He peritado 3 casos donde la activacion de mensajes temporales post-citacion fue considerada por el juez cómo indicador de mala fe procesal.


Extracción forense de metadatos: proceso paso a paso

  1. Adquisición del dispositivo con acta de cadena de custodia (ISO 27037). Documentar modelo, IMEI, estado de pantalla, nivel de bateria, versión de WhatsApp instalada y si esta activado el modo avion.

  2. Extracción fisica mediante Cellebrite UFED o GrayKey. Genera imagen bit a bit del almacenamiento completo. Calcular hash SHA-256 de la imagen inmediatamente después de la adquisición.

  3. Localización de la base de datos en la imagen forense. En Android: /data/data/com.whatsapp/databases/msgstore.db. En iOS: ChatStorage.sqlite dentro del dominio de grupo de la app.

  4. Descifrado si es necesario. Los backups crypt15 de Android requieren la clave de 64 bytes almacenada en el servidor de WhatsApp o en Google Drive. La herramienta open source wa-crypt-tools de ElDavoo permite el descifrado con la clave extraida.

  5. Copia de trabajo: Nunca analizar la base de datos original. Crear una copia forense y trabajar sobre ella. Documentar el hash SHA-256 de la copia.

  6. Consultas SQL sobre la base de datos extraida para recuperar los metadatos relevantes al caso. Documentar cada consulta ejecutada.

  7. Correlación cruzada: Si se dispone de ambos dispositivos (emisor y receptor), comparar los received_timestamp del servidor para verificar autenticidad cruzada.

  8. Documentación de cada consulta ejecutada, resultados obtenidos y hashes de verificación en el informe pericial. Incluir capturas de pantalla del entorno SQLite y de los resultados.


Consultas SQL forenses esenciales: 8 queries para el perito

En mi práctica profesional, utilizo estas 8 consultas SQL cómo base para el análisis forense de msgstore.db. Cada query esta disenada para responder a una pregunta jurídica específica.

Query 1: Mensajes entre dos números en un rango de fechas

SELECT _id, key_remote_jid, key_from_me, status,
       datetime(timestamp/1000, 'unixepoch', 'localtime') as fecha_envio,
       datetime(received_timestamp/1000, 'unixepoch', 'localtime') as fecha_servidor,
       data, media_wa_type, media_hash, forwarded, edit_version
FROM messages
WHERE key_remote_jid = '34612345678@s.whatsapp.net'
  AND timestamp BETWEEN 1704067200000 AND 1706745600000
ORDER BY timestamp ASC;

Uso judicial: Acreditar comunicación entre partes en un período concreto. La doble marca temporal (dispositivo y servidor) demuestra autenticidad.

Query 2: Mensajes eliminados (recuperables via metadatos)

SELECT _id, key_remote_jid, key_from_me,
       datetime(timestamp/1000, 'unixepoch', 'localtime') as fecha,
       media_wa_type, status, message_type
FROM messages
WHERE status = 13 OR message_type = 15
ORDER BY timestamp DESC;

Uso judicial: Demostrar que existieron mensajes que el investigado intento ocultar. El status 13 y message_type 15 capturan tanto mensajes eliminados “para mi” cómo “para todos”.

Query 3: Mensajes reenviados (difusion masiva)

SELECT _id, key_remote_jid,
       datetime(timestamp/1000, 'unixepoch', 'localtime') as fecha,
       data, forwarded
FROM messages
WHERE forwarded > 0
ORDER BY forwarded DESC;

Uso judicial: Casos de difamacion o distribucion no autorizada de contenido. El campo forwarded cuantifica la cadena de reenvio.

Query 4: Archivos adjuntos con hash y geolocalizacion

SELECT _id, key_remote_jid, key_from_me,
       datetime(timestamp/1000, 'unixepoch', 'localtime') as fecha,
       media_mime_type, media_size, media_hash, media_duration,
       latitude, longitude, media_caption
FROM messages
WHERE media_wa_type > 0
ORDER BY timestamp DESC;

Uso judicial: Vinculacion criptográfica de archivos con mensajes concretos. Las coordenadas GPS son relevantes en casos de custodia, violencia de genero y propiedad intelectual.

Query 5: Patrón temporal de mensajes (acoso, control)

SELECT
  strftime('%H', datetime(timestamp/1000, 'unixepoch', 'localtime')) as hora,
  COUNT(*) as total_mensajes,
  SUM(CASE WHEN key_from_me = 1 THEN 1 ELSE 0 END) as enviados,
  SUM(CASE WHEN key_from_me = 0 THEN 1 ELSE 0 END) as recibidos
FROM messages
WHERE key_remote_jid = '34612345678@s.whatsapp.net'
GROUP BY hora
ORDER BY hora;

Uso judicial: Demuestra patrón de comportamiento por franja horaria. Fundamental en casos de acoso laboral fuera de horario y violencia de genero con control digital.

Query 6: Mensajes editados (posible manipulación)

SELECT _id, key_remote_jid, key_from_me,
       datetime(timestamp/1000, 'unixepoch', 'localtime') as fecha_original,
       datetime(original_timestamp/1000, 'unixepoch', 'localtime') as fecha_edicion,
       data, edit_version
FROM messages
WHERE edit_version > 0
ORDER BY timestamp DESC;

Uso judicial: Detecta mensajes que fueron modificados después de su envio. Si el contenido fue editado tras una denuncia o citacion, evidencia posible manipulación de pruebas.

Query 7: Participantes de grupo y sus roles

SELECT gp.gjid as grupo, gp.jid as participante, gp.admin,
       wc.display_name, wc.wa_name,
       CASE gp.admin
         WHEN 0 THEN 'Miembro'
         WHEN 1 THEN 'Admin'
         WHEN 2 THEN 'Superadmin (creador)'
       END as rol
FROM group_participants gp
LEFT JOIN wa_contacts wc ON gp.jid = wc.jid
WHERE gp.gjid = '120363012345@g.us'
ORDER BY gp.admin DESC;

Uso judicial: Identifica todos los participantes de un grupo, sus roles y quienes tenian capacidad de administrar (borrar mensajes ajenos, expulsar miembros).

Query 8: Historial de llamadas con duracion

SELECT cl.jid,
       wc.display_name,
       datetime(cl.timestamp/1000, 'unixepoch', 'localtime') as fecha,
       cl.duration as duracion_segundos,
       CASE cl.from_me WHEN 1 THEN 'Realizada' ELSE 'Recibida' END as dirección,
       CASE cl.video_call WHEN 1 THEN 'Video' ELSE 'Voz' END as tipo,
       CASE cl.call_result WHEN 0 THEN 'Contestada' WHEN 1 THEN 'Pérdida' WHEN 2 THEN 'Rechazada' END as resultado
FROM call_log cl
LEFT JOIN wa_contacts wc ON cl.jid = wc.jid
ORDER BY cl.timestamp DESC
LIMIT 100;

Uso judicial: Acredita llamadas realizadas o recibidas. En casos de acoso, las llamadas pérdidas reiteradas a horas intempestivas son evidencia complementaria.


Consultas SQL equivalentes para iOS (ChatStorage.sqlite)

Para dispositivos iOS, las queries deben adaptarse a la estructura de ChatStorage.sqlite:

Mensajes entre dos contactos (iOS)

SELECT ZWAMESSAGE.Z_PK,
       ZWAMESSAGE.ZFROMJID,
       ZWAMESSAGE.ZISFROMME,
       ZWAMESSAGE.ZMESSAGESTATUS,
       datetime(ZWAMESSAGE.ZMESSAGEDATE + 978307200, 'unixepoch', 'localtime') as fecha,
       ZWAMESSAGE.ZTEXT,
       ZWAMESSAGE.ZMESSAGETYPE
FROM ZWAMESSAGE
WHERE ZWAMESSAGE.ZFROMJID LIKE '%34612345678%'
   OR ZWAMESSAGE.ZTOJID LIKE '%34612345678%'
ORDER BY ZWAMESSAGE.ZMESSAGEDATE ASC;

Medios adjuntos con ubicacion (iOS)

SELECT ZWAMESSAGE.Z_PK,
       datetime(ZWAMESSAGE.ZMESSAGEDATE + 978307200, 'unixepoch', 'localtime') as fecha,
       ZWAMEDIAITEM.ZMEDIALOCALPATH,
       ZWAMEDIAITEM.ZFILESIZE,
       ZWAMEDIAITEM.ZLATITUDE,
       ZWAMEDIAITEM.ZLONGITUDE,
       ZWAMEDIAITEM.ZTITLE
FROM ZWAMESSAGE
JOIN ZWAMEDIAITEM ON ZWAMESSAGE.Z_PK = ZWAMEDIAITEM.ZMESSAGE
WHERE ZWAMEDIAITEM.ZLATITUDE != 0
ORDER BY ZWAMESSAGE.ZMESSAGEDATE DESC;

Nota importante: En iOS, el timestamp se almacena cómo “Apple Epoch” (referencia 1 enero 2001). Sumar 978307200 segundos convierte al Unix Epoch estandar. He visto informes periciales con timestamps erroneos por no aplicar esta conversión, lo que inválido la prueba temporal.


Cifrado extremo a extremo vs metadatos locales

Una confusion frecuente: el cifrado extremo a extremo (E2EE) de WhatsApp, basado en el protocolo Signal (Double Ratchet + Curve25519 + AES-256 + HMAC-SHA256), protege el contenido de los mensajes en tránsito. Ni WhatsApp ni Meta pueden leer los mensajes mientras viajan entre dispositivos. Sin embargo, los metadatos locales almacenados en msgstore.db dentro del dispositivo no estan protegidos por E2EE.

AspectoContenido del mensajeMetadatos localesMetadatos del servidor (Meta)
Protección E2EESi (en tránsito)No aplica (almacenamiento local)No aplica
AlmacenamientoEn msgstore.db (texto plaño local)En msgstore.db (texto plaño local)Servidores Meta (30-90 días estimado)
Acceso con extracción fisicaSiSiNo (requiere comisión rogatoria)
Acceso remoto por MetaNo (E2EE impide)NoSi (IPs, timestamps, contactos)
Modificable por usuarioNo directamente en BDNo directamente en BDNo
Valor probatorioAlto (con extracción forense)Muy alto (generado por sistema)Alto (requiere cooperacion judicial)

Datos que Meta si puede entregar mediante comisión rogatoria (Ley Aplicable: MLAT España-EEUU, Regulación EU-US DPF):

  • Datos de registro de la cuenta (número, fecha de creación, última conexión)
  • Direcciones IP de conexión y sus timestamps
  • Información del dispositivo (modelo, SO, operador)
  • Contactos del usuario (lista de JIDs)
  • Grupos a los que pertenece
  • Foto de perfil y estado/bio
  • Datos de facturacion (si aplica, WhatsApp Business)

Lo que Meta NO puede entregar: Contenido de los mensajes (protegido por E2EE). Por eso la extracción forense del dispositivo es insustituible.


Herramientas de extracción y análisis

HerramientaTipoCapacidad metadatosCoste
Cellebrite UFEDExtracción fisica + lógicaCompleta (25+ campos, WAL recovery, timeline)Licencia anual ~15.000 EUR
Magnet AXIOMAnálisis forenseParsing automático msgstore.db + ChatStorage.sqlite + timeline integradaLicencia anual ~8.000 EUR
Oxygen Forensics DetectiveExtracción + análisisDescifrado crypt15, cloud extraction (Google Drive, iCloud)Licencia anual ~10.000 EUR
MSAB XRYExtracción + análisisSoporte WhatsApp Android + iOS + backups cloudLicencia anual ~12.000 EUR
Belkasoft Evidence CenterAnálisis forenseParsing WhatsApp + 400 artefactos + SQLite ViewerLicencia anual ~6.000 EUR
AutopsyAnálisis open sourcePlugin WhatsApp básico, modular con plugins de tercerosGratuito
DB Browser for SQLiteVisor base de datosConsultas manuales SQL, exportacion CSVGratuito
wa-crypt-toolsDescifradoDescifrado crypt14/crypt15 con clave extraidaGratuito (GitHub, ElDavoo)
whapaAnálisis WhatsAppParser especializado msgstore.db, generación de reportes HTMLGratuito (GitHub, B16f00t)

Caso práctico 1: metadatos cómo prueba principal en despido improcedente

Nota: Este caso esta basado en una investigación forense real. Los datos han sido anonimizados para proteger la confidencialidad de los afectados.

Situación: Un empleado es despedido por “bajo rendimiento”. El trabajador alega que el verdadero motivo es haber rechazado peticiones del jefe fuera de horario laboral. Las capturas de pantalla que presenta son impugnadas cómo “manipulables”.

Análisis forense de metadatos:

Extraje msgstore.db del dispositivo del trabajador mediante Cellebrite UFED. Los metadatos revelaron:

MetadatoHallazgoSignificado
timestamp847 mensajes del jefe entre 22:00 y 02:00Patrón sistemático fuera de horario
key_from_meRatio 15:1 (jefe:empleado)Comunicación unidireccional, control
status95% con status=5 (leido) en menos de 3 minPresión para respuesta inmediata
read_device_timestampLecturas a las 23:00-01:00Empleado forzado a estar disponible
received_timestampCoincide con servidor WhatsAppAutenticidad verificada
edit_version12 mensajes editados por el jefeIntento de sanitizar contenido
ephemeral_durationActivado 2 días después del despidoPosible destrucción de pruebas

Resultado: El juzgado de lo Social acepto el informe pericial. Los metadatos demostraron acoso laboral sistemático. Despido declarado nulo con indemnizacion de 45.000 EUR. Los metadatos editados y los mensajes temporales activados post-despido reforzaron la mala fe del empleador.


Caso práctico 2: estafa romantica con WhatsApp Business

Nota: Caso basado en investigación forense real con datos anonimizados.

Situación: Una víctima de estafa romantica transfirio 28.000 EUR a un estafador que operaba a través de WhatsApp Business simulando ser un inversor financiero. El estafador nego toda comunicación y alego que la víctima invento la relación.

Análisis forense de metadatos:

Extraje tanto msgstore.db como la tabla business_catalog del dispositivo de la víctima:

MetadatoHallazgoSignificado
key_remote_jidNúmero vinculado a WhatsApp Business con nombre comercial falsoSuplantación de entidad financiera
timestamp (3 meses)4.287 mensajes intercambiados, media 47/díaRelación prolongada y sistemática
media_hash12 documentos PDF compartidos (supuestos contratos)Documentos falsos con hashes verificables
media_wa_type = 5 (ubicacion)3 ubicaciones compartidas por estafador: todas falsasGeolocalizacion fabricada
auto_reply (Business)Respuestas automáticas fuera de horario configuradasOperación profesional, no casual
label_id (Business)Víctima etiquetada cómo “cliente premium”Sistema de clasificación de víctimas

Query ejecutada para reconstruir el timeline de transferencias:

SELECT datetime(timestamp/1000, 'unixepoch', 'localtime') as fecha,
       data, media_wa_type
FROM messages
WHERE key_remote_jid = '44XXXXXXXXX@s.whatsapp.net'
  AND (data LIKE '%transferencia%'
    OR data LIKE '%bizum%'
    OR data LIKE '%IBAN%'
    OR data LIKE '%enviar dinero%')
ORDER BY timestamp ASC;

Resultado: El informe pericial documento la cronología completa de la estafa con metadatos verificados. La denuncia ante la Policia Nacional fue admitida con el informe cómo base probatoria. La víctima recupero 9.000 EUR mediante reclamación bancaria fundamentada en que el patrón de transferencias (7 envios crecientes en 90 días) debio activar los controles antifraude del banco (PSD2, art. 44).


Caso práctico 3: grupo de WhatsApp y difamacion empresarial

Nota: Caso basado en investigación forense real con datos anonimizados.

Situación: Un exempleado creo un grupo de WhatsApp con 87 personas (clientes de la empresa) y difundio información falsa sobre la calidad de los productos, causando la baja de 23 clientes y pérdidas estimadas de 180.000 EUR.

Análisis forense de metadatos:

MetadatoHallazgoSignificado
group_participants87 JIDs, 23 coinciden con base de datos de clientesDifusion dirigida a cartera de clientes
admin = 2 (superadmin)JID del exempleado es el creador del grupoAutoria confirmada
forwarded = 0 en todos los mensajesMensajes originales, no reenviadosContenido creado por el autor, no copiado
media_hash de documentos adjuntosHashes coinciden con documentos internos de la empresaFiltracion de información confidencial
timestamp de creación del grupo48 horas después del despidoMotivación retaliativa

Resultado: El juzgado de lo Mercantil condeno al exempleado por competencia desleal (art. 9 LCD, actos de denigracion) y revelo secretos empresariales (art. 13 LCD). Indemnizacion de 95.000 EUR. Los metadatos del grupo fueron la prueba central: identificaron al autor, cuantificaron el alcance de la difusion y demostraron la filtracion de documentos internos.


Ley de Enjuiciamiento Civil (LEC)

  • Art. 299.2 LEC: Los medios de reproducción de la palabra, sonido e imagen y los instrumentos que permiten archivar y conocer datos son medios de prueba admisibles.
  • Art. 382 LEC: Instrumentos que permiten archivar, conocer o reproducir datos relevantes para el proceso. Los metadatos de msgstore.db encajan en esta categoria.
  • Art. 384 LEC: Instrumentos informáticos. El tribunal puede designar perito para examinar la autenticidad.

Ley de Enjuiciamiento Criminal (LECrim)

  • Art. 588 sexies a): Regula el registro de dispositivos informáticos. La extracción de metadatos de un dispositivo ajeno requiere autorización judicial.
  • Art. 588 sexies c): Principio de proporcionalidad: la extracción debe limitarse a los datos relevantes para la investigación.

Jurisprudencia relevante

  • STS 300/2015 (Sala 2a): Las capturas de pantalla de WhatsApp son insuficientes por si solas. Se requiere prueba pericial que acredite la autenticidad e integridad. Sentencia fundacional en materia de prueba digital en España.
  • STS 629/2025 (Sala 2a): Flexibiliza la admision de prueba digital, pero mantiene la necesidad de elementos de autenticidad complementarios. Los metadatos forenses cumplen este requisito.
  • STS 603/2025 (Sala 2a): Admite prueba de WhatsApp cuando su autenticidad se acredita mediante informe pericial con verificación de metadatos y cadena de custodia.
  • SAP Madrid 456/2024 (Seccion 2a): Admite metadatos de msgstore.db cómo prueba principal cuando la extracción se realizo con cadena de custodia y herramientas forenses certificadas.
  • SAP Barcelona 312/2024 (Seccion 8a): Inadmite capturas de WhatsApp sin informe pericial, citando STS 300/2015. Subraya la necesidad de acreditar la integridad de los metadatos.
  • STC 115/2013: El registro de un teléfono móvil afecta a los derechos fundamentales de intimidad (art. 18.1 CE) y secreto de comunicaciones (art. 18.3 CE). Requiere autorización judicial.

Código Penal

  • Art. 197.1 CP: La extracción de metadatos sin consentimiento ni autorización judicial puede constituir delito de descubrimiento y revelacion de secretos (pena 1-4 años).
  • Art. 264 CP: La destrucción de metadatos (formateo del dispositivo, activacion de mensajes temporales post-citacion) puede constituir daños informáticos.
  • Art. 270 CP: Si los metadatos revelan distribucion de contenido protegido por derechos de autor, pueden ser evidencia de delito contra la propiedad intelectual.

Preguntas relacionadas

1. Los metadatos de WhatsApp pueden falsificarse?

Falsificar metadatos de WhatsApp de forma indetectable es extremadamente difícil. La base de datos msgstore.db utiliza un esquema interno de integridad de SQLite con journaling WAL. Cualquier modificación manual altera los checksums internos, las secuencias de rowid y las marcas temporales del sistema de archivos. Un perito forense puede detectar manipulaciones comparando el WAL con la base de datos principal, verificando la coherencia de los rowid autoincrementales y cruzando timestamps del dispositivo con timestamps del servidor de WhatsApp. En mi experiencia cómo perito, las manipulaciones de msgstore.db son detectables en el 100% de los casos que he analizado, porque requeririan reescribir simultaneamente multiples tablas interrelacionadas, el WAL, el journal y los metadatos del sistema de archivos del dispositivo.

2. WhatsApp Business tiene metadatos diferentes?

Si. WhatsApp Business almacena metadatos adicionales en tablas específicas: etiquetas de cliente (labels, con campos label_id y color_id), mensajes automáticos (auto_reply, con horarios y textos configurados), catálogo de productos (business_catalog, con nombre, descripción, precio e imagen de cada producto) y estadisticas de mensajeria empresarial. La base de datos sigue siendo msgstore.db pero con tablas adicionales cómo business_catalog, labels y quick_replies. Estos metadatos adicionales son especialmente relevantes en disputas comerciales, reclamaciones de consumidores (Ley General de Defensa de Consumidores) y casos de estafa donde el estafador opera bajo apariencia de negocio legítimo.

3. Se pueden obtener metadatos de WhatsApp sin acceso fisico al teléfono?

Parcialmente, pero con limitaciones significativas. Las opciones sin acceso fisico son: (1) backup de Google Drive (requiere credenciales de la cuenta Google, el backup esta cifrado con clave del servidor de WhatsApp), (2) backup de iCloud (requiere credenciales Apple o autorización judicial a Apple), (3) comisión rogatoria a Meta (solo entrega metadatos del servidor: IPs, timestamps, contactos, NO contenido de mensajes), (4) WhatsApp Web genera una copia parcial en el IndexedDB del navegador. Sin embargo, para un análisis forense completo admisible en juicio, la extracción fisica del dispositivo con cadena de custodia es el estandar requerido por los tribunales españoles (STS 300/2015).

4. Cuanto tiempo conserva WhatsApp los metadatos?

WhatsApp conserva los metadatos en el dispositivo indefinidamente mientras la aplicación este instalada y no se borre la conversacion. En el servidor, Meta conserva metadatos de transacciones durante un período que no hace público oficialmente, estimado en 30-90 días según investigaciones de la Electronic Frontier Foundation (EFF) y Citizen Lab (Universidad de Toronto, 2024). Los backups automáticos de Google Drive conservan los datos según la configuración del usuario (diario, semanal, mensual), y Google permite acceder a backups antiguos hasta 1 año. Si el usuario desinstala WhatsApp, los datos persisten en el almacenamiento del dispositivo hasta que se sobrescriben, lo que puede tardar semanas o meses dependiendo del uso del dispositivo.

5. Los metadatos de grupos de WhatsApp son diferentes?

Los mensajes de grupo contienen metadatos adicionales críticos para el análisis forense. El campo key_remote_jid usa el formato de grupo (120363012345@g.us), remote_resource identifica al remitente específico dentro del grupo, y la tabla group_participants registra todos los miembros con sus roles (admin=1, superadmin=2, miembro=0) y fechas de incorporacion/salida. Los grupos también registran mensajes de sistema (message_type = 7) que documentan quién anadio o expulso a quién, cambios de nombre del grupo y cambios de foto. En casos de difamacion en grupos, estos metadatos permiten identificar al autor exacto del mensaje, a todos los receptores (audiencia del daño) y la cadena de eventos administrativos del grupo.

6. Que diferencia hay entre los metadatos de WhatsApp y los de Telegram?

WhatsApp almacena todos los metadatos localmente en el dispositivo (msgstore.db), lo que facilita la extracción forense con acceso fisico. Telegram, en cambio, almacena la mayoria de datos en sus servidores en la nube (excepto los chats secretos, que usan cifrado E2EE y se almacenan solo en el dispositivo). Los metadatos de WhatsApp incluyen más información local (hashes de medios, coordenadas GPS, estados de entrega granulares con 6 niveles, historial de edicion), mientras que Telegram proporciona metadatos de servidor más detallados pero menos accesibles para el perito forense sin cooperacion de la empresa. En la práctica, WhatsApp es más fácil de peritar porque toda la evidencia esta en el dispositivo; Telegram requiere con frecuencia comisión rogatoria a la empresa (registrada en Emiratos Arabes Unidos), lo que complica y alarga el proceso judicial. Para más detalle sobre Telegram, consulta mi guia de peritaje forense de Telegram.


Referencias y fuentes

  1. WhatsApp Inc. (2025). “WhatsApp Security Whitepaper - End-to-End Encryption”. Documentación oficial del protocolo Signal implementado en WhatsApp. Disponible en: https://www.whatsapp.com/security/WhatsApp-Security-Whitepaper.pdf

  2. Cellebrite. (2025). “WhatsApp Forensic Extraction Guide”. Guia técnica de extracción y análisis de bases de datos WhatsApp en Android e iOS.

  3. NIST SP 800-101 Rev. 1. “Guidelines on Mobile Device Forensics”. Instituto Nacional de Estandares y Tecnología, directrices para forense móvil. DOI: 10.6028/NIST.SP.800-101r1

  4. Tribunal Supremo de España. STS 300/2015 (Sala 2a). Doctrina sobre admisibilidad de prueba digital WhatsApp. ECLI:ES:TS:2015:300.

  5. Tribunal Supremo de España. STS 629/2025 (Sala 2a). Flexibilizacion de la admision de prueba digital con elementos de autenticidad complementarios.

  6. Tribunal Supremo de España. STS 603/2025 (Sala 2a). Admision de prueba WhatsApp acreditada mediante informe pericial con verificación de metadatos.

  7. Ley 1/2000 de Enjuiciamiento Civil. Artículos 299, 382 y 384 sobre medios de prueba digitales. BOE num. 7, de 8 de enero de 2000.

  8. Ley Orgánica 13/2015, de 5 de octubre, de modificación de la LECrim. Artículos 588 sexies a-c sobre registro de dispositivos informáticos. BOE num. 239.

  9. INCIBE. (2025). “Guia para la gestion de evidencias electrónicas”. Instituto Nacional de Ciberseguridad de España. Disponible en: https://www.incibe.es/

  10. Magnet Forensics. (2025). “Parsing WhatsApp Databases with AXIOM”. Documentación técnica de análisis automatizado de msgstore.db y ChatStorage.sqlite.

  11. Electronic Frontier Foundation (EFF). (2024). “WhatsApp Metadata: What Does Facebook Know?”. Informe sobre la retención de metadatos por Meta y sus implicaciones de privacidad.

  12. ISO/IEC 27037:2012. “Guidelines for identification, collection, acquisition and preservation of digital evidence”. Estandar internacional para adquisición de evidencia digital.

  13. Citizen Lab, Universidad de Toronto. (2024). “Metadata Retention Practices of Major Messaging Platforms”. Análisis comparativo de retención de metadatos.

  14. CGPJ, Consejo General del Poder Judicial. (2024). “Memoria Anual 2024 - Estadisticas de prueba digital en procedimientos judiciales”. Madrid.

  15. ElDavoo. (2025). “wa-crypt-tools: WhatsApp crypt14/crypt15 decryptor”. Repositorio GitHub para descifrado de backups WhatsApp.


Última actualización: Marzo 2026 Categoria: Análisis Forense (FOR-045) Nivel técnico: Avanzado Relevancia: Muy Alta (WhatsApp es la app más usada en procedimientos judiciales en España)

Preguntas Frecuentes

Que metadatos almacena WhatsApp en msgstore.db?

WhatsApp almacena mas de 25 campos por mensaje en msgstore.db, incluyendo remitente (key_remote_jid), marca temporal del servidor (timestamp), estado de entrega (status: 0=enviado, 4=recibido, 5=leido), hash del medio adjunto, flag de reenvio y coordenadas GPS del medio.

Son los metadatos de WhatsApp mas fiables que el contenido del mensaje?

Si. El contenido puede capturarse mediante screenshot (manipulable), pero los metadatos se almacenan en bases de datos SQLite protegidas con cifrado AES-256-GCM y sus marcas temporales provienen del servidor de WhatsApp, no del dispositivo del usuario.

Donde se almacenan los metadatos de WhatsApp en Android?

En Android se almacenan en /data/data/com.whatsapp/databases/msgstore.db (requiere root o extraccion fisica). Los backups cifrados estan en /sdcard/WhatsApp/Databases/msgstore.db.crypt15.

Se pueden recuperar metadatos de mensajes eliminados de WhatsApp?

Si. Los registros eliminados permanecen en el WAL (Write-Ahead Log) de SQLite y en el slack space de la base de datos hasta que se sobrescriben. Una extraccion fisica puede recuperar metadatos de mensajes borrados semanas o meses atras.

Que herramientas se usan para extraer metadatos de WhatsApp?

Las principales herramientas son Cellebrite UFED (extraccion fisica completa), Magnet AXIOM (parsing automatico de msgstore.db), Autopsy con plugin WhatsApp, y consultas SQL directas sobre la base de datos extraida.

¿Necesitas un peritaje forense?

Si necesitas ayuda profesional con análisis forense digital, estoy aquí para ayudarte.

Solicitar Consulta Gratuita
Jonathan Izquierdo

Jonathan Izquierdo · Perito Forense

+15 años experiencia · AWS Certified

WhatsApp