Activité utilisateur
Base des notifications (wpndatabase.db)
Fiche base des notifications Windows : tables de wpndatabase.db, Payload XML des toasts, ArrivalTime et ExpiryTime en FILETIME, récupération WAL, appdb.dat.
- Emplacement
- C:\Users\<user>\AppData\Local\Microsoft\Windows\Notifications\wpndatabase.db
- Prouve
- Quelle application a affiché quel texte de notification à l'utilisateur, et quand
- Horodatages
- ArrivalTime et ExpiryTime par notification en FILETIME, UTC ; horodatages des canaux push et des handlers ; heure d'en-tête de l'ancien appdb.dat
- Rétention
- Lignes supprimées après ExpiryTime ou à la fermeture ; restes dans le WAL et les pages libres ; l'ancien appdb.dat réutilise environ 256 blocs
- Accès
- Fichier du profil tenu ouvert par le service de notifications : copier .db, -wal et -shm ensemble via VSS (esentutl /y /vss)
- Preuve de
- Activité utilisateur
- Type
- Base de données
- Windows
- 1011
- Cible KAPE
- WindowsNotificationsDB
- Velociraptor
- Windows.Triage.Targets:WindowsNotificationsDB
Outils
Comparer tous les outilsPrésentation
La plateforme Windows Push Notification (WPN) conserve les notifications émises par les applications (toasts, vignettes et badges) pour que le Centre de notifications puisse les afficher. Chaque utilisateur dispose d'une base SQLite, wpndatabase.db, apparue avec Windows 10 version 1607. Les versions antérieures de Windows 10 utilisaient un fichier binaire propriétaire, appdb.dat.
Les notifications contiennent du texte que l'utilisateur a vu à l'écran : objets et expéditeurs d'e-mails, aperçus de messages Teams, Slack, WhatsApp ou Signal, rappels d'agenda, alertes de téléchargement ou de sécurité. Comme les applications recopient le contenu dans la notification, la base peut conserver un texte de message que l'application elle-même chiffre ou a déjà supprimé.
Emplacement
| Version de Windows | Chemin | Format |
|---|---|---|
| 10 1607 et suivants / 11 (par utilisateur) | %LOCALAPPDATA%\Microsoft\Windows\Notifications\wpndatabase.db | SQLite, avec wpndatabase.db-wal et wpndatabase.db-shm |
| 10 1607 et suivants / 11 (système) | C:\Windows\System32\config\systemprofile\AppData\Local\Microsoft\Windows\Notifications\wpndatabase.db | SQLite, notifications de niveau système |
| 10 1607 et suivants / 11 | %LOCALAPPDATA%\Microsoft\Windows\Notifications\wpnidm\ | Images référencées par les notifications |
| 10 avant 1607 | %LOCALAPPDATA%\Microsoft\Windows\Notifications\appdb.dat | Binaire, signature DNPW |
La base fonctionne en mode WAL : les entrées récentes et celles récemment supprimées ne se trouvent souvent que dans wpndatabase.db-wal (WAL SQLite).
Ce que l'artefact prouve
- Contenu affiché : le texte (et parfois l'image) d'une notification présentée à l'utilisateur, comme un aperçu de message ou l'objet d'un e-mail.
- Application source : l'application ou le service qui l'a émise (
PrimaryIddu gestionnaire, par exemple un AppUserModelID). - Chronologie : l'heure d'arrivée de la notification et son expiration prévue.
- Présence d'applications : les enregistrements de gestionnaires montrent quelles applications se sont inscrites aux notifications sur ce profil.
- L'artefact ne prouve pas que l'utilisateur a lu ou cliqué la notification, ni que l'application était au premier plan.
Champs clés
| Table / champ | Signification |
|---|---|
Notification.Id, Order | Identifiant et ordre de la notification |
Notification.HandlerId | Lien vers NotificationHandler.RecordId |
Notification.Type | Nature de la notification (toast, vignette ou badge) |
Notification.Payload | Contenu de la notification, en général du XML (<toast>…<text>…</text>) ; parfois binaire |
Notification.PayloadType, Tag, Group | Format du contenu et regroupement défini par l'application |
Notification.ArrivalTime, ExpiryTime | Arrivée et suppression programmée |
Notification.BootId, ExpiresOnReboot, ActivityId | Référence de session de démarrage, expiration au redémarrage, lien d'activité |
NotificationHandler.PrimaryId | Identifiant de l'application propriétaire de la notification |
NotificationHandler.HandlerType, CreatedTime, ModifiedTime | Type de gestionnaire, date d'inscription et de mise à jour |
WNSPushChannel.ChannelId, Uri, CreatedTime, ExpiryTime | Canal push enregistré auprès du Windows Notification Service |
La base contient aussi les tables HandlerAssets, NotificationData et TransientTable.
Horodatages
| Horodatage | Positionné quand | Format | Pièges |
|---|---|---|---|
ArrivalTime | Réception de la notification | FILETIME, UTC | L'événement (message, e-mail) peut être antérieur si l'appareil était hors ligne |
ExpiryTime | Suppression programmée de la base | FILETIME, UTC | Fixée par l'application ou le système ; la ligne peut disparaître plus tôt si l'utilisateur la ferme |
WNSPushChannel.CreatedTime, ExpiryTime | Création / expiration du canal push | FILETIME, UTC | Concerne l'inscription de l'application, pas l'activité de l'utilisateur |
NotificationHandler.CreatedTime, ModifiedTime | Inscription / mise à jour du gestionnaire | Convertis par les parseurs | Approche le moment où une application a utilisé les notifications pour la première fois |
Date d'en-tête de appdb.dat | Dernière notification affichée (ancien format) | FILETIME, UTC | Présente uniquement dans l'en-tête du premier bloc |
Rétention et effacement
- Les notifications vivent peu : les lignes sont supprimées après
ExpiryTimeou dès que l'utilisateur les acquitte ou les ferme ; la table active ne contient souvent que des éléments récents. - Les lignes supprimées peuvent survivre dans
wpndatabase.db-walet dans les pages libres SQLite jusqu'à écrasement : récupérez-les par carving et examinez les clichés instantanés. - L'utilisateur peut désactiver les notifications par application ou globalement ; aucune nouvelle ligne n'est alors écrite pour ces applications.
appdb.datutilise des blocs fixes (environ 256 par défaut) réutilisés : les entrées anciennes sont écrasées.
Collecte
- Cible KAPE :
WindowsNotificationsDB(collectewpndatabase.db*, WAL et SHM compris, ainsi queappdb.dat).PushNotificationne collecte quewpndatabase.dbetappdb.dat, sans le WAL. Aucune des deux ne couvre la base du profil système ni le dossierwpnidm. - Velociraptor (
Windows.Triage.Targets) :WindowsNotificationsDB. - Commandes natives : la base est tenue ouverte par le service de notifications ; copiez les trois fichiers ensemble via un cliché instantané (
esentutl /y /vsscopie n'importe quel fichier verrouillé, pas seulement les bases ESE).
esentutl.exe /y C:\Users\alice\AppData\Local\Microsoft\Windows\Notifications\wpndatabase.db /vss /d E:\case\Notifications\wpndatabase.db
esentutl.exe /y C:\Users\alice\AppData\Local\Microsoft\Windows\Notifications\wpndatabase.db-wal /vss /d E:\case\Notifications\wpndatabase.db-wal
esentutl.exe /y C:\Users\alice\AppData\Local\Microsoft\Windows\Notifications\wpndatabase.db-shm /vss /d E:\case\Notifications\wpndatabase.db-shm
robocopy C:\Users\alice\AppData\Local\Microsoft\Windows\Notifications\wpnidm E:\case\Notifications\wpnidm /E /COPY:DAT
Outils d'analyse
- SQLECmd (Eric Zimmerman) : la carte
WPNDatabase_Notificationsjoint notifications et gestionnaires et convertit les FILETIME. - DB Browser for SQLite : ouvrez une copie de travail avec le
-walà côté et lisezPayloadcomme du texte. - Velociraptor : artefact Exchange
Windows.Forensics.NotificationsDatabase, ou l'extensionGeneric.Forensic.SQLiteHunter. - Plaso : le plugin SQLite
windows_push_notificationajoute les événements de notifications et de gestionnaires à une super-chronologie. - Ancien
appdb.dat: script Python et modèle 010 Editor de Yogesh Khatri.
Conseils d'investigation
- Cherchez dans
Payloadles aperçus de messages de Teams ou des messageries : on y trouve parfois un texte que l'application a chiffré ou effacé. - Regroupez par
PrimaryIdpour lister les applications qui ont notifié l'utilisateur, y compris des outils d'accès distant, clients VPN ou applications de stockage cloud inattendus. - Les alertes de sécurité de Microsoft Defender ou d'outils tiers affichées en toast confirment que l'utilisateur a été averti ; rapprochez-les des journaux d'événements Windows.
- Analysez toujours le WAL : une table apparemment propre accompagnée d'un gros fichier
-walcache souvent des notifications récemment fermées ou supprimées. - Convertissez
ArrivalTimeen UTC et placez-le sur la chronologie Windows et les données de session pour montrer que l'utilisateur était connecté à ce moment-là.
Artefacts liés
- Microsoft Teams (client classique et nouveau client)Fiche Microsoft Teams : dossiers de l'ancien et du nouveau client, messages et appels en IndexedDB LevelDB, journaux, exports Purview ou Graph comme référence.
- Messageries de bureau (Slack, Signal, WhatsApp…)Fiche messageries de bureau : où Slack, Signal, WhatsApp, Telegram et Discord stockent leurs données sous Windows, chiffrement, horodatages et exports.
- Windows Timeline (ActivitiesCache.db)Fiche Windows Timeline : ActivitiesCache.db et WAL, tables Activity, valeurs ActivityType, durée au premier plan, presse-papiers, expiration à 30 jours.
- Journaux d'événements Windows (EVTX)Fiche des journaux d'événements Windows : emplacements EVTX, ID indispensables (connexions, processus, services, effacement), rétention, audit et outils.
- Sticky Notes (plum.sqlite et StickyNotes.snt)Fiche Sticky Notes : table Note de plum.sqlite et horodatages en ticks .NET sous Windows 10/11, ancien StickyNotes.snt, récupération via le WAL, collecte.
Termes du glossaire
- Journal WAL SQLite (-wal)Le fichier annexe -wal où SQLite écrit les modifications récentes avant de les fusionner dans la base ; il contient souvent les preuves récentes.
- FILETIMELe format d'horodatage Windows sur 64 bits qui compte les intervalles de 100 nanosecondes depuis le 1er janvier 1601 UTC.
- UTC et heure locale dans les artefacts WindowsPourquoi certains artefacts Windows enregistrent l'UTC et d'autres l'heure locale, et comment la clé TimeZoneInformation aide à normaliser une chronologie.
- Carving de fichiersLa récupération de fichiers à partir de données brutes grâce à des signatures de contenu (en-têtes, pieds), sans métadonnées du système de fichiers.