appdb.dat: el antiguo almacén de notificaciones
Qué es appdb.dat, qué versiones de Windows lo usan, cómo guarda toasts, iconos y distintivos en bloques fijos y qué se puede extraer de él.
En resumen. Antes de la compilación 1607 de Windows 10 (y en Windows 8.x), las notificaciones se guardaban en appdb.dat, un archivo binario de tamaño fijo que empieza por DNPW, en la misma carpeta Notifications. No está documentado. La estructura conocida de la versión 3 contiene 256 bloques (chunks), cada uno con una URI push, un distintivo (badge), cinco iconos (tiles) y veinte toasts con sus horas de llegada y caducidad en FILETIME y su XML. No indica qué aplicación es la propietaria de cada bloque.
Quién lo conserva todavía
Los sistemas actualizados desde las primeras compilaciones de Windows 10 pueden conservar un appdb.dat junto a wpndatabase.db, y las imágenes de equipos más antiguos solo tienen appdb.dat. Recógelo de todos modos: el target WindowsNotificationsDB de KAPE ya lo incluye.
Estructura
Yogesh Khatri describió el archivo en 2016 (swiftforensics): una firma DNPW, una cabecera con una marca de tiempo y el siguiente identificador de notificación y, a continuación, bloques fijos con una URI push, el XML del distintivo y los datos de los iconos. El proyecto Dissect publica una definición completa de la estructura de la versión 3, que es la que sigue el parser de este sitio:
| Parte | Contenido |
|---|---|
| Cabecera del bloque (solo el primero) | DNPW, versión, marca de tiempo, siguiente identificador de notificación |
| Información del bloque | Indicador de uso e índices de escritura |
| Descriptor push | Dos FILETIME y la URI push de WNS |
| Distintivo | Identificador, marca de tiempo, XML del distintivo |
| 5 descriptores de icono + huecos de XML | Identificador, FILETIME de caducidad y de llegada, nombre, longitud del XML |
| 20 descriptores de toast + huecos de XML | Identificador, FILETIME de caducidad y de llegada, dos nombres, longitud del XML |
Cada bloque ocupa 0x23810 bytes y el archivo contiene 256, así que un appdb.dat completo pesa algo más de 37 MB, sea cual sea su contenido.
Qué se obtiene
Para cada bloque en uso: la URI push, el valor del distintivo y cada icono y toast con su hora de llegada y de caducidad (FILETIME en UTC), un identificador, los nombres almacenados en el descriptor y el XML, que sigue el mismo esquema de toast que en wpndatabase.db, por lo que las líneas de texto, los argumentos de lanzamiento y las acciones se interpretan igual.
Qué no se obtiene
- La aplicación. El bloque no indica a qué aplicación pertenece. Correlaciona la URI push, los nombres y el contenido con otros artefactos.
- Certeza. La estructura procede de ingeniería inversa. La versión 1 (Windows 8) es diferente: se detecta y se notifica, pero no se procesa.
- Entradas borradas, más allá de lo que quede en los huecos sin usar: no hay espacio libre de SQLite del que hacer carving.
Windows Notification Parser lee la versión 3 y marca todos los resultados obtenidos de ella como de mejor esfuerzo. Para sistemas modernos, consulta la guía de wpndatabase.db.