Glossar
Write-Ahead-Log (WAL)
Der Journalmodus von SQLite, in dem bestätigte Änderungen an eine separate -wal-Datei angehängt und erst beim Checkpoint in die Hauptdatenbank kopiert werden.
Das Write-Ahead-Log (WAL) ist einer der Journalmodi von SQLite. Statt die Datenbankdatei direkt zu ändern, hängt SQLite jede geänderte Seite als Frame an eine separate Datei namens <database>-wal an und lässt die Hauptdatei unverändert, bis ein Checkpoint die Seiten zurückkopiert (sqlite.org). Lesende Verbindungen kombinieren beides: Für jede Seite verwenden sie die neueste bestätigte Version aus der WAL, falls vorhanden, sonst die aus der Datenbankdatei. Eine dritte Datei, -shm, ist ein Shared-Memory-Index, den SQLite neu aufbauen kann und der keine zusätzlichen Beweise enthält.
Die WAL beginnt mit einem 32-Byte-Header (Magic Number, Seitengröße, Checkpoint-Sequenznummer, zwei Salt-Werte und Prüfsummen). Jeder Frame besteht aus einem 24-Byte-Header und einer vollständigen Seite. Der Frame-Header enthält die Seitennummer, eine Commit-Markierung, die Salts und kumulative Prüfsummen. Damit kann ein Leser unbestätigte Transaktionen und übrig gebliebene Frames einer älteren WAL-Generation ignorieren.
Warum es für Ermittlungen wichtig ist
wpndatabase.db läuft im WAL-Modus. Die neuesten Benachrichtigungen stehen daher oft nur in wpndatabase.db-wal, und eine ohne ihre WAL oder zu einem anderen Zeitpunkt kopierte Datenbank verliert sie oder vermischt Zustände. Die WAL kann außerdem mehrere Versionen derselben Seite enthalten: Ältere Frames können noch Benachrichtigungszeilen tragen, die später gelöscht wurden. Damit ist sie neben Freeblocks und der Freelist eine Quelle für die Wiederherstellung.
Beispiel
wpndatabase.db-wal
WAL-Header (32 Bytes): Salt-1, Salt-2 ...
Frame 1: Seite 5, kein Commit-Frame
Frame 2: Seite 4, Commit-Frame -> Transaktion 1 bestätigt
Frame 3: Seite 4, Commit-Frame -> neuere Version von Seite 4
Frame 4: Seite 9, kein Commit folgt -> ignoriert
Hier existiert Seite 4 in drei Versionen: der aus der Datei, der aus Frame 2 und der aus Frame 3. Der Parser wendet die Frames 1 bis 3 an, markiert Zeilen, die nur oder abweichend in der WAL stehen, und carvt die älteren Versionen nach gelöschten Zeilen.
Verwandte Begriffe
Laden Sie die Datenbank mit ihrer -wal-Datei in den Windows Notification Parser und folgen Sie der Anleitung zur Sicherung, um beide im selben Moment zu sichern.