Datos dañados: no se puede restaurar el historial de chat de Whatsapp

Cuando trato de recuperar mis mensajes de Whatsapp en mi nuevo teléfono después de haber copiado la carpeta de Whatsapp de mi teléfono anterior a la tarjeta SD, de repente falla después de 10 segundos: " Whatsapp ha dejado de funcionar "

Busqué en 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 el archivo msgstore.db es un error corrupto . Aquí hay algunas líneas del registro del sistema:

 "E/DefaultDatabaseErrorHandler (3784): Corruption reported by sqlite
    on database: /data/data/com.whatsapp/databasesmsgstore.db"
 "E/AndroidRuntime (3784): java.lang.AssertionError: android.database.sqlite.SQLiteDatabaseCorruptExcep tion: Database disk image is malformed (code 11), SQLiteConnection.java,-2"
 "E/SQLiteLog (3784): (14) cannot open file at line 30191 of [00bb9c9ce4]"
 "E/SQLiteDatabase (3784): Failed to open database '/data/data/com.whatsapp/databases/msgstore.db' "
 "E/SQLiteDatabaseException: unknown error (code 14): Could not open database"
 "I/sqlite_db_corrupt (3784): /data/data.com.whatsapp/databases/msgstore.db"

¿Alguien puede ayudarme a desentrañar este misterio? Tengo muchas ganas de copiar mis mensajes antiguos a mi nuevo teléfono y seguir usando la aplicación en mi nuevo teléfono.

¿Cómo puedo reparar el archivo dañado de msgstore? O ver qué parte del archivo está dañada (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

Respuestas (1)

Por lo general, si coloca su archivo msgstore.db o msgstore.db.crypt7 en el siguiente directorio de su tarjeta SD y reinstala WhatsApp, lo verá y le preguntará si desea restaurar sus mensajes antiguos durante la instalación.

/sdcard/WhatsApp/Databases/

Sin embargo, si su base de datos (msgstore.db o msgstore.db.crypt7) está corrupta, es posible que aún pueda 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, normalmente en la siguiente ubicación:

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

La clave única para las bases de datos de copia de seguridad cifradas se almacena aquí:

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

El acceso al directorio /data/data requiere acceso de raíz. Alternativamente, se puede usar ADB (Android Debug Bridge) para extraer los archivos anteriores después de iniciar la recuperación en el dispositivo.

Si está tratando con archivos msgstore.db.crypt7, primero debe descifrarlos de la siguiente manera:

(los siguientes comandos se ejecutan desde un entorno Linux)

  • Extraer archivo clave: /data/data/com.whatsapp/files/key
  • Extraiga el archivo crypt7: /sdcard/WhatsApp/Databases/msgstore.db.crypt7
  • Extraiga las claves de descifrado del archivo "clave" extraído en el paso 1:

    • Clave AES de 256 bits:

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

    • IV (vector de inicialización):

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

  • Encabezado de tira en el archivo crypt7:

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

    Nota: El tamaño del archivo de encabezado despojado en bytes debe ser divisible por 16

  • Descifrar el 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 tenga su archivo msgstore.db, ya sea descifrando primero el msgstore.db.crypt7 o extrayéndolo del /data/data/com.whatsapp/databases/directorio, ahora puede 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 intente restaurar su base de datos nuevamente

  • Si siguió correctamente el procedimiento anterior, ahora debería tener un archivo msgstore_new.db.
  • Cambie el nombre de este archivo msgstore.dby colóquelo en el archivo /sdcard/WhatsApp/Databases/y vuelva a instalar WhatsApp. Elija restaurar su antigua base de datos/mensajes cuando se le 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