FeatureUsage, RecentApps et éléments épinglés à la barre des tâches¶
De quoi s'agit-il¶
L'Explorateur conserve, dans le NTUSER.DAT de l'utilisateur, plusieurs enregistrements de la manière dont celui-ci utilise les applications :
- FeatureUsage (Windows 10 et versions ultérieures) : des compteurs par application, selon le type d'utilisation.
AppSwitched: nombre de fois où l'utilisateur est passé à la fenêtre de l'application (clic dans la barre des tâches, Alt+Tab).AppLaunch: nombre de fois où elle a été démarrée depuis la barre des tâches (un élément épinglé).ShowJumpView: nombre de fois où sa jump list a été ouverte (clic droit dans la barre des tâches).AppBadgeUpdated: nombre de fois où son badge dans la barre des tâches (un compteur de non-lus) a changé.TrayButtonClicked: nombre de fois où chaque bouton de la barre des tâches (StartButton,SearchButton,TaskViewButton,ClockButton, …) a été cliqué.
Une application est un ID de modèle utilisateur d'application (Microsoft.Windows.Explorer,
Microsoft.WindowsCalculator_8wekyb3d8bbwe!App), un chemin dont la première partie peut être le GUID
d'un dossier connu ({1AC14E77-…}\cmd.exe correspond à %windir%\system32\cmd.exe), ou un ID de processus
(*PID00001d74) pour les fenêtres que l'Explorateur n'a pas pu rattacher à une application.
- RecentApps (de Windows 10 jusqu'à la version 1709) : les applications qu'un utilisateur a exécutées récemment, avec un nombre
de lancements et la dernière heure ; sous chacune, les fichiers qu'elle a ouverts (RecentItems).
- Éléments épinglés à la barre des tâches (Taskband) : les programmes épinglés à la barre des tâches, sous forme d'éléments du shell
(Favorites) et sous forme du lien de chaque raccourci épinglé (FavoritesResolve). Sous Windows 10 et
versions ultérieures, chaque élément épinglé indique s'il l'a été par Windows (SystemPinned) ou par l'utilisateur (UserPinned).
- ProgramsCache (StartPage, StartPage2 ; de Windows XP à 7) : les programmes mis en cache du menu Démarrer
(ProgramsCache) et, sous Windows 7, les programmes épinglés au menu Démarrer et à la barre des tâches
(ProgramsCacheSMP, ProgramsCacheTBP).
Meilleure conclusion : cet utilisateur a utilisé cette application ce nombre de fois de cette manière (FeatureUsage), l'a exécutée à cette heure (RecentApps) ou l'a épinglée. Les compteurs n'ont pas d'heure propre ; seules la dernière écriture de la clé et les heures de RecentApps permettent de dater quoi que ce soit.
Emplacement¶
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows\CurrentVersion\Explorer\FeatureUsage\<kind> value: application, data: count
Software\Microsoft\Windows\CurrentVersion\Search\RecentApps\{GUID} AppId, AppPath, LaunchCount, LastAccessedTime
Software\Microsoft\Windows\CurrentVersion\Search\RecentApps\{GUID}\RecentItems\{GUID} DisplayName, Path, LastAccessedTime
Software\Microsoft\Windows\CurrentVersion\Explorer\Taskband Favorites, FavoritesResolve
Software\Microsoft\Windows\CurrentVersion\Explorer\StartPage2 ProgramsCache, ProgramsCacheSMP, ProgramsCacheTBP
Software\Microsoft\Windows\CurrentVersion\Explorer\StartPage ProgramsCache (Windows XP, Vista)
Le KeyCreationTime de FeatureUsage correspond au début du comptage ; la synthèse l'affiche. Collectez
NTUSER.DAT avec ses journaux de transactions pour chaque profil, ainsi que les ruches système SYSTEM et
SOFTWARE pour l'hôte et le SID de l'utilisateur.
Précautions d'analyse¶
- Des compteurs sans heures. Un compteur FeatureUsage indique une fréquence, et non un moment. L'heure de dernière écriture de la clé
du type (
KeyLastWrittenUTC) correspond à la modification la plus récente de l'un quelconque de ses compteurs. - Pas chaque exécution.
AppSwitchedcompte les changements de fenêtre, et non les démarrages ; une application exécutée sans fenêtre, ou vers laquelle l'utilisateur n'a jamais basculé, n'est pas comptée.AppLaunchne compte que les démarrages depuis la barre des tâches. - Applications empaquetées et chemins. Une application est nommée selon la façon dont Windows a regroupé ses fenêtres : l'ID
d'une application empaquetée, un ID qu'un programme s'est attribué lui-même (
Chrome,VMware.Workstation.vmui) ou un chemin.AppPathdonne le chemin dans lequel le GUID d'un dossier connu est remplacé par le chemin par défaut de ce dossier. - Éléments épinglés par défaut. Les nouveaux profils reçoivent des éléments épinglés par défaut (Explorateur de fichiers, Edge, le Store) ; sous Windows 10
et versions ultérieures, ils indiquent
SystemPinned. Un élémentUserPinnedrelève du choix de l'utilisateur. - Des éléments épinglés dans deux listes.
FavoritesetFavoritesResolvedécrivent les mêmes éléments épinglés dans le même ordre (Index), mais ils sont fournis sous forme d'enregistrements distincts. - Les chemins de ProgramsCache sont relatifs : un dossier (
Programs\Accessories) est suivi des raccourcis qu'il contient (Notepad.lnk). - Valeurs endommagées. Un compteur qui n'est pas un
REG_DWORD, une heure qui n'est pas unREG_QWORD, un élément épinglé non interprétable ou un lien qui n'en est pas un conserve ses octets (DataRaw) et est signalé dansProblems.
Analyser avec Juntei¶
Usage: juntei parse-registry feature-usage <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find NTUSER.DAT hives
-f, --file <FILE> Parse one NTUSER.DAT
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry feature-usage -d evidence/ -o featureusage.csv
juntei parse-registry feature-usage -f NTUSER.DAT -t jsonl \
| jq 'select(.Source == "AppSwitched") | [.Count, .AppPath // .App]'
La synthèse liste les enregistrements par source, le moment où FeatureUsage a commencé à compter dans chaque ruche, les applications vers lesquelles l'utilisateur a le plus basculé, les applications et éléments récents (du plus récent au plus ancien) et les éléments épinglés à la barre des tâches.
Champs de sortie¶
| Champ | Interprétation |
|---|---|
Host, User, UserSID, SourcePath |
Hôte, nom du dossier de profil, SID de l'utilisateur issu de ProfileList du système, et ruche. |
Source |
AppSwitched, AppLaunch, ShowJumpView, AppBadgeUpdated, TrayButtonClicked (FeatureUsage), RecentApps, RecentItems, Taskband ou ProgramsCache. |
App |
Nom d'une valeur FeatureUsage, AppId d'une application récente, ou ID de modèle utilisateur d'application d'un élément épinglé. |
AppPath |
App sous forme de chemin, le GUID d'un dossier connu étant remplacé par son chemin par défaut ; vide pour les ID. |
Count |
Un compteur FeatureUsage, ou le LaunchCount d'une application récente. |
LastAccessedUTC |
LastAccessedTime d'une application ou d'un élément récent. |
ItemPath |
Path d'un élément récent (ou AppPath d'une application récente) ; chemin d'élément du shell d'un élément épinglé ou d'un programme mis en cache (User Pinned\TaskBar\File Explorer.lnk, Applications\<app ID>) ; chemin d'un lien FavoritesResolve. |
DisplayName |
DisplayName d'un élément récent. |
PinType |
SystemPinned ou UserPinned, pour un élément épinglé Favorites. |
Index |
Position d'un élément épinglé ou d'un programme mis en cache dans sa liste. |
ValueName, KeyPath, KeyLastWrittenUTC |
Valeur et clé de provenance, et dernière écriture de la clé. |
DataRaw |
Octets (hexadécimal) qui ne se décodent pas. |
TransactionLogStatus, LogsApplied |
Contexte de récupération du Registre. |
Problems |
Valeurs de type incorrect, éléments épinglés ou listes non interprétables, liens qui n'en sont pas. |
Stratégie d'investigation¶
- Triez
AppSwitchedparCountpour identifier les applications dans lesquelles un utilisateur a le plus travaillé, et recherchez des outils d'administration, d'accès à distance, d'archivage et de transfert, ainsi que des chemins situés dans des emplacements accessibles en écriture par l'utilisateur (\Users\,Downloads,Temp). - Vérifiez les éléments épinglés : un outil
UserPinned, ou un élément épinglé dont le raccourci se trouve dans un emplacement inhabituel. - Utilisez les heures de RecentApps, avec UserAssist, Prefetch, BAM et les Jump Lists, pour dater l'utilisation.
- Comparez
KeyCreationTimeavec la création du profil : les compteurs démarrent à ce moment-là. - Utilisez
parse-registry read --recover-deletedpour les compteurs et éléments épinglés supprimés.