0 votos

Datos corruptos - No se puede restaurar el historial de chat de Whatsapp

Cuando intento recuperar mis mensajes de Whatsapp en mi nuevo teléfono después de haber copiado la carpeta de Whatsapp de mi antiguo teléfono a la tarjeta SD, de repente se bloquea después de 10 segundos: "Whatsapp se ha detenido"

Revisé el Registro del sistema para encontrar algunas pistas sobre este bloqueo. Parece que tiene algo que ver con SQLite y el archivo msgstore.db (o msgstore.db.crypt), porque hay un error de archivo msgstore.db corrupto. Aquí hay algunas líneas del Registro del sistema:

 "E/DefaultDatabaseErrorHandler (3784): Informe sobre corrupción por sqlite
    en la base de datos: /data/data/com.whatsapp/databasesmsgstore.db"
 "E/AndroidRuntime (3784): java.lang.AssertionError: android.database.sqlite.SQLiteDatabaseCorruptExcep tion: La imagen del disco de la base de datos está dañada (código 11), SQLiteConnection.java,-2"
 "E/SQLiteLog (3784): (14) no se puede abrir el archivo en la línea 30191 de [00bb9c9ce4]"
 "E/SQLiteDatabase (3784): Error al abrir la base de datos '/data/data/com.whatsapp/databases/msgstore.db' "
 "E/SQLiteDatabaseException: error desconocido (código 14): No se pudo abrir la base de datos"
 "I/sqlite_db_corrupt (3784): /data/data.com.whatsapp/databases/msgstore.db"

¿Alguien puede ayudarme a desentrañar este misterio? Realmente quiero copiar mis viejos mensajes a mi nuevo teléfono y seguir usando la aplicación en él.

¿Cómo puedo arreglar el archivo msgstore corrupto? ¿O ver qué parte del archivo está corrupta (la causa exacta)

Algunas capturas de pantalla del archivo de Registro del sistema:

Captura de pantalla 1 Captura de pantalla 2 Captura de pantalla 3 Captura de pantalla 4

4voto

moo Puntos 46

Por lo general, si colocas tu archivo msgstore.db o msgstore.db.crypt7 en el siguiente directorio en tu tarjeta SD y reinstalas WhatsApp, la aplicación lo reconocerá y preguntará si deseas restaurar tus antiguos mensajes durante la instalación.

/sdcard/WhatsApp/Databases/

Sin embargo, si tu base de datos (msgstore.db o msgstore.db.crypt7) está corrupta, es posible que aún puedas regenerar las bases de datos usando sqlite3.

La base de datos de WhatsApp es una base de datos sqlite3 y se almacena sin cifrar en esta ruta en el dispositivo Android:

/data/data/com.whatsapp/databases/msgstore.db

Las copias de seguridad de la base de datos también se almacenan cifradas en la tarjeta SD, típicamente en la siguiente ubicación:

/sdcard/WhatsApp/Databases/msgstore.db.crypt7

La clave única para las copias de seguridad cifradas se almacena aquí:

/data/data/com.whatsapp/files/key

El acceso al directorio /data/data requiere acceso root. Alternativamente, se puede utilizar ADB (Android Debug Bridge) para extraer los archivos mencionados después de reiniciar en modo de recuperación en el dispositivo.

Si estás trabajando con archivos msgstore.db.crypt7, primero debes descifrarlos de la siguiente manera:

(los comandos a continuación se ejecutan desde un entorno de Linux)

  • Extraer archivo de clave: /data/data/com.whatsapp/files/key

  • Extraer archivo crypt7: /sdcard/WhatsApp/Databases/msgstore.db.crypt7

  • Extraer claves de descifrado del archivo "key" extraído en el paso 1:

    • Clave AES de 256 bits:

      hexdump -e '2/1 "%02x"' key | cut -b 253-316 > aes.txt

    • VI (vector de inicialización):

      hexdump -e '2/1 "%02x"' key | cut -b 221-252 > iv.txt

  • Eliminar encabezado en el archivo crypt7:

    dd if=msgstore.db.crypt7 of=msgstore.db.crypt7.nohdr ibs=67 skip=1

    Nota: El tamaño del archivo con el encabezado eliminado en bytes debe ser divisible por 16

  • Descifrar archivo crypt7:

    openssl enc -aes-256-cbc -d -nosalt -nopad -bufsize 16384 -in msgstore.db.crypt7.nohdr -K $(cat aes.txt) -iv $(cat iv.txt) > msgstore.db

Una vez que tengas tu archivo msgstore.db, ya sea descifrando primero el msgstore.db.crypt7 o extrayéndolo del directorio /data/data/com.whatsapp/databases/, ahora puedes intentar regenerarlo usando los siguientes comandos:

echo .dump | sqlite3.exe msgstore.db > Temp.sql

echo .quit | sqlite3.exe -init Temp.sql msgstore_new.db

Ahora intenta restaurar tu base de datos nuevamente

  • Si seguiste el procedimiento anterior correctamente, ahora deberías tener un archivo msgstore_new.db.
  • Renombra este archivo a msgstore.db y colócalo en el directorio /sdcard/WhatsApp/Databases/ y reinstala WhatsApp. Elige restaurar tu base de datos/mensajes antiguos cuando se te pregunte durante la instalación.

Referencia:

  1. http://forum.xda-developers.com/showpost.php?p=24566937&postcount=3
  2. http://forum.xda-developers.com/showthread.php?t=1583021

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X