Skip to content

knowledgeC ou Biome : où macOS enregistre l'usage des apps

knowledgeC.db ou Biome ? Les différences entre ces deux sources d'activité macOS, la correspondance de leurs flux et ce qu'on trouve sur les versions récentes.

Publié le 7 min de lecture

En bref. macOS conserve l'activité à deux endroits. knowledgeC.db est une base SQLite avec une ligne par intervalle d'événement ; Biome est une arborescence de dossiers de flux contenant des fichiers SEGB d'enregistrements protobuf. Sur les versions actuelles, l'app au premier plan est attendue dans App.InFocus côté Biome, et non dans /app/inFocus côté knowledgeC, tandis que des états comme le verrouillage et le rétroéclairage se lisent toujours dans knowledgeC. Collectez et examinez les deux sur chaque dossier, tenez à part les enregistrements synchronisés depuis d'autres appareils, et interprétez un flux vide comme « non enregistré ici », pas comme un effacement.

Si vous découvrez la base elle-même, commencez par le guide d'analyse forensique de knowledgeC.db.

Deux sources, deux conceptions

knowledgeCBiome
ConteneurUne base SQLite par portée (magasin Core Data)Un dossier par flux, contenant des fichiers SEGB
EnregistrementUne ligne de ZOBJECT avec début et finUn enregistrement avec un état, des horodatages, un CRC et une charge utile protobuf
Noms des fluxDes chemins, par exemple /app/inFocusDes noms pointés, par exemple App.InFocus
HeureTemps absolu Mac, UTCTemps absolu Mac en doubles dans les enregistrements
Décalage localZSECONDSFROMGMT pour chaque ligneAbsent des champs décodés publiquement
Autres appareilsLignes d'autres appareils, distinguées par ZSOURCE.ZDEVICEIDDossiers remote/<device UUID>/ distincts
SuppressionLignes supprimées ; voir le WAL pour les suppressions récentesEnregistrements marqués supprimés (état 3), les données peuvent subsister ; fichiers expirés dans tombstone/
DécodageColonnes documentées, assez stables pour le SQLChamps de la charge utile issus de la rétro-ingénierie communautaire

Conséquence pratique : les deux sources exigent des habitudes différentes. knowledgeC s'interroge en SQL sur une copie, et le -wal doit l'accompagner. Biome demande un parseur SEGB, puis un décodeur protobuf propre à chaque flux, et les champs qu'aucun décodeur public ne couvre restent inconnus. La structure octet par octet est décrite dans le format de fichier Biome SEGB.

Intervalles contre transitions

Une ligne knowledgeC est déjà un intervalle : de ZSTARTDATE à ZENDDATE. Un enregistrement Biome App.InFocus est une transition : une app est passée au premier plan (statut 1) ou l'a quitté (statut 0) à un instant donné. Pour obtenir des durées, un parseur doit associer chaque enregistrement « entrée » à l'enregistrement « sortie » suivant pour la même app.

KnowledgeC Parser réalise cet appariement : un enregistrement de passage au premier plan se termine au prochain enregistrement de sortie du premier plan pour le même bundle ID, du même utilisateur et de la même origine, dans un délai de 24 heures. Une « entrée » sans « sortie » correspondante est affichée sans durée plutôt qu'avec une durée devinée. Gardez-le en tête quand une durée totale au premier plan paraît courte : le dernier intervalle avant un arrêt ou un plantage peut être resté ouvert.

Flux par flux

Le tableau ci-dessous associe les flux qui enregistrent le même type d'activité. C'est une comparaison fonctionnelle à l'usage des analystes, pas une table de migration documentée par Apple ; la signification des champs côté Biome provient du plugin BIOME de mac_apt et d'iLEAPP.

ActivitéFlux knowledgeCFlux BiomeRemarques
App au premier plan/app/inFocusApp.InFocusBiome : statut 1 entrée / 0 sortie, bundle ID, chaînes de version
App utilisée/app/usageScreenTime.AppUsageBiome : statut et bundle ID
Usage web par app/app/webUsageApp.WebUsageBiome : URL, domaine, bundle ID
Safari/safari/historySafari.*Biome : domaine
Notifications/notification/usageNotification.UsageBiome : app, titre, sous-titre
Verrouillage, rétroéclairage, alimentation/device/isLocked, /display/isBacklit, /device/isPluggedInaucun dans la liste décodéeÀ lire dans knowledgeC
Wi-FiaucunDevice.Wireless.WiFiSSID et statut de connexion / déconnexion
BluetoothaucunDevice.Wireless.BluetoothAdresse, nom, identifiant produit, statut
Recherche dans Réglages SystèmeaucunSystemSettings.SearchTermsTerme saisi
Éléments de menu sélectionnésaucunApp.MenuItemDocumenté par Unit 42 sur macOS Tahoe 26 ; pas de description publique des champs

