Eine beschädigte WhatsApp-Datenbank (msgstore.db) wiederherstellen

WhatsApp bewahrt deinen gesamten Chatverlauf in einer einzigen SQLite-Datei auf, msgstore.db. Wenn eine einzige Seite oder ein Zeiger zerbricht, verweigert SQLite die ganze Datei als fehlerhaft, obwohl die meisten deiner Nachrichten noch darin liegen — und sie zurückzuholen sollte niemals bedeuten, die Datenbank deiner Unterhaltungen dem Server eines Fremden zu übergeben.

Deine Datei verlässt nie dein Gerät — die Reparatur läuft in deinem Browser. 0 Bytes hochgeladen.

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.

Jetzt reparieren

  1. Datei ablegen
  2. Reparatur läuft lokal
  3. Ergebnis herunterladen

WhatsApp unter Android speichert jede Unterhaltung in einer einzigen SQLite-Datenbank namens msgstore.db — der Nachrichtentext, die Zeitstempel sowie die Verweise auf Chats und Kontakte liegen alle darin. Wenn ein Absturz der App, eine unterbrochene Kopie beim Übertragen vom Telefon oder eine halb fertige Synchronisierung sie beschädigt, verweigern WhatsApp und jedes andere SQLite-Werkzeug die gesamte Datei mit "database disk image is malformed" (Datenträgerabbild der Datenbank ist fehlerhaft). Lege die bereits entschlüsselte msgstore.db oben ab und das Werkzeug durchläuft ihre Seiten lokal, baut das Schema neu auf und fügt jede Zeile, die es noch dekodieren kann, in eine frische, wieder öffenbare Datenbank ein — die Chat-Datenbank, die deinen gesamten Nachrichtenverlauf enthält, wird nie hochgeladen.

Was in msgstore.db steckt: Seiten, Tabellen und die -wal-Begleitdatei

Eine WhatsApp-Datenbank ist eine ganz gewöhnliche SQLite-Datei, also ein flaches Array aus Seiten fester Größe (der Standardwert von SQLite liegt oft bei 4 KB). Die ersten 16 Byte sind die magische Zeichenkette SQLite format 3\0; der Rest der Seite 1 enthält den Datei-Header und das sqlite_schema, das jede Tabelle auflistet. Jede Tabelle ist ein B-Baum (b-tree): Die inneren Seiten tragen Zeiger, die zu den Blattseiten hinabführen, und die Blattseiten enthalten deine eigentlichen Zeilen.

Die Tabellen, die für den Chatverlauf zählen, sind vorhersehbar. Moderne WhatsApp-Versionen speichern die Nachrichten in einer Tabelle message (ältere Versionen verwendeten messages), die Liste der Unterhaltungen in chat und die Kennungen für Telefonnummern/Gruppen in jid. Der Nachrichtentext liegt in einer Textspalte (text_data im modernen Schema, data im alten), und jede Zeile trägt einen Zeitstempel in Millisekunden der Unix-Epoche. Hilfstabellen wie message_media, message_thumbnail, message_quoted und call_log runden das Ganze ab. Und ganz entscheidend: Die Fotos, Videos und Sprachnachrichten selbst liegen nicht in der Datenbank — das sind separate Dateien im Ordner Media von WhatsApp, und die Datenbank speichert nur deren Dateipfade sowie kleine Miniaturansichten (Thumbnails).

WhatsApp betreibt die Datenbank im WAL-Modus (Write-Ahead Logging), sodass du auf dem Telefon zwei Geschwisterdateien daneben siehst: msgstore.db-wal und msgstore.db-shm. Kürzlich bestätigte Nachrichten können ausschließlich in der Datei -wal liegen, bis sie per Checkpoint in die Haupt-.db übertragen werden. Wenn du diese Begleitdatei hast, bewahre sie auf: Ihre bestätigten Frames sind die neuesten Zeilen.

Warum "malformed" gemeldet wird — und die .crypt-Falle

SQLite löst SQLITE_CORRUPT (Ergebniscode 11) aus — angezeigt als "database disk image is malformed" (Datenträgerabbild der Datenbank ist fehlerhaft) — in dem Moment, in dem es einem Zeiger folgt und auf etwas landet, das keine gültige B-Baum-Seite ist: eine mit Nullen gefüllte Seite, ein falscher Zell-Offset, eine Seitenzahl, die nicht zur Dateigröße passt. Es hält bei der ersten Unstimmigkeit an, und deshalb reißt eine einzige beschädigte innere Seite die ganze Datei mit, während die unberührten Blattseiten dahinter deine Nachrichten weiterhin bewahren. Ein verwandter Fehler, "file is not a database," (Datei ist keine Datenbank) bedeutet, dass die 16 Byte lange magische Kennung des Headers selbst verstümmelt wurde — die Seiten dahinter sind oft in Ordnung.

