Glossaire
Journal d'écriture anticipée (WAL)
Mode de journalisation SQLite : les modifications validées sont ajoutées à un fichier -wal avant d'être recopiées dans la base lors d'un checkpoint.
Le journal d'écriture anticipée (write-ahead log, WAL) est l'un des modes de journalisation de SQLite. Au lieu de modifier directement le fichier de base, SQLite ajoute chaque page modifiée, sous forme de trame, à un fichier distinct nommé <database>-wal, et ne touche pas au fichier principal jusqu'à ce qu'un checkpoint y recopie les pages (sqlite.org). Les lecteurs combinent les deux : pour chaque page, ils utilisent la version validée la plus récente du WAL s'il y en a une, sinon celle du fichier de base. Un troisième fichier, -shm, est un index en mémoire partagée que SQLite peut reconstruire et qui ne contient aucune preuve supplémentaire.
Le WAL commence par un en-tête de 32 octets (nombre magique, taille de page, numéro de séquence de checkpoint, deux valeurs de sel et des sommes de contrôle). Chaque trame se compose d'un en-tête de 24 octets suivi d'une page complète. L'en-tête de trame enregistre le numéro de page, un marqueur de validation (commit), les sels et des sommes de contrôle cumulées, ce qui permet à un lecteur d'ignorer les transactions non validées et les trames restantes d'une génération précédente du WAL.
Pourquoi c'est important dans une investigation
wpndatabase.db fonctionne en mode WAL. Les notifications les plus récentes ne se trouvent donc souvent que dans wpndatabase.db-wal, et une base copiée sans son WAL, ou à un autre moment, les perd ou mélange des états. Le WAL peut aussi contenir plusieurs versions d'une même page : les trames plus anciennes peuvent encore contenir des lignes de notification supprimées par la suite, ce qui en fait une source de récupération, au même titre que les freeblocks et la freelist.
Exemple
wpndatabase.db-wal
En-tête WAL (32 octets) : sel-1, sel-2 ...
Trame 1 : page 5, pas une trame de commit
Trame 2 : page 4, trame de commit -> transaction 1 validée
Trame 3 : page 4, trame de commit -> version plus récente de la page 4
Trame 4 : page 9, aucun commit ensuite -> ignorée
Ici, la page 4 existe en trois versions : celle du fichier, celle de la trame 2 et celle de la trame 3. Le parseur applique les trames 1 à 3, signale les lignes présentes uniquement ou différemment dans le WAL, et analyse les anciennes versions à la recherche de lignes supprimées.
Termes associés
Chargez la base avec son -wal dans le Windows Notification Parser, et suivez le guide de collecte pour collecter les deux au même instant.