· Jonathan Izquierdo · Análisis forense  ·

11 min de lectura

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.

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ónDescripciónDetección Forense
Crear chats falsosGenerar conversaciones completas desde cero❌ No existe en msgstore.db
Modificar nombresCambiar nombre del contacto y número✅ Inconsistencia con base de datos
Personalizar fechasEstablecer cualquier timestamp✅ Timestamps imposibles
Añadir fotos de perfilUsar cualquier imagen⚠️ Difícil detectar visualmente
Simular estados”Escribiendo…”, “En línea”, marcas de entrega✅ No hay confirmación de servidor
Generar capturasExportar 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 contenido

Si 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íaSignificadoEjemplo
Timestamps no secuencialesMensajes desordenados temporalmenteRespuesta enviada antes de la pregunta
Microsegundos idénticosVarios mensajes en el mismo milisegundoImposible para mensajes escritos manualmente
Fechas imposiblesAnterior a 2009 o posterior a hoyMensaje de 2008 en WhatsApp
Gaps temporales ilógicosConversación sin actividad durante añosChat “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:

IconoEstadoValor BDVerificación
⏱️Enviando0Transitorio, no persiste
Enviado (1 tick)1Confirmado por servidor
✓✓Entregado (2 ticks)2Confirmado recepción
✓✓Leído (2 ticks azules)3Confirmado 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 WAL

Si 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

  1. Solicitud de Dispositivo Original

    Exigir el smartphone donde supuestamente se generó la conversación. Sin dispositivo = alta sospecha.

  2. Extracción Forense Certificada

    Usar Cellebrite UFED, Oxygen Forensic o MOBILedit para extraer msgstore.db con cadena de custodia.

  3. Cálculo de Hash SHA-256

    sha256sum msgstore.db > msgstore.db.sha256

    Documentar integridad de la base de datos extraída.

  4. Análisis SQL de Mensajes

    Buscar la conversación específica en la BD. Si no existe = falsificación confirmada.

  5. Verificación de Timestamps

    Ejecutar scripts de verificación de coherencia temporal.

  6. Análisis de Metadatos de Imágenes

    Si solo hay capturas, extraer y analizar metadatos EXIF.

  7. Comparación con Backups

    Si existen backups previos (Google Drive/iCloud), verificar consistencia.

  8. 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

HerramientaFunciónCoste
Cellebrite UFEDExtracción completa + análisis WhatsApp~15.000€/año
Oxygen ForensicAnálisis msgstore.db, recuperación borrados~5.000€/año
DB Browser SQLiteInspección manual de bases de datosGratis (Open Source)
ExifToolAnálisis de metadatos de imágenesGratis (Open Source)
WhatsApp ViewerVisualización de msgstore.dbGratis
Python + sqlite3Scripts personalizados de análisisGratis

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:

  1. Solicité el smartphone de la esposa
  2. Extracción forense de msgstore.db
  3. Resultado: No existía NINGÚN mensaje con ese número de teléfono
  4. 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

Sobre el autor

Jonathan Izquierdo es perito informático forense especializado en Análisis forense con conocimientos en blockchain, criptomonedas, AWS Cloud, desarrollo de software y seguridad. Experiencia tecnológica de más de 20 años al servicio de la justicia digital, liderando equipos de desarrollo de software en ámbitos internacionales.

Ver más sobre mí

Volver al Blog

Posts Relacionados

Ver Todos los Posts »
Jonathan Izquierdo

Jonathan Izquierdo · Perito Forense

+15 años experiencia · AWS Certified

WhatsApp