Skip to content

Glosario

Freeblock de SQLite

Espacio libre en una página del árbol B de SQLite, dejado por un registro borrado: sus cuatro primeros bytes se sobrescriben y el resto queda intacto.

Un freeblock es un tramo de bytes sin usar dentro de una página del árbol B de SQLite, casi siempre el espacio de una celda (una fila) que se ha borrado. SQLite encadena los freeblocks de cada página: los bytes 1 y 2 de la cabecera de página contienen el desplazamiento del primer freeblock, y cada freeblock empieza con dos valores big-endian de 2 bytes, el desplazamiento del siguiente freeblock (0 en el último) y su tamaño. Los huecos de menos de cuatro bytes son demasiado pequeños para esa cabecera y se cuentan como bytes fragmentados (formato de archivo).

Cuando se borra una fila, SQLite escribe esos cuatro bytes de cabecera sobre el inicio de la celda antigua, normalmente sus varints de longitud de carga útil y de rowid, y deja el resto intacto salvo que secure_delete esté activado.

Por qué importa en una investigación

En wpndatabase.db, Windows borra la fila de una notificación cuando el toast se descarta o caduca. Los bytes de la fila, incluida la mayor parte de su XML de carga útil, permanecen en la página como freeblock hasta que una fila nueva necesita ese espacio. Así es como una vista previa de chat o una alerta de seguridad descartadas pueden recuperarse horas o días después. Un freeblock también puede fusionarse con el espacio libre contiguo o sobrescribirse en parte, de modo que una fila recuperada puede estar incompleta: trátala como una pista, indica su origen y corrobórala.

Ejemplo

Cabecera de página (página hoja de árbol B de tabla)
  0D      tipo de página 0x0D: página hoja de tabla
  0F 3A   primer freeblock en el desplazamiento 0x0F3A
  00 05   5 celdas activas
  0E 20   el área de contenido de celdas empieza en 0x0E20
  00      0 bytes fragmentados

Freeblock en el desplazamiento 0x0F3A
  00 00   siguiente freeblock: ninguno (último de la cadena)
  01 52   tamaño: 0x152 = 338 bytes
  ...     resto del registro borrado: ... <toast launch="...

El parser indica para una fila tallada de un bloque así el origen free space in page N (espacio libre de la página N).

Términos relacionados

El Windows Notification Parser talla los freeblocks automáticamente; recuperar notificaciones borradas de Windows explica el método y sus límites.