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.
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
| knowledgeC | Biome | |
|---|---|---|
| Conteneur | Une base SQLite par portée (magasin Core Data) | Un dossier par flux, contenant des fichiers SEGB |
| Enregistrement | Une ligne de ZOBJECT avec début et fin | Un enregistrement avec un état, des horodatages, un CRC et une charge utile protobuf |
| Noms des flux | Des chemins, par exemple /app/inFocus | Des noms pointés, par exemple App.InFocus |
| Heure | Temps absolu Mac, UTC | Temps absolu Mac en doubles dans les enregistrements |
| Décalage local | ZSECONDSFROMGMT pour chaque ligne | Absent des champs décodés publiquement |
| Autres appareils | Lignes d'autres appareils, distinguées par ZSOURCE.ZDEVICEID | Dossiers remote/<device UUID>/ distincts |
| Suppression | Lignes supprimées ; voir le WAL pour les suppressions récentes | Enregistrements marqués supprimés (état 3), les données peuvent subsister ; fichiers expirés dans tombstone/ |
| Décodage | Colonnes documentées, assez stables pour le SQL | Champs 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 knowledgeC | Flux Biome | Remarques |
|---|---|---|---|
| App au premier plan | /app/inFocus | App.InFocus | Biome : statut 1 entrée / 0 sortie, bundle ID, chaînes de version |
| App utilisée | /app/usage | ScreenTime.AppUsage | Biome : statut et bundle ID |
| Usage web par app | /app/webUsage | App.WebUsage | Biome : URL, domaine, bundle ID |
| Safari | /safari/history | Safari.* | Biome : domaine |
| Notifications | /notification/usage | Notification.Usage | Biome : app, titre, sous-titre |
| Verrouillage, rétroéclairage, alimentation | /device/isLocked, /display/isBacklit, /device/isPluggedIn | aucun dans la liste décodée | À lire dans knowledgeC |
| Wi-Fi | aucun | Device.Wireless.WiFi | SSID et statut de connexion / déconnexion |
| Bluetooth | aucun | Device.Wireless.Bluetooth | Adresse, nom, identifiant produit, statut |
| Recherche dans Réglages Système | aucun | SystemSettings.SearchTerms | Terme saisi |
| Éléments de menu sélectionnés | aucun | App.MenuItem | Documenté 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.
| Version | Ce que l'on sait |
|---|---|
| macOS 10.15 Catalina | Biome apparaît comme un sous-système distinct, selon une source unique (Howard Oakley) |
| macOS 12 Monterey et suivants | Biome 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 Tahoe | Nouveaux 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/inFocusclairsemé sur un Mac récent est attendu. Vérifiez Biome, et vérifiez queknowledgeC.db-wala é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/usageet un intervalle BiomeApp.InFocuspour 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 autreZDEVICEIDproviennent 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
- Collectez les deux sources avec leurs fichiers compagnons : le
-walet le-shmde knowledgeC, et les dossiersrestricted/,public/,remote/ettombstone/de Biome. La méthode est décrite dans knowledgeC.db : emplacement et collecte des flux Biome. - 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.
- Séparez le local du distant avant de trier.
- 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.