Récupérer une base de données WhatsApp corrompue (msgstore.db)

WhatsApp conserve tout votre historique de conversations dans un unique fichier SQLite, msgstore.db. Quand une seule page ou un seul pointeur se casse, SQLite rejette le fichier entier comme corrompu alors que la plupart de vos messages s'y trouvent toujours, et les récupérer ne devrait jamais signifier confier la base de données de vos conversations au serveur d'un inconnu.

Votre fichier ne quitte jamais votre appareil — la réparation s'exécute dans votre navigateur. 0 octet téléversé.

Your data is the big block — usually intact. What breaks is the small index. Repair rebuilds it.

Drop a file here or browseTap to choose a file

ZIP · Office · PDF · video · JPG · PNG · RAR/7z · SQLite — repaired right here in your browser. Nothing is uploaded

0 bytes uploadedFree: 3 repairs/day — up to 500 MB video, 100 MB docs & archives, 50 MB photos. Free download. Single repair €5.90. No account required.

Réparer maintenant

  1. Déposez le fichier
  2. La réparation s'exécute en local
  3. Téléchargez le résultat

WhatsApp sous Android enregistre chaque conversation dans une unique base de données SQLite nommée msgstore.db : le texte des messages, les horodatages et les références aux conversations et aux contacts y résident tous. Quand un plantage de l'application, une copie interrompue au moment de la sortir du téléphone ou une synchronisation à moitié terminée l'endommagent, WhatsApp et n'importe quel autre outil SQLite rejettent le fichier entier avec "database disk image is malformed" (« l'image disque de la base de données est malformée »). Déposez le msgstore.db déjà déchiffré ci-dessus et l'outil parcourt ses pages localement, reconstruit le schéma et réinsère chaque ligne qu'il peut encore décoder dans une base de données neuve qui, elle, s'ouvre ; la base de données de la conversation, qui contient tout votre historique de messages, n'est jamais téléversée.

Ce qu'il y a dans msgstore.db : pages, tables et le fichier annexe -wal

Une base de données WhatsApp est un fichier SQLite ordinaire : c'est donc un tableau plat de pages de taille fixe (la valeur par défaut de SQLite est souvent de 4 KB). Les 16 premiers octets sont la chaîne magique SQLite format 3\0 ; le reste de la page 1 contient l'en-tête du fichier et le sqlite_schema, qui énumère chaque table. Chaque table est un arbre-b (b-tree) : les pages internes portent des pointeurs qui descendent vers les pages feuilles, et les pages feuilles contiennent vos lignes réelles.

Les tables qui comptent pour l'historique des conversations sont prévisibles. Les versions récentes de WhatsApp conservent les messages dans une table message (les anciennes versions utilisaient messages), la liste des conversations dans chat et les identifiants de numéro de téléphone/groupe dans jid. Le texte du message vit dans une colonne de texte (text_data sur le schéma moderne, data sur l'ancien), et chaque ligne porte un horodatage en millisecondes de l'époque Unix. Des tables auxiliaires comme message_media, message_thumbnail, message_quoted et call_log complètent l'ensemble. Point crucial : les photos, les vidéos et les notes vocales elles-mêmes ne sont pas dans la base de données ; ce sont des fichiers distincts dans le dossier Media de WhatsApp, et la BD ne stocke que leurs chemins d'accès et de petites vignettes.

WhatsApp exécute la base de données en mode WAL (write-ahead logging, journalisation par écriture anticipée) : sur le téléphone, vous verrez donc deux fichiers frères à ses côtés, msgstore.db-wal et msgstore.db-shm. Les messages récents déjà validés (committed) peuvent ne vivre que dans le fichier -wal jusqu'à ce qu'ils soient consolidés (checkpoint) dans le .db principal. Si vous avez ce fichier annexe, conservez-le : ses frames validés sont les lignes les plus récentes.

Pourquoi il affiche « malformed » — et le piège du .crypt

