knowledgeC vs Biome: dónde guarda macOS el uso de apps
¿knowledgeC.db o Biome? En qué se diferencian los dos almacenes de actividad de macOS, qué flujo de Biome equivale a cada flujo de knowledgeC y qué esperar hoy.
Resumen. macOS guarda la actividad en dos lugares. knowledgeC.db es una base de datos SQLite con una fila por intervalo de evento; Biome es un árbol de carpetas de flujos que contienen archivos SEGB de registros protobuf. En las versiones actuales, el foco de las apps se espera en App.InFocus de Biome, no en /app/inFocus de knowledgeC, mientras que estados como el bloqueo y la retroiluminación se siguen leyendo en knowledgeC. Recolecte y examine ambos en cada caso, mantenga aparte los registros sincronizados desde otros dispositivos y trate un flujo vacío como «no registrado aquí», no como un borrado.
Si la base de datos es nueva para usted, empiece por la guía de análisis forense de knowledgeC.db.
Dos almacenes, dos diseños
| knowledgeC | Biome | |
|---|---|---|
| Contenedor | Una base de datos SQLite por ámbito (almacén de Core Data) | Una carpeta por flujo, con archivos SEGB |
| Registro | Una fila en ZOBJECT con inicio y fin | Un registro con un estado, marcas de tiempo, un CRC y una carga útil protobuf |
| Nombres de flujo | Rutas, por ejemplo /app/inFocus | Nombres con puntos, por ejemplo App.InFocus |
| Hora | Mac absolute time, UTC | Valores double en Mac absolute time dentro de los registros |
| Desfase local | ZSECONDSFROMGMT en cada fila | No figura entre los campos decodificados públicamente |
| Otros dispositivos | Filas de otros dispositivos, que se distinguen por ZSOURCE.ZDEVICEID | Carpetas remote/<device UUID>/ separadas |
| Eliminación | Filas eliminadas; consulte el WAL para las eliminaciones recientes | Registros marcados como eliminados (estado 3), los datos pueden permanecer; archivos caducados en tombstone/ |
| Decodificación | Columnas documentadas, lo bastante estables para SQL | Campos de la carga útil obtenidos por ingeniería inversa de la comunidad |
La consecuencia práctica es que los dos almacenes requieren hábitos distintos. knowledgeC se consulta con SQL sobre una copia, y el -wal debe acompañarla. Biome necesita un parser de SEGB y después un decodificador protobuf por flujo, y los campos que ningún decodificador público cubre siguen siendo desconocidos. La disposición de los bytes se describe en el formato de archivo SEGB de Biome.
Intervalos frente a transiciones
Una fila de knowledgeC ya es un intervalo: de ZSTARTDATE a ZENDDATE. Un registro App.InFocus de Biome es una transición: una app pasó a primer plano (estado 1) o dejó de estarlo (estado 0) en un momento dado. Para obtener duraciones, un parser debe emparejar cada registro de entrada con el siguiente registro de salida de la misma app.
KnowledgeC Parser hace este emparejamiento: un registro de entrada en primer plano termina en el siguiente registro de salida del mismo bundle ID, del mismo usuario y del mismo origen, en un plazo de 24 horas. Una entrada sin salida correspondiente se muestra sin duración en lugar de con una duración supuesta. Téngalo en cuenta cuando un tiempo total en primer plano parezca corto: el último intervalo antes de un apagado o de un fallo puede quedar abierto.
Flujo por flujo
La tabla siguiente empareja flujos que registran el mismo tipo de actividad. Es una comparación funcional para analistas, no un mapa de migración documentado por Apple; el significado de los campos del lado de Biome procede del plugin BIOME de mac_apt y de iLEAPP.
| Actividad | Flujo de knowledgeC | Flujo de Biome | Notas |
|---|---|---|---|
| App en primer plano | /app/inFocus | App.InFocus | Biome: estado 1 entrada / 0 salida, bundle ID, cadenas de versión |
| App en uso | /app/usage | ScreenTime.AppUsage | Biome: estado y bundle ID |
| Uso web por app | /app/webUsage | App.WebUsage | Biome: URL, dominio, bundle ID |
| Safari | /safari/history | Safari.* | Biome: dominio |
| Notificaciones | /notification/usage | Notification.Usage | Biome: app, título, subtítulo |
| Bloqueo, retroiluminación, alimentación | /device/isLocked, /display/isBacklit, /device/isPluggedIn | ninguno en la lista decodificada | Léalos en knowledgeC |
| Wi-Fi | ninguno | Device.Wireless.WiFi | SSID y estado de conexión / desconexión |
| Bluetooth | ninguno | Device.Wireless.Bluetooth | Dirección, nombre, ID de producto, estado |
| Búsqueda en Ajustes del Sistema | ninguno | SystemSettings.SearchTerms | Término escrito |
| Elementos de menú seleccionados | ninguno | App.MenuItem | Documentado por Unit 42 en macOS Tahoe 26; sin mapa público de campos |
«Ninguno en la lista decodificada» significa que los decodificadores públicos no cubren ese flujo, no que Biome no pueda contener uno. Liste las carpetas de flujos de su evidencia en lugar de dar por supuestos los nombres.
Qué esperar en cada versión de macOS
La investigación pública ofrece solo unos pocos puntos de referencia firmes, que se resumen aquí sin extrapolar.
| Versión | Qué se sabe |
|---|---|
| macOS 10.15 Catalina | Biome aparece como subsistema propio, según una única fuente (Howard Oakley) |
| macOS 12 Monterey y posteriores | Biome se usa ampliamente |
| macOS 13 a 15 (Ventura, Sonoma, Sequoia) | No hay un inventario público de flujos por versión; en las versiones actuales el foco de las apps se espera en App.InFocus y knowledgeC puede estar poco poblado |
| macOS 26 Tahoe | Nuevos flujos como App.MenuItem (Unit 42) |
El propio contenedor SEGB cambió de v1 a v2. En iOS, v1 se describe para iOS 14 a 16 y v2 a partir de iOS 17; el límite equivalente en macOS no está documentado públicamente, así que las herramientas detectan la versión a partir de la cabecera del archivo. En cualquier caso en que importe la versión exacta, compare con datos de prueba de la misma compilación.
Interpretaciones erróneas habituales
- «knowledgeC está vacío, así que se borró la actividad». Un
/app/inFocusescaso en un Mac reciente es lo esperado. Compruebe Biome, y compruebe que se recolectóknowledgeC.db-wal, antes de sacar ninguna conclusión. - «Las dos fuentes no coinciden, así que una está mal». Flujos distintos registran cosas distintas con desencadenantes distintos. Un intervalo
/app/usagede knowledgeC y un intervaloApp.InFocusde Biome para la misma app rara vez coincidirán al segundo. Explique la diferencia; no elija la más conveniente. - «Este registro procede del Mac». Las carpetas
remote/<device UUID>/de Biome y las filas de knowledgeC con otroZDEVICEIDproceden de otros dispositivos con la misma Cuenta de Apple. Un iPhone que abre Mapas a las 10:12 no es el Mac abriendo Mapas. - «Eliminado significa que el usuario lo eliminó». Los registros de Biome en estado 3 y los archivos de
tombstone/son artefactos normales del ciclo de vida. La retención en ambos almacenes se mide en semanas (unas cuatro semanas para knowledgeC según Sarah Edwards, unos 28 días para la mayoría de los flujos de Biome según la investigación sobre iOS). Mida el registro más antiguo de cada flujo en su evidencia.
Trabajar con ambos en una sola cronología
- Recolecte ambos almacenes con sus archivos complementarios: el
-waly el-shmde knowledgeC, y las carpetasrestricted/,public/,remote/ytombstone/de Biome. Cómo hacerlo se explica en knowledgeC.db: ubicación y adquisición. - Convierta primero todo a UTC. knowledgeC le da el desfase del dispositivo en cada fila; para Biome, tome la zona horaria de knowledgeC o de otros artefactos.
- Separe lo local de lo remoto antes de ordenar.
- Use los intervalos de bloqueo y retroiluminación de knowledgeC como marco, y los registros de foco de Biome dentro de él.
En el ejemplo sintético FIN-MBP-03, por ejemplo, la ventana de 10:04 a 10:49 UTC muestra el Mac desbloqueado (knowledgeC, /device/isLocked), Terminal, Ajustes del Sistema y Finder en primer plano (App.InFocus de Biome) y registros App.MenuItem que mencionan «Full Disk Access» («Acceso total al disco»). Los registros de Mapas y Mensajes del iPhone de Dana están en remote/ durante esos mismos minutos y deben excluirse de la actividad del Mac. KnowledgeC Parser combina ambos almacenes en una sola cronología y marca el origen de cada fila. Lo que la cronología combinada sigue sin poder decirle es quién estaba sentado delante del Mac; ese razonamiento se trata en quién estaba ante el teclado.