« Aucun dans la liste décodée » signifie que les décodeurs publics ne couvrent pas un tel flux, pas que Biome ne peut pas en contenir un. Listez les dossiers de flux présents sur vos éléments de preuve plutôt que de supposer leurs noms.

Ce qu'il faut attendre selon la version de macOS

La recherche publique ne donne que quelques repères solides, résumés ici sans extrapolation.

VersionCe que l'on sait
macOS 10.15 CatalinaBiome apparaît comme un sous-système distinct, selon une source unique (Howard Oakley)
macOS 12 Monterey et suivantsBiome largement utilisé
macOS 13 à 15 (Ventura, Sonoma, Sequoia)Pas d'inventaire public des flux par version ; sur les versions actuelles, l'app au premier plan est attendue dans App.InFocus et knowledgeC peut être clairsemé
macOS 26 TahoeNouveaux flux comme App.MenuItem (Unit 42)

Le conteneur SEGB lui-même est passé de la v1 à la v2. Sur iOS, la v1 est signalée pour iOS 14 à 16 et la v2 à partir d'iOS 17 ; la limite équivalente sous macOS n'est pas documentée publiquement, et les outils détectent donc la version à partir de l'en-tête du fichier. Dans tout dossier où la version exacte compte, comparez avec des données de test issues du même build.

Erreurs d'interprétation courantes

  • « knowledgeC est vide, donc l'activité a été effacée. » Un /app/inFocus clairsemé sur un Mac récent est attendu. Vérifiez Biome, et vérifiez que knowledgeC.db-wal a été collecté, avant d'en tirer une conclusion.
  • « Les deux sources ne concordent pas, donc l'une est fausse. » Des flux différents enregistrent des choses différentes, avec des déclencheurs différents. Un intervalle knowledgeC /app/usage et un intervalle Biome App.InFocus pour la même app coïncideront rarement à la seconde près. Expliquez l'écart ; ne choisissez pas la version qui vous arrange.
  • « Cet enregistrement vient du Mac. » Les dossiers Biome remote/<device UUID>/ et les lignes knowledgeC portant un autre ZDEVICEID proviennent d'autres appareils du même compte Apple. Un iPhone qui ouvre Plans à 10:12, ce n'est pas le Mac qui ouvre Plans.
  • « Supprimé veut dire que l'utilisateur l'a supprimé. » Les enregistrements Biome à l'état 3 et les fichiers de tombstone/ relèvent du cycle de vie normal. La conservation dans les deux sources se compte en semaines (environ quatre semaines pour knowledgeC selon Sarah Edwards, environ 28 jours pour la plupart des flux Biome d'après les travaux sur iOS). Mesurez l'enregistrement le plus ancien de chaque flux sur vos éléments de preuve.

Travailler avec les deux dans une même chronologie

  1. Collectez les deux sources avec leurs fichiers compagnons : le -wal et le -shm de knowledgeC, et les dossiers restricted/, public/, remote/ et tombstone/ de Biome. La méthode est décrite dans knowledgeC.db : emplacement et collecte des flux Biome.
  2. Convertissez d'abord tout en UTC. knowledgeC vous donne le décalage de l'appareil pour chaque ligne ; pour Biome, prenez le fuseau horaire dans knowledgeC ou dans d'autres artefacts.
  3. Séparez le local du distant avant de trier.
  4. Utilisez les intervalles de verrouillage et de rétroéclairage de knowledgeC comme cadre, et placez-y les enregistrements de premier plan de Biome.

Dans l'exemple synthétique FIN-MBP-03, par exemple, la fenêtre de 10:04 à 10:49 UTC montre le Mac déverrouillé (knowledgeC, /device/isLocked), Terminal, Réglages Système et Finder au premier plan (Biome App.InFocus), et des enregistrements App.MenuItem mentionnant « Full Disk Access » (Accès complet au disque). Des enregistrements Plans et Messages provenant de l'iPhone de Dana se trouvent dans remote/ pendant les mêmes minutes et doivent être exclus de l'activité du Mac. KnowledgeC Parser fusionne les deux sources en une seule chronologie et indique l'origine de chaque ligne. Ce que la chronologie combinée ne peut toujours pas vous dire, c'est qui était assis devant le Mac ; ce raisonnement est traité dans qui était au clavier.

Articles liés

Articles liés

Ce que knowledgeC.db enregistre sous macOS, où il se trouve, comment lire ZOBJECT et ses flux, convertir ses horodatages et ce que ces données ne prouvent pas.
Pas à pas : charger knowledgeC.db, son -wal et les flux SEGB de Biome dans un parseur gratuit, filtrer une période, étudier les sessions et exporter.
Où se trouvent knowledgeC.db et les flux Biome sous macOS, et comment les collecter avec Terminal, UAC, Velociraptor ou une image disque sans perdre le WAL.