SQLite lève SQLITE_CORRUPT (code de résultat 11) — qui apparaît sous la forme "database disk image is malformed" — dès qu'il suit un pointeur et atterrit sur quelque chose qui n'est pas une page b-tree valide : une page à zéro, un décalage de cellule erroné, un nombre de pages qui ne concorde pas avec la taille du fichier. Il s'arrête à la première incohérence, et c'est pourquoi une seule page interne endommagée fait tomber le fichier entier alors que les pages feuilles intactes situées derrière contiennent toujours vos messages. Une erreur apparentée, "file is not a database," (« le fichier n'est pas une base de données ») signifie que la chaîne magique de 16 octets de l'en-tête elle-même a été altérée ; les pages derrière elle sont souvent intactes.

Le dommage provient presque toujours d'une écriture interrompue. Sortir le msgstore.db du téléphone par USB ou avec un gestionnaire de fichiers alors que WhatsApp le tient encore ouvert peut copier un fichier déchiré, avec le checkpoint à moitié fait ; un bit retourné sur une carte SD défaillante ou pendant une synchronisation, ou un appareil qui a perdu son alimentation en pleine écriture, produisent le même résultat. Une copie tronquée perd simplement les pages qui se trouvaient à la fin.

Un piège attrape à peu près tout le monde d'abord : le fichier situé dans le dossier de sauvegarde de WhatsApp n'est pas une base de données ordinaire. Les sauvegardes s'appellent msgstore.db.crypt14 ou msgstore.db.crypt15 et sont chiffrées en AES-GCM (la clé se trouve dans /data/data/com.whatsapp/files/key ou, pour crypt15, derrière votre mot de passe de sauvegarde chiffrée de bout en bout). Un fichier .crypt14/.crypt15 se lit comme un bruit à haute entropie : il n'a aucun en-tête SQLite, si bien que la récupération par pages ne peut rien en faire tant qu'il n'est pas déchiffré pour redevenir un msgstore.db ordinaire. Cet outil travaille sur la base de données déjà déchiffrée, pas sur la sauvegarde chiffrée.

Ce que la récupération permet de retrouver — et pourquoi on ne téléverse jamais la BD d'une conversation

Plutôt que de se fier aux pointeurs cassés, l'outil lit le fichier page par page : il reconstruit le schéma, parcourt le b-tree de chaque table et, pour tout ce que la chaîne de pointeurs ne peut plus atteindre, se rabat sur un balayage brut des pages qui décode les enregistrements autodescriptifs directement depuis les pages feuilles. Il reconstruit les b-trees de zéro autour des lignes qu'il trouve et les écrit dans une base de données neuve que vous téléchargez : exactement la stratégie de la propre commande .recover de SQLite. Les lignes qui ne peuvent être rattachées à une table connue sont placées dans une table lost_and_found plutôt que jetées, et si vous fournissez le fichier annexe msgstore.db-wal, ses frames validés sont superposés en premier pour que le résultat reflète vos derniers messages validés, et pas seulement le dernier checkpoint.

Les limites honnêtes : les octets qui ont été physiquement écrasés ou tronqués à la fin du fichier sont perdus, et aucun outil ne peut les inventer. Les valeurs reviennent avec leur classe de stockage sur disque, de sorte que l'affinité d'une colonne peut changer. Comme le balayage lit aussi les pages de la liste libre (freelist) et les pages non compactées, certains messages précédemment supprimés peuvent réapparaître. Les données récupérées sont toujours suspectes — la documentation même de SQLite le dit — alors vérifiez-les contre une source fiable avant de vous y fier. Et les fichiers multimédias vivent toujours dans le dossier Media à part ; la base de données vous donne le texte et les références, pas les images elles-mêmes.

Pourquoi faire cela dans le navigateur ? La base de données d'une conversation est le pire fichier que vous puissiez confier à un serveur que vous ne contrôlez pas : elle peut contenir chaque message, chaque numéro de téléphone et chaque horodatage que vous avez jamais échangés. Les outils de « réparation » qui téléversent le fichier le copient sur une infrastructure que vous ne pouvez pas inspecter, sous des délais de rétention que vous n'avez pas écrits. Ici, le fichier est lu depuis votre disque et reconstruit dans votre onglet ; vous pouvez ouvrir le panneau Réseau (Network) et vérifier que 0 octet de la base de données ne quitte votre machine.

Ce que cela peut et ne peut pas réparer

Peut réparer

  • "Database disk image is malformed" (SQLITE_CORRUPT 11) dû à une page endommagée ou à un pointeur de b-tree cassé
  • "File is not a database" quand seule la chaîne magique de 16 octets de l'en-tête a été altérée et que les pages situées derrière survivent
  • Un msgstore.db déchiré ou avec le checkpoint à moitié fait pour l'avoir copié depuis le téléphone alors que WhatsApp était encore ouvert
  • Bases de données tronquées : chaque ligne de message présente sur une page ayant survécu est extraite, plus les lignes non consolidées d'un fichier annexe -wal fourni
  • Lignes sur des pages que la chaîne de pointeurs n'atteint plus, récupérées par un balayage brut des pages vers lost_and_found

Ne peut pas réparer

  • Sauvegardes chiffrées .crypt14 / .crypt15 sans la clé : ce sont des données chiffrées sans en-tête SQLite, il faut d'abord les déchiffrer
  • Messages physiquement écrasés ou tronqués à la fin du fichier : ces octets n'existent plus
  • Les photos, les vidéos et les notes vocales elles-mêmes (ce sont des fichiers distincts dans le dossier Media, pas dans la base de données)
  • Une garantie que chaque message récupéré soit complet ou correct : vérifiez les données récupérées contre une source fiable
  • Les fichiers de 0 octet, ou une base de données dont l'en-tête et les pages ne sont que du bruit (c'est d'abord un problème de récupération du stockage)

Si une réparation échoue, nous vous expliquons pourquoi (données manquantes ou structure endommagée), et vous n'êtes jamais facturé pour une réparation échouée.

Questions fréquentes

WhatsApp affiche "database disk image is malformed". Mes conversations sont-elles perdues ?

En général, non. C'est le SQLITE_CORRUPT de SQLite (code 11) : cela signifie que le moteur est tombé sur une page ou un pointeur incohérent et a rejeté le fichier entier, pas que vos messages ont été effacés. Les lignes message sont presque toujours encore dans leurs pages feuilles. Parcourir le fichier page par page et reconstruire une base de données neuve autour des lignes qui se décodent bien ramène généralement l'historique.

Je n'ai qu'une sauvegarde .crypt14 / .crypt15. Pouvez-vous la récupérer ?

Pas directement. Un fichier .crypt14 ou .crypt15 est chiffré en AES-GCM et n'a pas d'en-tête SQLite : il se lit donc comme du pur bruit jusqu'à ce qu'il soit déchiffré pour redevenir un msgstore.db ordinaire à l'aide de la clé de WhatsApp (ou, pour crypt15, votre clé de sauvegarde de bout en bout à 64 chiffres). Une fois que vous avez le msgstore.db déchiffré, déposez-le ici et la récupération s'exécute dessus.

Est-ce que je récupère aussi mes photos et mes vidéos ?

La base de données conserve le texte des messages, les horodatages et les références aux fichiers, pas le contenu multimédia lui-même. Les photos, les vidéos et les notes vocales sont enregistrées comme des fichiers distincts dans le dossier Media de WhatsApp, et il ne reste que de petites vignettes à l'intérieur de la BD. Récupérer msgstore.db restaure la conversation et les pointeurs vers le contenu ; les fichiers multimédias se récupèrent depuis ce dossier séparément.

J'ai un fichier msgstore.db-wal à côté de la base de données. Est-ce important ?

Oui, souvent beaucoup. WhatsApp fonctionne en mode WAL, si bien que vos messages validés les plus récents peuvent ne vivre que dans le fichier annexe msgstore.db-wal jusqu'à leur consolidation. Conservez-le et ajoutez-le à côté du .db principal : ses frames validés sont superposés avant l'analyse, pour que la base de données récupérée reflète votre dernière transaction validée et non le dernier checkpoint.

La base de données de ma conversation est-elle téléversée pour être réparée ?

Non. Le fichier est lu depuis votre disque et reconstruit dans l'onglet de votre navigateur ; rien n'est transmis. La base de données d'une conversation est le dernier fichier que vous voudriez voir sur le serveur de quelqu'un d'autre — elle peut contenir chaque message et chaque numéro que vous avez échangés — alors vous pouvez ouvrir le panneau Réseau (Network) et vérifier que 0 octet de la base de données ne quitte votre machine.

Associés : Réparer n'importe quelle base de données SQLite · Réparer une vidéo WhatsApp corrompue · Vérifier qu'aucun fichier n'est téléversé