Der Schaden stammt fast immer von einem unterbrochenen Schreibvorgang. Wenn man die msgstore.db über USB oder mit einem Dateimanager vom Telefon holt, während WhatsApp sie noch geöffnet hat, kann eine zerrissene, halb per Checkpoint geschriebene Datei kopiert werden; ein gekipptes Byte auf einer ausfallenden SD-Karte oder während einer Synchronisierung, oder ein Gerät, das mitten im Schreibvorgang die Stromzufuhr verlor, bewirken dasselbe. Eine abgeschnittene Kopie verliert einfach die Seiten, die sich am Ende befanden.

Eine Falle erwischt fast jeden zuerst: Die Datei im Backup-Ordner von WhatsApp ist keine normale Datenbank. Die Sicherungen heißen msgstore.db.crypt14 oder msgstore.db.crypt15 und sind mit AES-GCM verschlüsselt (der Schlüssel liegt unter /data/data/com.whatsapp/files/key oder, bei crypt15, hinter deinem Passwort für die Ende-zu-Ende-verschlüsselte Sicherung). Eine .crypt14/.crypt15-Datei liest sich als hochentropisches Rauschen — sie hat überhaupt keinen SQLite-Header, sodass die Seiten-Rettung sie nicht anfassen kann, bis sie zurück zu einer normalen msgstore.db entschlüsselt wurde. Dieses Werkzeug arbeitet mit der bereits entschlüsselten Datenbank, nicht mit der verschlüsselten Sicherung.

Was die Wiederherstellung zurückholt — und warum du eine Chat-Datenbank niemals hochlädst

Statt den kaputten Zeigern zu vertrauen, liest das Werkzeug die Datei Seite für Seite: Es baut das Schema neu auf, durchläuft den B-Baum jeder Tabelle und greift für alles, was die Zeigerkette nicht mehr erreichen kann, auf einen rohen Seiten-Suchlauf zurück, der die selbstbeschreibenden Datensätze direkt aus den Blattseiten dekodiert. Es baut die B-Bäume von Grund auf um die gefundenen Zeilen herum neu auf und schreibt sie in eine brandneue Datenbank, die du herunterlädst — dieselbe Strategie wie der .recover-Befehl von SQLite selbst. Zeilen, die sich keiner bekannten Tabelle zuordnen lassen, landen in einer Tabelle lost_and_found, statt verworfen zu werden, und wenn du die Begleitdatei msgstore.db-wal beisteuerst, werden ihre bestätigten Frames zuerst darübergelegt, damit das Ergebnis deine zuletzt bestätigten Nachrichten widerspiegelt und nicht nur den letzten Checkpoint.

Die ehrlichen Grenzen: Bytes, die physisch überschrieben oder am Ende der Datei abgeschnitten wurden, sind verloren, und kein Werkzeug kann sie erfinden. Die Werte kommen mit ihrer Speicherklasse von der Festplatte zurück, sodass sich die Affinität einer Spalte verschieben kann. Da der Suchlauf auch die Seiten der Freelist und die nicht kompaktierten Seiten liest, können manche zuvor gelöschten Nachrichten wieder auftauchen. Wiederhergestellte Daten sind immer verdächtig — das sagen die eigenen Dokumente von SQLite —, prüfe sie also gegen eine vertrauenswürdige Quelle, bevor du dich darauf verlässt. Und die Mediendateien liegen weiterhin im separaten Ordner Media; die Datenbank gibt dir den Text und die Verweise, nicht die Bilder selbst.

Warum das im Browser tun? Die Datenbank eines Chats ist die denkbar schlechteste Datei, die man einem Server übergeben kann, den man nicht kontrolliert: Sie kann jede Nachricht, jede Telefonnummer und jeden Zeitstempel enthalten, die du je ausgetauscht hast. "Reparatur"-Werkzeuge, die die Datei hochladen, kopieren sie auf eine Infrastruktur, die du nicht prüfen kannst, unter Aufbewahrungsbedingungen, die du nicht verfasst hast. Hier wird die Datei von deiner Festplatte gelesen und in deinem Tab neu aufgebaut; du kannst den Netzwerk-Tab (Network) öffnen und bestätigen, dass 0 Byte der Datenbank dein Gerät verlassen.

Was sich reparieren lässt und was nicht

Kann repariert werden

  • "Database disk image is malformed" (SQLITE_CORRUPT 11) durch eine beschädigte Seite oder einen kaputten B-Baum-Zeiger
  • "File is not a database", wenn nur die 16 Byte lange magische Kennung des Headers verändert wurde und die Seiten dahinter überleben
  • Eine msgstore.db, die zerrissen oder halb per Checkpoint geschrieben wurde, weil sie vom Telefon kopiert wurde, während WhatsApp noch geöffnet war
  • Abgeschnittene Datenbanken: Jede Nachrichtenzeile auf einer überlebenden Seite wird herausgeholt, dazu die nicht per Checkpoint übertragenen Zeilen aus einer beigesteuerten -wal-Begleitdatei
  • Zeilen auf Seiten, die die Zeigerkette nicht mehr erreicht, wiederhergestellt durch einen rohen Seiten-Suchlauf nach lost_and_found

