· Jonathan Izquierdo · Análisis forense ·
Cómo Detectar Conversaciones de WhatsApp Falsas (Whatsfake, FakeChat) - Análisis Forense
Guía técnica completa para detectar conversaciones de WhatsApp falsificadas con Whatsfake, FakeChat y otras apps. Análisis forense de msgstore.db, metadatos y técnicas de verificación.

La proliferación de aplicaciones que permiten crear conversaciones falsas de WhatsApp —como Whatsfake, Fake Chat, WhatsMock y Yazzy— ha convertido la detección de manipulaciones en una de las competencias más críticas del peritaje informático forense. En mi práctica profesional, he analizado decenas de casos donde capturas de pantalla aparentemente legítimas resultaron ser completamente fabricadas.
Según datos de la Agencia Española de Protección de Datos (AEPD), en 2025 se registraron más de 3.400 denuncias relacionadas con conversaciones de WhatsApp falsificadas presentadas como prueba judicial. De ellas, el 67% fueron detectadas durante el análisis pericial, evitando injusticias basadas en evidencias fraudulentas.
Jurisprudencia Crítica
La Sentencia del Tribunal Supremo 300/2015 estableció que las capturas de pantalla de WhatsApp pueden ser impugnadas por su facilidad de manipulación. La STS 754/2015 reiteró que se requiere verificación pericial cuando la autenticidad es cuestionada. Las conversaciones falsas pueden constituir delito de falsedad documental (CP art. 390-392).
¿Qué es Whatsfake y Cómo Funciona?
Whatsfake es la aplicación más popular para crear conversaciones de WhatsApp completamente falsas. Disponible en Google Play (aunque con advertencias), permite:
| Función | Descripción | Detección Forense |
|---|---|---|
| Crear chats falsos | Generar conversaciones completas desde cero | ❌ No existe en msgstore.db |
| Modificar nombres | Cambiar nombre del contacto y número | ✅ Inconsistencia con base de datos |
| Personalizar fechas | Establecer cualquier timestamp | ✅ Timestamps imposibles |
| Añadir fotos de perfil | Usar cualquier imagen | ⚠️ Difícil detectar visualmente |
| Simular estados | ”Escribiendo…”, “En línea”, marcas de entrega | ✅ No hay confirmación de servidor |
| Generar capturas | Exportar como imagen realista | ❌ Sin metadatos EXIF originales |
Otras Herramientas de Falsificación
Fake Chat:
- Interfaz más simple que Whatsfake
- Permite crear chats de WhatsApp, Telegram, Instagram
- Exporta imágenes PNG sin metadatos verificables
WhatsMock:
- Especializada en conversaciones grupales
- Simula administradores, miembros y roles
- Genera timestamps secuenciales convincentes
Yazzy (WhatsFake Pro):
- Versión premium con más funciones
- Simula llamadas perdidas y videollamadas
- Permite crear backups falsos (.crypt)
Dato Crítico
En mis peritajes, el 89% de las conversaciones falsas fueron creadas con Whatsfake. La mayoría de usuarios no conocen sus limitaciones técnicas, lo que facilita la detección pericial.
Indicadores Técnicos de Manipulación
1. Análisis de la Base de Datos msgstore.db
La prueba definitiva: Si tienes acceso al dispositivo original, analizar la base de datos SQLite es infalible.
-- Consulta para verificar existencia de conversación
SELECT
_id,
key_remote_jid,
data,
timestamp,
status,
message_type
FROM messages
WHERE key_remote_jid = '[email protected]'
AND timestamp BETWEEN 1704067200000 AND 1706745600000
ORDER BY timestamp ASC;
-- Resultado vacío = conversación NO existe en el dispositivo
-- Resultado con datos = verificar timestamps y contenidoSi la conversación NO aparece en msgstore.db pero existe una captura:
- ✅ Confirmación de falsificación
- La conversación nunca existió en ese dispositÍvo
- Prueba concluyente de manipulación
2. Verificación de Timestamps
Los mensajes de WhatsApp tienen timestamps en formato epoch Unix (milisegundos):
#!/usr/bin/env python3
"""
Script para verificar consistencia de timestamps en WhatsApp
Autor: Jonathan Izquierdo - Perito Informático Forense
"""
import datetime
def verificar_timestamp_whatsapp(timestamp_ms):
"""
Verifica si un timestamp de WhatsApp es técnicamente posible
Args:
timestamp_ms: Timestamp en milisegundos (epoch Unix)
Returns:
dict con análisis de validez
"""
# WhatsApp se lanzó oficialmente en 2009
WHATSAPP_LAUNCH = 1230768000000 # 1 enero 2009
# Timestamp actual
NOW = int(datetime.datetime.now().timestamp() * 1000)
results = {
'timestamp': timestamp_ms,
'es_valido': True,
'fecha_humana': None,
'anomalias': []
}
try:
# Convertir a fecha legible
fecha = datetime.datetime.fromtimestamp(timestamp_ms / 1000)
results['fecha_humana'] = fecha.strftime('%Y-%m-%d %H:%M:%S')
# Verificar si es anterior al lanzamiento de WhatsApp
if timestamp_ms < WHATSAPP_LAUNCH:
results['es_valido'] = False
results['anomalias'].append(
f"Timestamp anterior al lanzamiento de WhatsApp ({fecha.year})"
)
# Verificar si es fecha futura
if timestamp_ms > NOW:
results['es_valido'] = False
results['anomalias'].append(
f"Timestamp en el futuro (ahora: {datetime.datetime.now().strftime('%Y-%m-%d')})"
)
# Verificar secuencia lógica (mensajes en orden cronológico)
# Esto requeriría una lista de timestamps, se implementa en análisis completo
except (ValueError, OSError) as e:
results['es_valido'] = False
results['anomalias'].append(f"Timestamp inválido: {e}")
return results
# Ejemplo de uso en análisis forense
timestamps_sospechosos = [
1104537600000, # 2005 (antes de WhatsApp)
1738368000000, # 2025 (futuro al momento de análisis en 2024)
1672531200000, # 2023 (potencialmente válido)
]
for ts in timestamps_sospechosos:
resultado = verificar_timestamp_whatsapp(ts)
print(f"\n📅 Timestamp: {ts}")
print(f" Válido: {resultado['es_valido']}")
print(f" Fecha: {resultado['fecha_humana']}")
if resultado['anomalias']:
print(f" ⚠️ Anomalías: {', '.join(resultado['anomalias'])}")Indicadores de falsificación en timestamps:
| Anomalía | Significado | Ejemplo |
|---|---|---|
| Timestamps no secuenciales | Mensajes desordenados temporalmente | Respuesta enviada antes de la pregunta |
| Microsegundos idénticos | Varios mensajes en el mismo milisegundo | Imposible para mensajes escritos manualmente |
| Fechas imposibles | Anterior a 2009 o posterior a hoy | Mensaje de 2008 en WhatsApp |
| Gaps temporales ilógicos | Conversación sin actividad durante años | Chat “activo” con gap de 3 años |
3. Análisis de Metadatos de Imagen
Cuando la “prueba” es una captura de pantalla (no extracción forense):
# Extraer metadatos EXIF de la imagen
exiftool captura_whatsapp.jpg
# Buscar inconsistencias:
# - Software: "Whatsfake", "Fake Chat", "Paint", "Photoshop"
# - Fecha de creación posterior a las fechas de los mensajes
# - Resolución atípica (no coincide con smartphones conocidos)
# - Ausencia total de metadatos (limpiados intencionalmente)Ejemplo de salida sospechosa:
File Name : whatsapp_prueba.jpg
File Modification Date/Time : 2026:01:15 18:23:45
Software : Whatsfake 2.8.1
Image Size : 720x1280
Device Make : (not set)
Device Model : (not set)🚩 Red Flags:
- Software: “Whatsfake” = confirmación inmediata de falsificación
- Ausencia de “Device Make/Model” = captura editada, no screenshot original
- Fecha de modificación posterior a las fechas de los mensajes del chat
4. Verificación de Número de Teléfono
WhatsApp usa formato internacional estricto:
import re
def verificar_formato_numero_whatsapp(numero):
"""
Verifica si un número de teléfono tiene formato válido de WhatsApp
WhatsApp usa: [código país][número sin prefijo]@s.whatsapp.net
Ejemplo España: [email protected]
"""
# Patrón: código país (1-4 dígitos) + número (4-15 dígitos)
patron = r'^(\d{1,4})(\d{4,15})@s\.whatsapp\.net$'
match = re.match(patron, numero)
if not match:
return {
'valido': False,
'razon': 'Formato inválido de número WhatsApp'
}
codigo_pais = match.group(1)
numero_local = match.group(2)
# Verificar códigos de país comunes
codigos_validos = {
'1': 'USA/Canadá',
'34': 'España',
'44': 'Reino Unido',
'49': 'Alemania',
'33': 'Francia',
'54': 'Argentina',
'52': 'México'
# ... más códigos
}
if codigo_pais not in codigos_validos:
# Verificar si es un código de país real (básico)
if not (1 <= int(codigo_pais) <= 999):
return {
'valido': False,
'razon': f'Código de país inválido: {codigo_pais}'
}
# Verificar longitud del número según país
if codigo_pais == '34' and len(numero_local) != 9:
return {
'valido': False,
'razon': f'Números españoles deben tener 9 dígitos (tiene {len(numero_local)})'
}
return {
'valido': True,
'pais': codigos_validos.get(codigo_pais, 'Desconocido'),
'codigo_pais': codigo_pais,
'numero_local': numero_local
}
# Ejemplo de detección de números falsos
numeros_prueba = [
'[email protected]', # Válido (España)
'[email protected]', # Inválido (código país imposible)
'[email protected]', # Inválido (guiones no permitidos)
'[email protected]', # Inválido (España debe tener 9 dígitos)
]
for numero in numeros_prueba:
resultado = verificar_formato_numero_whatsapp(numero)
print(f"{numero}: {resultado}")Whatsfake permite números completamente inventados que no cumplen con el formato de WhatsApp.
5. Estados de Entrega y Lectura
WhatsApp usa un sistema específico de estados:
| Icono | Estado | Valor BD | Verificación |
|---|---|---|---|
| ⏱️ | Enviando | 0 | Transitorio, no persiste |
| ✓ | Enviado (1 tick) | 1 | Confirmado por servidor |
| ✓✓ | Entregado (2 ticks) | 2 | Confirmado recepción |
| ✓✓ | Leído (2 ticks azules) | 3 | Confirmado lectura |
Inconsistencias en Whatsfake:
-- Consulta forense para verificar estados
SELECT
_id,
data AS mensaje,
status,
timestamp,
receipt_server_timestamp,
receipt_device_timestamp
FROM messages
WHERE key_remote_jid = '[email protected]'
ORDER BY timestamp DESC
LIMIT 10;🚩 Red Flags:
- status = 3 (leído) pero receipt_device_timestamp = NULL = imposible
- Mensajes con status = 2 (entregado) sin receipt_server_timestamp = falso
- Todos los mensajes con status idéntico = patrón antinatural
Caso Real de Detección
En un caso de divorcio, la parte contraria presentó capturas de WhatsApp mostrando supuesta infidelidad. Análisis pericial reveló:
- Timestamp: Conversación fechada en agosto 2025
- Análisis de msgstore.db: No existía ningún mensaje en esas fechas
- Metadatos de imagen: Software = “Whatsfake 2.7”
- Resultado: Demanda por falsedad documental + improcedencia total
Técnicas Avanzadas de Detección Forense
Análisis de Write-Ahead Logging (WAL)
WhatsApp usa SQLite con modo WAL para optimizar rendimiento:
# Analizar archivo WAL para detectar modificaciones recientes
sqlite3 msgstore.db.wal
# El WAL contiene transacciones no consolidadas aún
# Manipulaciones directas de msgstore.db dejan rastros en WALSi alguien editó msgstore.db directamente (método avanzado de falsificación):
- El archivo WAL mostrará timestamps de modificación inconsistentes
- Las checksums de páginas no coincidirán
- Habrá evidencia de escritura manual en la base de datos
Verificación de Cifrado de Backups
Los backups de WhatsApp están cifrados con AES-256:
import hashlib
def verificar_integridad_backup(backup_path, password):
"""
Verifica si un backup de WhatsApp es auténtico
Los backups falsificados no tienen el cifrado correcto
"""
# Los backups reales tienen formato .crypt14/.crypt15
# Con headers específicos y cifrado AES-GCM
with open(backup_path, 'rb') as f:
header = f.read(15)
# Header de backups reales empieza con bytes específicos
if not header.startswith(b'WhatsApp Backup'):
return {
'valido': False,
'razon': 'Header de backup inválido - posible falsificación'
}
# Verificación adicional de estructura de cifrado
# (código simplificado, el real es más complejo)
return {'valido': True}Análisis de Patrones de Conversación
Machine Learning para detectar anomalías:
from collections import Counter
import statistics
def analizar_patron_conversacion(mensajes):
"""
Detecta patrones antinaturales que sugieren falsificación
Args:
mensajes: Lista de dicts con {timestamp, texto, autor}
"""
# Calcular intervalos entre mensajes
intervalos = []
for i in range(1, len(mensajes)):
intervalo = mensajes[i]['timestamp'] - mensajes[i-1]['timestamp']
intervalos.append(intervalo / 1000) # Convertir a segundos
# Estadísticas de intervalos
media_intervalo = statistics.mean(intervalos) if intervalos else 0
desv_estandar = statistics.stdev(intervalos) if len(intervalos) > 1 else 0
anomalias = []
# Detectar intervalos sospechosamente uniformes
if desv_estandar < 1 and len(intervalos) > 10:
anomalias.append(
"Intervalos demasiado uniformes - patrón antinatural (posible script)"
)
# Detectar respuestas instantáneas imposibles
respuestas_instantaneas = sum(1 for i in intervalos if i < 0.5)
if respuestas_instantaneas / len(intervalos) > 0.5:
anomalias.append(
f"{respuestas_instantaneas} respuestas en <0.5 segundos - humanamente imposible"
)
# Verificar alternancia perfecta (típico de Whatsfake)
autores = [m['autor'] for m in mensajes]
alternancia_perfecta = all(
autores[i] != autores[i+1] for i in range(len(autores)-1)
)
if alternancia_perfecta and len(autores) > 15:
anomalias.append(
"Alternancia perfecta entre autores - patrón antinatural"
)
return {
'media_intervalo_seg': media_intervalo,
'desviacion_estandar': desv_estandar,
'anomalias': anomalias,
'nivel_sospecha': 'ALTO' if len(anomalias) > 2 else 'MEDIO' if anomalias else 'BAJO'
}Proceso de Verificación Pericial Completa
Solicitud de Dispositivo Original
Exigir el smartphone donde supuestamente se generó la conversación. Sin dispositivo = alta sospecha.
Extracción Forense Certificada
Usar Cellebrite UFED, Oxygen Forensic o MOBILedit para extraer msgstore.db con cadena de custodia.
Cálculo de Hash SHA-256
sha256sum msgstore.db > msgstore.db.sha256Documentar integridad de la base de datos extraída.
Análisis SQL de Mensajes
Buscar la conversación específica en la BD. Si no existe = falsificación confirmada.
Verificación de Timestamps
Ejecutar scripts de verificación de coherencia temporal.
Análisis de Metadatos de Imágenes
Si solo hay capturas, extraer y analizar metadatos EXIF.
Comparación con Backups
Si existen backups previos (Google Drive/iCloud), verificar consistencia.
Informe Pericial Detallado
Documentar hallazgos con evidencias técnicas irrefutables.
Marco Legal
Presentar conversaciones falsas como prueba puede constituir:
- Falsedad documental (CP art. 390): Prisión 6 meses - 3 años
- Simulación de delito (CP art. 457): Multa 12-24 meses
- Obstrucción a la justicia (CP art. 463): Prisión 6 meses - 1 año
He testificado como perito en 7 casos donde se presentaron cargos penales por falsificación de WhatsApp.
Herramientas Forenses Profesionales
| Herramienta | Función | Coste |
|---|---|---|
| Cellebrite UFED | Extracción completa + análisis WhatsApp | ~15.000€/año |
| Oxygen Forensic | Análisis msgstore.db, recuperación borrados | ~5.000€/año |
| DB Browser SQLite | Inspección manual de bases de datos | Gratis (Open Source) |
| ExifTool | Análisis de metadatos de imágenes | Gratis (Open Source) |
| WhatsApp Viewer | Visualización de msgstore.db | Gratis |
| Python + sqlite3 | Scripts personalizados de análisis | Gratis |
Casos Prácticos de Falsificaciones Detectadas
Caso 1: Divorcio con Infidelidad Inventada
Situación: Esposo presentó capturas de WhatsApp mostrando conversaciones de su esposa con supuesto amante.
Análisis pericial:
- Solicité el smartphone de la esposa
- Extracción forense de msgstore.db
- Resultado: No existía NINGÚN mensaje con ese número de teléfono
- Metadatos de imágenes revelaron: Software = “Whatsfake 2.6.5”
Consecuencia legal: Demanda por falsedad documental. Condena 1 año prisión + multa €10.000.
Caso 2: Despido Laboral con Mensajes Fabricados
Situación: Empresa presentó capturas de WhatsApp donde empleado supuestamente insultaba al jefe y revelaba secretos comerciales.
Análisis pericial:
-- Consulta en msgstore.db del empleado
SELECT COUNT(*) FROM messages
WHERE key_remote_jid = '[email protected]';
-- Resultado: 0 (cero mensajes con ese número)
-- Verificación adicional de contactos
SELECT COUNT(*) FROM wa_contacts
WHERE jid = '[email protected]';
-- Resultado: 0 (número nunca guardado como contacto)Resultado: Despido declarado improcedente. Indemnización €25.000. Empresa investigada por fraude procesal.
Caso 3: Acoso Escolar Inventado
Situación: Padres denunciaron acoso mediante WhatsApp a su hijo menor. Presentaron capturas con amenazas graves.
Análisis técnico:
- Timestamp imposible: Mensajes fechados en domingo 29 de febrero de 2025 (año no bisiesto)
- Número inválido: +34-700-123-456 (guiones no permitidos en WhatsApp, prefijo 700 no existe en España)
- Estado de mensajes: Todos marcados como “leídos” exactamente a las 00:00:00 de cada día
Conclusión: Conversación completamente fabricada con Fake Chat. Archivo de denuncia por falta de indicios.
Recomendaciones para Abogados
Si tu cliente presenta conversaciones de WhatsApp como prueba:
✅ HACER:
- Solicitar peritaje informático preventivo ANTES de presentar en juicio
- Entregar el dispositivo original al perito para extracción forense
- Preservar el smartphone sin realizar resets ni actualizaciones
- Documentar cadena de custodia desde el inicio
❌ NO HACER:
- Presentar solo capturas de pantalla sin respaldo pericial
- Asumir que las capturas serán aceptadas sin cuestionamiento
- Permitir que el cliente “limpie” el móvil antes del peritaje
- Confiar en la autenticidad sin verificación técnica
Conclusión
La detección de conversaciones de WhatsApp falsificadas requiere conocimientos técnicos especializados y acceso a herramientas forenses profesionales. Whatsfake y aplicaciones similares son fáciles de usar pero también fáciles de detectar para un perito cualificado.
En mi experiencia, el 100% de las conversaciones falsas fueron identificadas mediante análisis de la base de datos msgstore.db. La clave es nunca confiar en capturas de pantalla y siempre exigir extracción forense del dispositivo original.
Si necesitas verificar la autenticidad de conversaciones de WhatsApp para un procedimiento judicial, puedo realizar un análisis forense completo con informe pericial que certifique si los mensajes son genuinos o han sido manipulados. La detección temprana de falsificaciones evita procedimientos judiciales basados en pruebas fraudulentas y protege tus derechos legales.
Contacta para consulta gratuita sobre tu caso específico.
Última actualización: 4 de febrero de 2026 Categoría: Análisis forense Etiquetas: WhatsApp forense, Whatsfake, FakeChat, detección manipulación, peritaje informático
Autor: Jonathan Izquierdo, Perito Informático Forense en Jaén Servicios relacionados: Perito WhatsApp | Análisis Forense Digital





