appdb.dat : l'ancien stockage des notifications Windows
Ce qu'est appdb.dat, les versions de Windows concernées, comment ses blocs fixes stockent toasts, vignettes et badges, et ce qu'on peut en tirer.
En bref. Avant la build 1607 de Windows 10 (et sous Windows 8.x), les notifications étaient stockées dans appdb.dat, un fichier binaire de taille fixe commençant par DNPW, dans le même dossier Notifications. Il n'est pas documenté. La structure connue de la version 3 comporte 256 blocs, chacun avec une URI push, un badge, cinq vignettes et vingt toasts accompagnés de leurs heures d'arrivée et d'expiration FILETIME et de leur XML. Le fichier n'indique pas à quelle application appartient un bloc.
Qui en possède encore un
Les systèmes mis à niveau depuis les premières builds de Windows 10 peuvent conserver un appdb.dat à côté de wpndatabase.db, et les images de machines plus anciennes ne contiennent que appdb.dat. Collectez-le quoi qu'il en soit : la cible KAPE WindowsNotificationsDB l'inclut déjà.
Structure
Yogesh Khatri a décrit le fichier en 2016 (swiftforensics) : une signature DNPW, un en-tête avec un horodatage et le prochain identifiant de notification, puis des blocs fixes contenant une URI push, le XML du badge et les données des vignettes. Le projet Dissect publie une définition de structure complète pour la version 3, sur laquelle s'appuie le parseur de ce site :
| Partie | Contenu |
|---|---|
| En-tête de bloc (premier bloc uniquement) | DNPW, version, horodatage, prochain identifiant de notification |
| Informations de bloc | Indicateur d'utilisation et index d'écriture |
| Descripteur push | Deux FILETIME et l'URI push WNS |
| Badge | Identifiant, horodatage, XML du badge |
| 5 descripteurs de vignette + emplacements XML | Identifiant, FILETIME d'expiration et d'arrivée, nom, longueur du XML |
| 20 descripteurs de toast + emplacements XML | Identifiant, FILETIME d'expiration et d'arrivée, deux noms, longueur du XML |
Chaque bloc fait 0x23810 octets et le fichier en contient 256 : un appdb.dat complet pèse donc un peu plus de 37 Mo, quel que soit son contenu.
Ce que l'on obtient
Pour chaque bloc utilisé : l'URI push, la valeur du badge, et chaque vignette et chaque toast avec heure d'arrivée et d'expiration (FILETIME UTC), un identifiant, les noms stockés dans le descripteur et le XML — le même schéma de toast que dans wpndatabase.db, si bien que les lignes de texte, les arguments de lancement et les actions se lisent de la même manière.
Ce que l'on n'obtient pas
- L'application. Le bloc ne nomme pas son application. Corrélez l'URI push, les noms et le contenu avec d'autres artefacts.
- La certitude. La structure provient de la rétro-ingénierie. La version 1 (Windows 8) diffère : elle est signalée, pas analysée.
- Les entrées supprimées, au-delà de ce qui subsiste dans les emplacements inutilisés : il n'y a pas d'espace libre SQLite à exploiter par carving.
Le Windows Notification Parser lit la version 3 et signale chaque résultat qui en provient comme obtenu au mieux. Pour les systèmes récents, consultez le guide wpndatabase.db.