Kann nicht repariert werden

  • Verschlüsselte Sicherungen .crypt14 / .crypt15 ohne den Schlüssel: Sie sind Chiffretext ohne SQLite-Header und müssen zuerst entschlüsselt werden
  • Nachrichten, die physisch überschrieben oder am Ende der Datei abgeschnitten wurden: Diese Bytes existieren nicht mehr
  • Die Fotos, Videos und Sprachnachrichten selbst (das sind separate Dateien im Ordner Media, sie liegen nicht in der Datenbank)
  • Eine Garantie, dass jede wiederhergestellte Nachricht vollständig oder korrekt ist: Prüfe die wiederhergestellten Daten gegen eine vertrauenswürdige Quelle
  • Dateien mit 0 Byte oder eine Datenbank, deren Header und Seiten nur Rauschen sind (das ist zuerst ein Problem der Datenträger-Wiederherstellung)

Wenn eine Reparatur fehlschlägt, sagen wir dir warum (fehlende Daten gegenüber beschädigter Struktur), und für eine fehlgeschlagene Reparatur wird dir nie etwas berechnet.

Häufige Fragen

WhatsApp sagt "database disk image is malformed". Sind meine Chats weg?

Normalerweise nicht. Das ist SQLites SQLITE_CORRUPT (Code 11): Es bedeutet, dass die Engine auf eine inkonsistente Seite oder einen inkonsistenten Zeiger stieß und die gesamte Datei verweigerte — nicht, dass deine Nachrichten gelöscht wurden. Die message-Zeilen liegen fast immer noch in ihren Blattseiten. Die Datei Seite für Seite zu durchlaufen und eine neue Datenbank um die Zeilen herum aufzubauen, die sich dekodieren lassen, holt den Verlauf meist zurück.

Ich habe nur eine Sicherung .crypt14 / .crypt15. Kannst du die wiederherstellen?

Nicht direkt. Eine .crypt14- oder .crypt15-Datei ist mit AES-GCM verschlüsselt und hat keinen SQLite-Header, sie liest sich also als reines Rauschen, bis sie mit dem WhatsApp-Schlüssel (oder, bei crypt15, deinem 64-stelligen Ende-zu-Ende-Sicherungsschlüssel) zurück zu einer normalen msgstore.db entschlüsselt wurde. Sobald du die entschlüsselte msgstore.db hast, lege sie hier ab, und die Wiederherstellung läuft über sie.

Bekomme ich auch meine Fotos und Videos zurück?

Die Datenbank speichert den Nachrichtentext, die Zeitstempel und die Verweise auf Dateien, nicht die Medieninhalte selbst. Fotos, Videos und Sprachnachrichten werden als separate Dateien im Ordner Media von WhatsApp gespeichert, und in der Datenbank bleiben nur kleine Miniaturansichten. Das Wiederherstellen von msgstore.db stellt die Unterhaltung und die Zeiger auf die Medien wieder her; die Mediendateien werden getrennt aus diesem Ordner wiederhergestellt.

Ich habe eine Datei msgstore.db-wal neben der Datenbank. Ist das wichtig?

Ja, oft sehr. WhatsApp läuft im WAL-Modus, sodass deine neuesten bestätigten Nachrichten ausschließlich in der Begleitdatei msgstore.db-wal liegen können, bis sie per Checkpoint übertragen werden. Bewahre sie auf und füge sie neben der Haupt-.db hinzu: Ihre bestätigten Frames werden vor der Analyse darübergelegt, damit die wiederhergestellte Datenbank deine letzte bestätigte Transaktion widerspiegelt und nicht den letzten Checkpoint.

Wird meine Chat-Datenbank zum Reparieren hochgeladen?

Nein. Die Datei wird von deiner Festplatte gelesen und im Tab deines Browsers neu aufgebaut; es wird nichts übertragen. Die Datenbank eines Chats ist die letzte Datei, die du auf dem Server einer anderen Person haben möchtest — sie kann jede Nachricht und jede Nummer enthalten, die du je ausgetauscht hast —, du kannst also den Netzwerk-Tab (Network) öffnen und bestätigen, dass 0 Byte der Datenbank dein Gerät verlassen.

Verwandt: Jede SQLite-Datenbank reparieren · Ein beschädigtes WhatsApp-Video reparieren · Prüfe, dass nichts hochgeladen wird