Actividad del usuarioEjecución
knowledgeC.db: uso de apps y actividad del Mac
Base de datos SQLite de CoreDuet que registra uso de apps, foco, pantalla y alimentación en macOS: muestra cuándo y cuánto tiempo se usó cada app.
- Ubicación
- /private/var/db/CoreDuet/Knowledge/knowledgeC.db
- Prueba
- Qué apps estaban en uso, cuándo y durante cuánto tiempo, y si la pantalla estaba encendida en ese momento
- Marcas de tiempo
- Mac absolute time (segundos desde 2001-01-01 UTC), más el desfase ZSECONDSFROMGMT
- Acceso
- root más las restricciones de SIP (BD del sistema); Full Disk Access (BD del usuario)
- Retención
- Unas cuatro semanas de eventos en sistemas típicos (varía según el flujo)
- Adquisición
- UAC, Disk image, cp
Herramientas
Comparar todas las herramientas- KnowledgeC ParserNavegador
- APOLLOCLI · código abierto
- PlasoCLI · código abierto
- sqlite3CLI · incluido en macOS
Qué es
knowledgeC.db es una base de datos SQLite escrita por el framework CoreDuet de Apple. Registra eventos de "patrón de vida" como intervalos: una aplicación en uso, la pantalla encendida, el Mac conectado a la corriente, un dominio web visitado y más. Cada evento pertenece a un flujo con nombre, como /app/usage, y lleva una hora de inicio y otra de fin, por eso responde a preguntas de duración que las marcas de tiempo del sistema de archivos no pueden resolver.
La base de datos es un almacén de Core Data, así que tablas y columnas llevan el prefijo Z. En las versiones recientes de macOS, Apple ha trasladado muchos flujos a Biome, de modo que un knowledgeC.db moderno puede estar casi vacío. Examina siempre los dos.
Dónde se encuentra
| Ámbito | Ruta | Protección |
|---|---|---|
| Sistema | /private/var/db/CoreDuet/Knowledge/knowledgeC.db | Pertenece a root, restringido por SIP. UAC documenta que solo recopila este archivo en vivo cuando SIP está desactivado |
| Usuario | ~/Library/Application Support/Knowledge/knowledgeC.db | Protegido por TCC: el proceso de adquisición necesita Full Disk Access |
Ambas bases de datos funcionan en modo WAL. Recopila knowledgeC.db-wal y knowledgeC.db-shm junto con el archivo principal: los eventos más recientes a menudo solo están en el WAL.
Qué prueba
- Qué bundle IDs estaban en uso (
/app/usage) o en primer plano (/app/inFocus) y durante cuántos segundos. - Cuándo estaba encendida la pantalla (
/display/isBacklit) y cuándo estaba el Mac conectado a la corriente (/device/isPluggedIn). - Uso web y multimedia por app (
/app/webUsage,/app/mediaUsage) y entradas del historial de Safari (/safari/history) cuando esos flujos existen. - Actividad de otros dispositivos con la misma Apple Account, cuando hay filas sincronizadas (ver consejos).
No prueba que una persona concreta estuviera ante el teclado, y no registra nombres de archivo ni líneas de comandos. Una app "en uso" puede ser una ventana abierta delante de una pantalla inactiva.
Campos clave
Tabla principal ZOBJECT (una fila por evento):
| Columna | Significado |
|---|---|
ZSTREAMNAME | Flujo, p. ej. /app/usage, /display/isBacklit |
ZVALUESTRING | Valor de texto principal, normalmente un bundle ID o una URL |
ZVALUEINTEGER / ZVALUEDOUBLE | Valor numérico para flujos booleanos o de medida (1 = activo) |
ZSTARTDATE / ZENDDATE | Inicio y fin del intervalo |
ZCREATIONDATE | Momento en que se escribió la fila |
ZSECONDSFROMGMT | Desfase UTC del dispositivo en segundos en el momento del evento |
ZSTARTDAYOFWEEK | Día de la semana, 1 = domingo |
ZUUID | UUID del evento |
ZSOURCE | Clave foránea a ZSOURCE.Z_PK |
ZSTRUCTUREDMETADATA | Clave foránea a ZSTRUCTUREDMETADATA.Z_PK |
ZSOURCE describe al productor; APOLLO interpreta ZSOURCE.ZDEVICEID como el UUID de hardware del dispositivo de origen. ZSTRUCTUREDMETADATA contiene columnas adicionales específicas de cada flujo que varían según la versión.
Los flujos que cubren los módulos de APOLLO para macOS incluyen /app/usage, /app/inFocus, /app/activity, /app/intents, /app/webUsage, /app/mediaUsage, /safari/history, /display/isBacklit, /device/isPluggedIn, /device/isLocked y /bluetooth/isConnected. No todos los Mac tienen todos los flujos.
Marcas de tiempo
ZSTARTDATE, ZENDDATE y ZCREATIONDATE están en Mac absolute time: segundos (a menudo con decimales) desde 2001-01-01 00:00:00 UTC. Suma 978307200 para obtener segundos Unix. Los valores almacenados están en UTC; ZSECONDSFROMGMT indica el desfase local que usaba el dispositivo.
SELECT datetime(ZSTARTDATE + 978307200, 'unixepoch') AS start_utc,
datetime(ZSTARTDATE + ZSECONDSFROMGMT + 978307200, 'unixepoch') AS start_local
FROM ZOBJECT LIMIT 5;
date -u -r $((694224000 + 978307200)) # macOS date: Mac absolute 694224000 -> UTC
Retención
Sarah Edwards (mac4n6) documentó aproximadamente cuatro semanas de eventos en ZOBJECT. La depuración se hace por flujo y depende de la versión, así que mídela sobre la evidencia: el ZSTARTDATE más antiguo de cada flujo es la ventana de retención efectiva y debe figurar en tu informe.
Adquisición
En vivo, con Full Disk Access concedido a Terminal o a la herramienta de adquisición:
mkdir -p case/knowledgec_user
cp -p ~/Library/Application\ Support/Knowledge/knowledgeC.db* case/knowledgec_user/
shasum -a 256 case/knowledgec_user/*
- UAC tiene un artefacto
knowledgecpara ambas rutas, pero solo recopilaknowledgeC.db, sin los archivos-waly-shm; sus propias notas indican que la copia del sistema solo se recopila con SIP desactivado. No desactives SIP para obtenerla: es preferible una imagen completa del disco o del volumen Data y extraer de ella/private/var/db/CoreDuet/Knowledge/. - mac_apt puede exportar archivos desde una imagen; abre la copia, nunca el original, porque abrir una base de datos WAL en su sitio puede hacer un checkpoint y modificarla.
Análisis
- APOLLO ejecuta módulos SQL (
knowledge_app_usage,knowledge_app_inFocus,knowledge_device_is_backlit, etc.) y los fusiona en una línea de tiempo:
python3 apollo.py extract -o csv -p apple -v yolo -k modules/ case/knowledgec_user/
- Plaso incluye el plugin SQLite
mac_knowledgec(--parsers sqlite/mac_knowledgec). - SQL directo: primero enumera los flujos y después consulta:
SELECT ZSTREAMNAME, COUNT(*),
datetime(MIN(ZSTARTDATE)+978307200,'unixepoch') AS first_utc,
datetime(MAX(ZSTARTDATE)+978307200,'unixepoch') AS last_utc
FROM ZOBJECT GROUP BY ZSTREAMNAME ORDER BY 2 DESC;
SELECT datetime(o.ZSTARTDATE+978307200,'unixepoch') AS start_utc,
o.ZENDDATE - o.ZSTARTDATE AS seconds,
o.ZVALUESTRING AS bundle_id,
s.ZDEVICEID AS device_id
FROM ZOBJECT o LEFT JOIN ZSOURCE s ON o.ZSOURCE = s.Z_PK
WHERE o.ZSTREAMNAME = '/app/usage'
ORDER BY o.ZSTARTDATE;
KnowledgeC Parser lee en el navegador knowledgeC.db con su -wal aplicado (señala las filas que solo existen en el WAL) y los flujos Biome SEGB, con sesiones, totales por app y exportación CSV o Timesketch; no se sube nada.
Consejos para la investigación
- Revisa
.schema ZOBJECTy.schema ZSOURCEantes de lanzar consultas predefinidas; las columnas cambian entre versiones. - Un
/app/inFocusescaso o vacío en un Mac reciente es lo esperado, no una prueba de borrado. Busca en Biome (App.InFocus) antes de sacar conclusiones. Consulta knowledgeC and Biome. - Agrupa los eventos por
ZSOURCE.ZDEVICEID: las filas sincronizadas desde un iPhone u otro Mac con la misma cuenta no deben atribuirse al equipo examinado. - Cruza los intervalos de apps con
/display/isBacklity con los inicios de sesión de los Unified Logs: una app en primer plano con la pantalla apagada es una prueba débil de uso. - La falta de los archivos
-wales la causa más habitual de "no hay actividad reciente". Indica en tu informe si se recopilaron. - Un
ZSECONDSFROMGMTque cambia entre eventos es un indicador útil de viaje o de cambio de zona horaria. - Correlaciona con los totales de uso de Screen Time y con el historial de notificaciones.
Ver también
Artefactos relacionados
Guías detalladas
Glosario
- knowledgeC.dbInglés
- Mac Absolute TimeInglés
- BiomeInglés
- TCC (Transparency, Consent, and Control)Inglés