Qué lee esta herramienta
knowledgeC.db es la base de datos SQLite del framework CoreDuet de Apple. Registra intervalos de «pattern of life»: una app en uso o en primer plano, la pantalla encendida o bloqueada, el Mac conectado a la corriente, los dominios web visitados, las notificaciones. Cada fila de ZOBJECT pertenece a un stream como /app/usage y lleva un inicio, un fin y un desfase UTC; por eso responde a preguntas de «cuánto tiempo» y «cuándo» que las marcas de tiempo del sistema de archivos no pueden responder.
En las versiones recientes de macOS, muchos de estos streams pasaron a Biome, que guarda cada stream como archivos SEGB con registros protobuf. KnowledgeC Parser lee ambos en tu navegador: las bases de datos con su write-ahead log aplicado, y los contenedores SEGB v1 y v2 con un decodificador para los streams documentados y una vista protobuf genérica para los demás.
Artefactos y estructuras
- knowledgeC.db (sistema: /private/var/db/CoreDuet/Knowledge/; usuario: ~/Library/Application Support/Knowledge/; iOS: /private/var/mobile/Library/CoreDuet/Knowledge/): ZOBJECT unido con ZSOURCE (bundle e ID de dispositivo) y con todas las columnas de ZSTRUCTUREDMETADATA, sea cual sea la versión.
- knowledgeC.db-wal: se aplican los frames confirmados (con verificación de checksums y salts); se marcan las filas que solo están en el WAL y las que este elimina.
- Biome SEGB v1 (cabecera de 56 bytes, cabeceras de registro de 32 bytes) y v2 (cabecera de 32 bytes, índice final), estados de registro (escrito, eliminado, vacío) y CRC32.
- Streams de Biome decodificados: App.InFocus, App.WebUsage, Safari.*, ScreenTime.AppUsage, Notification.Usage, Device.Wireless.WiFi y Bluetooth, SystemSettings.SearchTerms, Device.Metadata, retroiluminación; cualquier otro stream por número de campo protobuf.
- El tiempo absoluto de Mac (segundos desde el 2001-01-01 UTC) se convierte a UTC; ZSECONDSFROMGMT da la hora local del dispositivo.
Qué preguntas responde
- Qué apps estaban en primer plano o en uso, cuándo y durante cuánto tiempo, incluidas las usadas por primera vez.
- Cuándo el Mac estaba desbloqueado, con la pantalla encendida y conectado a la corriente: las sesiones en las que alguien pudo estar al teclado.
- Qué dominios y páginas web se visitaron y desde qué app, incluidos los registros de Biome eliminados que siguen siendo legibles.
- Qué filas proceden solo del WAL y qué filas o registros proceden de otros dispositivos de la misma cuenta de Apple.
- Hallazgos para el triaje: actividad en la ventana del incidente, uso de Terminal, apps nuevas, sitios para compartir archivos, desbloqueos nocturnos, archivos -wal que faltan.
Limitaciones
- Los datos muestran que el Mac estaba en uso, no quién lo usaba, y no registran nombres de archivo ni comandos.
- El significado del contenido de Biome procede de la investigación de la comunidad (mac_apt, iLEAPP); los campos no decodificados se muestran en bruto. Valídalo con datos de prueba de la misma build del sistema.
- No se hace carving de las páginas de la freelist, de generaciones antiguas del WAL ni del espacio no asignado: las filas eliminadas solo se recuperan cuando el WAL aún las muestra.
- La disponibilidad de columnas y streams varía entre versiones de macOS e iOS; que falte un stream no es prueba de borrado.
- Las colecciones muy grandes (cientos de miles de eventos) son compatibles, pero ralentizan el navegador; la tabla muestra los eventos página a página.
Cómo obtener los archivos
- Concede a Terminal Acceso total al disco y copia ~/Library/Application Support/Knowledge/knowledgeC.db* y ~/Library/Biome conservando la estructura (consulta «Cómo obtener tus datos» más arriba).
- Para la base de datos del sistema y /private/var/db/biome, es preferible una imagen del disco o del volumen Data antes que desactivar SIP.
- UAC (artefactos knowledgec y biome) y Velociraptor (MacOS.Search.FileFinder con upload) los recopilan a escala; añade los archivos -wal que UAC omite.
Preguntas frecuentes
¿Se suben mis archivos?
No. El parser está escrito en Rust compilado a WebAssembly y se ejecuta en un Web Worker de tu navegador. Los archivos se leen localmente y no se envía nada a ningún servidor.
¿Por qué necesito el archivo -wal?
knowledgeC.db funciona en modo WAL: las filas nuevas se escriben primero en knowledgeC.db-wal y más tarde se copian al archivo principal. Sin el -wal, suelen faltar las últimas horas o días de eventos. La herramienta marca cada fila que solo existe en el WAL.
Mi knowledgeC.db no tiene filas /app/inFocus. ¿Lo han borrado?
Probablemente no. En las versiones actuales de macOS, el primer plano de las apps se registra sobre todo en Biome (App.InFocus). Carga también ~/Library/Biome y consulta en la pestaña Fuentes el evento más antiguo de cada stream.
¿Demuestra quién usaba el Mac?
No. Muestra cuándo el Mac estaba desbloqueado, cuándo la pantalla estaba encendida y qué apps estaban en primer plano. La atribución requiere otras pruebas, como registros de inicio de sesión, la actividad de otros dispositivos y declaraciones de testigos.
¿Qué versiones de macOS e iOS son compatibles?
Cualquier knowledgeC.db (las columnas se asocian por nombre, así que se toleran los cambios de esquema entre versiones) y tanto SEGB v1 como v2. Los streams de Biome sin un mapa de campos publicado se muestran con sus campos protobuf en bruto.