Le Guide Ultime de Procmon

Procmon. L’infâme utilitaire de Windows Sysinternals pour traquer toutes sortes d’activités Windows. Connu pour sa capacité à traquer les installateurs de logiciels malveillants effectuant des changements inconnus dans les clés de registre ou peut-être à inspecter les traces d’un virus.

Si vous devez inspecter le registre Windows, le système de fichiers, les processus ou l’activité réseau et que vous avez décidé d’utiliser Procmon, cet article est pour vous.

Dans ce Guide Ultime, vous allez apprendre tout ce qu’il y a à savoir sur l’utilisation de l’utilitaire Procmon, de l’installation à l’utilisation de base, jusqu’aux différents cas d’utilisation qui vous aideront à traquer toutes sortes d’activités.

Prérequis

Ce Guide Ultime s’appliquera à presque tous les systèmes Windows, mais, pour des raisons d’exhaustivité (et pour vous éviter d’essayer d’exécuter Procmon sur un ordinateur Windows 3.1), vous aurez besoin des éléments suivants :

  • A Windows Vista or Windows Server 2008 or higher machine (x86 or x64)

C’est tout ! Vous téléchargerez et installerez Procmon dans les sections suivantes. Le Guide utilisera la version 3.6 de Procmon sur une machine Windows 10 Build 1909 x64.

Téléchargement et exécution de Procmon

Pour commencer, vous devrez exécuter Procmon sur votre machine Windows. Vous pouvez l’obtenir de deux manières différentes : via la méthode de téléchargement traditionnelle ou ce que Windows Sysinternals appelle Sysinternals live.

À l’ancienne

Procmon n’a pas besoin d’être installé ; c’est un exécutable unique. Vous pouvez l’obtenir en téléchargeant le fichier ZIP. Une fois que vous l’avez téléchargé, extrayez le fichier ZIP avec votre outil préféré. Ci-dessous se trouve un extrait de code PowerShell si vous l’avez enregistré dans votre dossier personnel. Cet extrait de code créera un dossier à ~\ProcessMonitor avec tous les fichiers nécessaires.

Expand-Archive -Path '~\ProcessMonitor.zip' -Destination ProcessMonitor

À l’intérieur du dossier ~\ProcessMonitor, vous verrez cinq fichiers :

  • Eula.txt – L’accord de licence que vous devrez accepter avant d’exécuter procmon.
  • procmon.chm – Le fichier d’aide contenant toute la documentation fournie.
  • Procmon.exe – Le principal fichier EXE qui lancera la bonne instance de procmon (x86 ou x64).
  • Procmon64.exe – Le binaire procmon x64.
  • Procmon64a.exe – Le binaire procmon alpha 64.

Maintenant, lancez procmon en invoquant le fichier ~\ProcessMonitor\procmon.exe.

Procmon ne fonctionne qu’avec des permissions élevées, donc vous serez invité à les accepter si vous avez l’UAC activé lorsque vous l’exécutez. Il y a un moyen de contourner cela qui sera abordé plus tard dans ce Guide.

Sysinternals Live

Si vous préférez ne pas (ou ne pouvez pas) télécharger un EXE, vous pouvez également utiliser le dossier Sysinternals Live. Pour ce faire, ouvrez l’Explorateur de fichiers et collez \\live.sysinternals.com\tools. Vous verrez alors un dossier comme n’importe quel partage réseau contenant tous les fichiers Sysinternals, y compris procmon.

Sysinternals Live

Faites défiler jusqu’à trouver procmon, double-cliquez et voilà, vous exécutez procmon!

Personnalisation du comportement de démarrage de Procmon

Par défaut, procmon se lance en vous demandant d’accepter un contrat de licence utilisateur final (CLUF) et ouvre également une fenêtre. En utilisant la ligne de commande, vous pouvez personnaliser ce comportement par défaut.

Par exemple, si vous souhaitez lancer procmon réduit en utilisant l’interrupteur /Minimized.

.\procmon.exe /Minimized

Peut-être que vous exécutez procmon sur une nouvelle machine et préférez ne pas voir la demande d’acceptation du CLUF. Vous pouvez désactiver cela au démarrage en utilisant l’interrupteur /AcceptEula.

.\procmon.exe /AcceptEula

Bien que moins probable de nos jours, chaque fois que vous lancez procmon, il détecte si vous utilisez un système d’exploitation 64 bits ou 32 bits. Si vous êtes sur une machine 64 bits, il lancera un processus 64 bits et vice versa. Si vous êtes sur une machine 64 bits et que vous souhaitez soit exécuter procmon en tant que processus 32 bits, soit lire un fichier journal (plus tard) généré à partir d’une machine 32 bits, utilisez l’interrupteur /Run32.

.\procmon.exe /Run32

Procmon possède d’autres commutateurs de ligne de commande pour personnaliser le comportement, mais vous en apprendrez davantage dans les sections suivantes.

Introduction à Procmon

Lorsque vous lancez Procmon pour la première fois, vous pourriez être submergé par les options. Ne vous inquiétez pas, vous apprendrez presque tout dans ce guide ! Vous pouvez voir ci-dessous une capture typique de Procmon en cours.

Default Procmon process view

Le moment où vous exécutez Procmon, il commence à capturer différents types d’événements Windows.

Si vous ne voulez pas que Procmon commence automatiquement à capturer des événements, vous pouvez le démarrer à partir de la ligne de commande en exécutant procmon.exe /NoConnect.

Comme vous pouvez le voir dans la capture d’écran ci-dessus sous la colonne Opération, il y a diverses icônes représentant chacune différentes classes d’événements Windows. Procmon capture des événements de cinq classes différentes :

  • Registre
  • Système de fichiers
  • Réseau
  • Processus
  • Événements de profilage

Chaque événement dans toutes les classes est représenté dans une seule liste de sept colonnes :

  • Heure de la journée – L’heure à laquelle l’événement s’est produit.
  • Nom du processus – Le nom du processus qui a déclenché l’événement.
  • PID – L’identifiant du processus.
  • Opération – Le type d’événement comme si le processus a ouvert un fichier, changé une valeur de clé de registre, etc.
  • Chemin – Le chemin de l’objet avec lequel l’événement a interagi, comme un chemin de fichier, un chemin de registre, etc.
  • Résultat – Cette colonne contiendra de nombreuses valeurs pour indiquer le résultat de l’événement. Cette valeur peut être aussi simple que SUCCÈS ou spécifique à l’événement, comme REPARSAGE, DÉPASSEMENT DE MÉMOIRE TAMpon, NOM NON TROUVÉ, etc.
  • Détail – Cette colonne contient tous les détails minutieux une fois que vous avez ciblé un événement que vous souhaitez voir.

Si vous préférez ne pas voir une certaine colonne ou si vous souhaitez voir quelles autres colonnes sont disponibles, cliquez avec le bouton droit de la souris sur l’en-tête de n’importe quelle colonne et choisissez Sélectionner des colonnes. Vous serez présenté avec une boîte de dialogue où vous pourrez personnaliser les colonnes visibles.

Customizing procmon columns

Dans la fenêtre d’événement, double-cliquez sur un événement. Vous pouvez trouver beaucoup plus de détails sur le processus et l’événement lui-même en consultant les onglets Événement, Processus, et Pile.

Procmon event properties window

Activation et désactivation des captures

Vous avez un contrôle total sur le processus de capture. Vous pouvez soit désactiver l’ensemble du processus de capture, soit désactiver la capture par classe d’événements.

Sur la barre de menu supérieure, vous verrez une icône de loupe (ci-dessous). Si la loupe a une croix rouge dessus, cela signifie que la capture est désactivée. Sinon, la capture est activée.

Procmon actively capturing events

Ne laissez pas ProcMon capturer des événements plus longtemps que nécessaire. Il utilise la mémoire virtuelle pour stocker tous ces événements et si vous n’êtes pas prudent, vous pourriez finir par faire planter Windows ! Vous pouvez modifier ce comportement, comme vous le verrez un peu plus tard.

Si vous préférez être plus sélectif, vous pouvez également contrôler la capture de chaque classe d’événements. Dans la barre de menu, vous verrez cinq icônes identiques affichées dans la colonne Opération. En cliquant sur ces boutons, vous pouvez activer et désactiver des classes d’événements entières.

Types of Windows events

Passez votre souris sur chaque icône pour voir quel type d’activité chaque icône représente.

Vous verrez dès que vous cliquez sur une icône, procmon applique un filtre d’événements. Selon le nombre d’événements capturés jusqu’à présent, vous pourriez voir une fenêtre contextuelle comme celle ci-dessous.

Types of Windows events

Par défaut, l’icône la plus à droite (le graphique noir et vert) n’est pas activée. Si vous souhaitez activer cette classe d’événements lorsque procmon démarre, vous pouvez invoquer procmon à partir de la ligne de commande en utilisant .\procmon.exe /Profiling.

Vous pouvez voir le nombre d’événements dans la fenêtre en regardant en bas. Comme vous pouvez le voir ci-dessous, procmon a traité 84 334 événements, mais en raison du filtre d’événements appliqué, il n’affiche que 15 912 d’entre eux, soit 18%. Vous pouvez également voir que ces événements sont stockés dans la mémoire virtuelle (plus d’informations à ce sujet ultérieurement).

Number of Events in the Window

Filtres d’événements

Pour comprendre procmon, vous devez sans aucun doute comprendre le concept de filtres d’événements. Les filtres d’événements sont la façon dont vous séparez le signal du bruit. Les filtres d’événements masquent tous les événements qui ne vous intéressent pas. Ci-dessus, vous avez appliqué des filtres d’événements par classes d’événements entières, mais vous pouvez être beaucoup plus granulaire.

Il existe plusieurs façons d’interagir avec les filtres d’événements. Commençons simplement. Cliquez sur l’élément de menu Filtre en haut. Vous verrez de nombreuses options différentes pour travailler avec les filtres.

Filter menu options

Visualisation des filtres

Par défaut, Procmon crée un filtre pour vous. Sous l’élément de menu Filtre, cliquez sur Filtrer…. Vous verrez une boîte de dialogue Filtre du moniteur de processus s’afficher avec deux zones ; une pour filtrer vos règles de filtre et une pour afficher toutes les règles que vous avez configurées. Vous pouvez voir un exemple ci-dessous.

Filter rules

Par défaut, Procmon affichera les filtres ci-dessus chaque fois que vous le lancez. Si vous souhaitez masquer cette boîte, vous pouvez le faire en lançant Procmon avec l’interrupteur /Quiet.

Vous devriez voir que sans créer vos propres filtres, Procmon utilise également un ensemble de règles de filtre intégrées. Si vous faites défiler la boîte de dialogue Filtre du moniteur de processus, vous verrez de nombreux types de règles différents définis. Ici, vous pouvez voir chaque catégorie, opérateur, valeur et action à prendre sur chaque règle.

Ces filtres sont appliqués car vous n’aurez généralement pas besoin de voir les événements exclus par ces filtres. Mais, si vous souhaitez voir tous les événements, vous pouvez également simplement supprimer tous les filtres par défaut ou cliquer sur Filtre —> Activer la sortie avancée comme indiqué ci-dessous.

Enable Advanced Output

Par exemple, vous verrez quelques règles en haut qui indiquent Nom du processus pour la valeur de la colonne Colonne, est pour Relation, divers processus liés à Procmon pour la valeur de la colonne Valeur, et une Action de Exclure. En termes simples, ces règles indiquent à Procmon de ne pas afficher (exclure) un processus portant le nom de procmon.exe, par exemple.

Gestion des règles de filtrage d’événements

En fonction de votre cas d’utilisation, vous devrez sans aucun doute ajouter vos propres règles. Il existe plusieurs façons d’ajouter des règles.

Utilisation de la boîte de filtrage de Process Monitor

Dans la dernière section, vous avez vu à quoi ressemblait la boîte de Filtre de Process Monitor et vous avez affiché toutes les règles. Dans cette boîte, vous pouvez également créer, modifier et supprimer des règles.

Supposons que vous souhaitiez uniquement voir les moments où le processus explorer.exe a interrogé une clé de registre.

Ajout de filtres d’événements

Dans la boîte de Filtre de Process Monitor:

  1. Cliquez sur la liste déroulante la plus à gauche. Cette liste montre toutes les catégories d’événements sur lesquelles vous pouvez filtrer. Vous pouvez voir ci-dessous qu’il y en a beaucoup !

    Chaque élément que vous voyez dans cette liste correspond à une colonne affichée dans l’affichage principal, comme indiqué ci-dessous. Dans le cadre de cet article, choisissez Nom du processus.

Process Monitor Filter

2. Choisissez une catégorie, puis choisissez un opérateur. Par défaut, la boîte déroulante sera is, mais vous avez de nombreuses autres options si vous cliquez sur la liste déroulante. Ces opérateurs vous permettent de filtrer de nombreuses façons différentes l’option que vous avez choisie. Puisque vous recherchez un processus exactement explorer.exe, choisissez is.

Operator List

3. Enfin, choisissez le nom du processus comme indiqué ci-dessous. Vous remarquerez que puisque vous avez choisi Nom du processus comme catégorie, procmon affiche automatiquement tous les processus actuellement en cours d’exécution parmi lesquels vous pouvez choisir.

Process Name in Process Monitor Filter

4. Assurez-vous d’avoir choisi Inclure puisque vous ne voulez voir que les événements correspondant à ce critère. Ensuite, cliquez sur le bouton Ajouter pour ajouter la règle à votre filtre actuel. Vous pouvez voir ci-dessous que la règle Inclure est représentée par une coche verte.

5. Enfin, puisque vous souhaitez tous les événements où explorer.exe interroge une clé de registre, assurez-vous d’inclure également l’opération RegQueryKey. Lorsque vous avez terminé, vous devriez voir les deux règles ajoutées.

RegQueryKey

6. Cliquez sur OK, et vous verrez alors la fenêtre principale supprimer tous les événements qui ne correspondent pas aux règles de filtre que vous venez de définir.

Events that do not match the filter rules

Suppression des règles de filtre d’événements

Vous pouvez également facilement supprimer et modifier les règles de filtre.

  1. Cliquez sur l’icône de filtre en haut de la fenêtre principale pour ouvrir la boîte de dialogue Filtre du Moniteur de processus.
Process Monitor Filter Box

2. Mettez en surbrillance les deux règles de filtrage que vous avez créées ci-dessus, cliquez sur le bouton Supprimer comme indiqué ci-dessous, puis cliquez sur OK. Cette action supprimera les deux règles personnalisées ajoutées précédemment.

remove both of the custom rules added

Vous pouvez également cliquer sur le bouton Réinitialiser pour supprimer automatiquement toutes les règles de filtrage personnalisées.

Chaque fois que vous appliquez un filtre, quittez procmon et redémarrez-le, ce filtre sera appliqué à nouveau. Si vous souhaitez vous assurer qu’aucun filtre n’est appliqué lorsque vous démarrez procmon, vous pouvez invoquer procmon avec l’option /NoFilter.

Ajouter des règles de filtrage avec un clic droit

Vous pouvez également ajouter des règles de filtrage via un menu contextuel en faisant un clic droit sur un processus. Comme vous pouvez le voir ci-dessous, vous pouvez créer n’importe quel type de règle directement à partir de ce menu ; pas besoin d’aller dans la zone Filtre du moniteur de processus du tout !

add filter rules via a right-click menu

Pour supprimer les règles de filtrage créées via le menu clic droit, vous devrez toujours aller dans la zone Filtre du moniteur de processus pour les supprimer.

Enregistrement et gestion des filtres personnalisés

Si vous êtes un utilisateur avancé de procmon, il arrivera probablement un moment où vous aurez des ensembles de règles de filtrage pour différentes occasions. En utilisant les fonctionnalités de sauvegarde et d’organisation des filtres de procmon, vous pouvez gérer et enregistrer autant de ces ensembles que vous le souhaitez.

Supposons que vous ayez plusieurs filtres personnalisés définis et que vous souhaitez les enregistrer pour les utiliser ultérieurement. Vous pouvez enregistrer ce filtre en allant dans Filtre, en choisissant Enregistrer le filtre et en fournissant un nom comme indiqué ci-dessous.

Saving a filter

Une fois que le filtre est enregistré, vous pouvez ensuite aller à Filtre, cliquer sur Organiser les filtres où vous verrez tous les filtres que vous avez enregistrés. À partir de là, vous pouvez cliquer sur un filtre, cliquer sur OK et votre filtre enregistré s’appliquera à la fenêtre actuelle.

Viewing and loading filters

Vous pouvez également charger un filtre enregistré en survolant Charger le filtre dans le menu déroulant Filtre et en choisissant votre filtre enregistré dans la liste à droite.

Loading a filter

Importation et exportation des filtres

Si vous prévoyez de charger Procmon sur un autre ordinateur et de conserver tous vos filtres enregistrés, vous êtes malheureusement hors de chance. Procmon n’a pas de service cloud pour synchroniser les filtres. Cependant, vous pouvez exporter manuellement les filtres et les importer ultérieurement.

Pour exporter les filtres de Procmon :

  1. Allez dans la boîte Organiser les filtres.
  2. Cliquez sur le filtre que vous avez déjà enregistré et que vous souhaitez exporter.
  3. Cliquez sur le bouton Exporter.
  4. Indiquez un nom, choisissez un chemin et cliquez sur OK. Vous verrez que tous les filtres de Procmon sont enregistrés avec une extension PMF.

Pour importer les filtres de Procmon :

  1. Allez dans la boîte Organiser les filtres.
  2. Cliquez sur le bouton Importer.
  3. Trouvez le filtre que vous souhaitez importer et cliquez sur OK.

Vous pouvez voir un guide visuel de ces étapes ci-dessous.

import procmon filters

Importation et exportation des configurations Procmon.

Comme vous l’avez appris précédemment, vous pouvez exporter et importer des filtres Procmon via des fichiers PMF. Mais les filtres ne sont qu’un composant parmi d’autres d’une instance Procmon. Vous pouvez personnaliser les colonnes, changer l’emplacement de stockage (nous en parlerons plus tard) et bien plus encore. Ne serait-il pas agréable de pouvoir sauvegarder tous ces paramètres ? Eh bien, c’est possible !

Pour sauvegarder l’ensemble de la configuration Procmon, cliquez sur Fichier -> Exporter la configuration, puis choisissez l’emplacement où vous souhaitez enregistrer le fichier PMC (configuration Procmon).

Export Configuration

Une fois sauvegardé, vous pouvez fermer Procmon sur le même ordinateur (ou même sur un autre), ouvrir Procmon et cliquer sur Fichier -> Importer la configuration, Procmon appliquera alors tous les mêmes filtres et autres paramètres tels qu’ils ont été exportés.

Vous pouvez également charger des configurations sauvegardées (y compris les filtres) via la ligne de commande en utilisant l’option /LoadConfig suivie du chemin du fichier, par exemple ./procmon.exe /LoadConfig C:\ProcmonConfigs\file_deletion.pmc.

Mise en évidence des événements et conversion en filtres

Peut-être avez-vous besoin de rendre certains événements plus faciles à repérer, mais vous ne souhaitez pas nécessairement les masquer avec un filtre. Dans ce cas, vous pouvez utiliser des mises en évidence. Les mises en évidence vous permettent de créer des ensembles de règles, tout comme les filtres, mais au lieu de masquer les événements, la couleur de fond des événements est modifiée.

Peut-être voyez-vous un processus dans la liste des événements appelé ctfmon.exe que vous souhaitez mettre en évidence dans la liste. Vous pouvez créer une règle de mise en évidence en :

  1. Cliquant avec le bouton droit sur l’événement dont vous souhaitez mettre en évidence un attribut.
  2. Cliquez sur Surligner et choisissez un attribut de cet événement à mettre en surbrillance. Dans cet exemple, vous choisiriez Nom du processus. Vous verrez ensuite la couleur de fond changer en bleu clair.
  3. Une fois la règle de surbrillance créée, vous pouvez accéder à la boîte Mise en surbrillance du moniteur de processus en cliquant sur Filtrer —> Surligner. Vous verrez la règle de surbrillance créée là.
  4. Depuis la boîte Mise en surbrillance du moniteur de processus, vous pouvez ajouter et supprimer des règles comme avec un filtre.
  5. Si vous avez créé des règles de surbrillance et souhaitez les transformer en filtre, vous pouvez le faire en cliquant sur le bouton Créer un filtre dans la boîte Mise en surbrillance du moniteur de processus.

Vous pouvez voir un guide visuel de ces étapes ci-dessous.

Highlighting Events and Converting to Filters

Exportation et ouverture des événements vers/depuis les fichiers journaux

Pour que Procmon affiche des événements dans une fenêtre, ils doivent être stockés quelque part. Par défaut, les événements sont stockés dans la mémoire virtuelle, plus précisément dans votre fichier de page.

events are stored in virtual memory

En fonction de la taille du fichier de page que vous avez définie (et de la limite d’engagement système), cela détermine le nombre d’événements que Procmon peut stocker.

Procmon est capable de capturer jusqu’à 199 millions d’événements.

Enregistrement des événements dans un fichier journal

Peut-être avez-vous besoin de sauvegarder ces événements pour une enquête ultérieure ou peut-être les charger sur un autre ordinateur ? Dans ce cas, vous devez enregistrer les événements dans un fichier journal (PML).

Une façon de sauvegarder ces événements utiles est de cliquer sur Fichier —> Enregistrer. Cette action ouvre la boîte de dialogue Enregistrer sous ci-dessous où vous avez plusieurs options.

Événements à enregistrer :

  • Tous les événements – Cette option enregistre tous les événements capturés par procmon, indépendamment de l’application d’un filtre d’événements à un fichier.
  • Événements affichés en utilisant le filtre actuel – Cette option n’enregistre pas tous les événements capturés, mais seulement ceux qui ont passé les filtres d’événements actuellement actifs.
  • Événements surlignés – Cette option n’exporte vers le journal que les événements que vous avez actuellement surlignés.

Format :

  • Format natif de Process Monitor (PML) – Le format par défaut pour enregistrer tous les événements (PML).
  • Valeurs séparées par des virgules (CSV) – Enregistre tous les événements dans un fichier CSV.
  • Langage de balisage extensible (XML) – Enregistre tous les événements dans un fichier XML. Ce format vous permet également d’enregistrer des traces de suivi (plus de détails à ce sujet plus tard) et résoudra les symboles de pile.
Events

Cliquez sur OK et procmon enregistrera tous les événements capturés correspondant à vos critères dans le fichier de votre choix.

Ouverture des journaux d’événements enregistrés.

Vous avez capturé des milliers d’événements sur un ordinateur, enregistré cette session de capture dans un fichier PML et l’avez copié sur un autre ordinateur pour l’examiner. Et maintenant ? Vous devez l’ouvrir.

Vous pouvez ouvrir n’importe quel fichier PML, peu importe si vous l’avez capturé sur votre ordinateur local ou non, en allant simplement dans Fichier -> Ouvrir et en choisissant le fichier PML.

Vous pouvez ouvrir des journaux à partir de la ligne de commande en utilisant l’option /OpenLog, par exemple procmon.exe /OpenLog C:\MonFichierLog.pml.

Enregistrement automatique des événements

Dans la section précédente, vous avez appris comment exporter des événements vers un journal après les avoir capturés. Mais que faire si vous savez à l’avance que vous voulez des événements dans un fichier PML, XML ou CSV ? Vous pouvez demander à procmon de capturer automatiquement des événements dans l’un de ces formats de fichier journal.

De plus, stocker les événements dans le fichier de pagination est acceptable si vous effectuez une session de dépannage ad hoc simple qui dure moins d’une heure. Cette méthode présente cependant quelques inconvénients.

  1. À chaque fois que vous fermez procmon, les événements sont perdus.
  2. Comme mentionné précédemment, la taille de votre fichier de pagination peut devenir trop importante.

Lorsque vous utilisez la mémoire virtuelle comme emplacement de stockage, vous pouvez découvrir combien d’espace il reste à procmon en cliquant sur Fichier -> Fichiers de support.

Que faire ? Changer l’emplacement de stockage.

Stockage des événements sur le disque

Vous pouvez changer l’emplacement où procmon stocke les événements, de votre fichier de pagination vers le disque, en suivant les étapes suivantes :

  1. Arrêtez une capture si vous en exécutez une actuellement.

2. Cliquez sur FichierFichiers de sauvegarde. Vous verrez ensuite un résumé des événements stockés et leur taille ainsi qu’une option pour changer l’emplacement de stockage.

Process Monitor Backing Files

3. Pour changer l’emplacement de stockage vers un fichier, cliquez sur le champ Utiliser le fichier nommé:, cliquez sur le bouton des points de suspension et définissez un emplacement de fichier.

Essayez d’utiliser un volume de disque différent de celui sur lequel procmon s’exécute pour de meilleures performances.

Vous pouvez forcer procmon à utiliser un fichier comme emplacement de stockage en le lançant également depuis la ligne de commande et en utilisant l’option /BackingFile. Si vous souhaitez revenir à l’utilisation du fichier de pagination, utilisez l’option /PagingFile.

Conversion des fichiers journaux

Procmon peut enregistrer des fichiers journaux dans trois formats différents : PML, CSV et XML. Peut-être avez-vous enregistré un fichier journal au format PML et avez-vous besoin d’analyser les événements avec un script ou un autre outil. Dans ce cas, vous pouvez convertir ce fichier journal PML en XML ou CSV en ligne de commande.

Disons que vous avez un fichier journal PML à l’emplacement C:\capture.pml. Vous souhaitez convertir ce fichier journal en XML et un en format CSV. Vous pouvez le faire en ouvrant d’abord le fichier journal avec l’option /OpenLog et ensuite en utilisant une option /Save* pour le sauvegarder.

Procmon a un paramètre standard /SaveAs qui vous permet de sauvegarder un journal dans l’un des trois formats mentionnés précédemment. Le paramètre /SaveAs définira le format de fichier en fonction de l’extension de fichier que vous fournissez.

Voici quelques exemples :

Convertir le journal capture.pml en capture.xml:

procmon.exe /OpenLog C:\capture.pml /SaveAs C:\capture.xml

Convertir le journal capture.pml en capture.csv:

procmon.exe /OpenLog C:\capture.pml /SaveAs C:\capture.csv

Rappelez-vous les options de trace de pile et de résolution de symbole dans la boîte de dialogue Enregistrer dans un fichier ci-dessus ? Vous pouvez également activer ces options en utilisant /EnregistrerSous1 et /EnregistrerSous2.

Vous ne pouvez enregistrer les traces de pile et les informations sur les symboles qu’au format XML.

Convertir le journal capture.pml en capture.xml incluant les informations sur la pile :

procmon.exe /OpenLog C:\capture.pml /SaveAs1 C:\capture.xml

Convertir le journal capture.pml en capture.xml incluant les informations sur la pile avec les symboles :

procmon.exe /OpenLog C:\capture.pml /SaveAs2 C:\capture.xml

Sachez que l’ajout de traces de pile et de symboles augmentera considérablement le temps de conversion et vous verrez inévitablement un indicateur de progression comme indiqué ci-dessous.

Progress Indicator

Capture des événements au démarrage

Parfois, les informations dont vous avez besoin pour enquêter ne sont pas générées lorsque Windows est en cours d’exécution. Vous pourriez également avoir besoin d’investiguer ce qu’un processus fait chaque fois que Windows démarre.

Il est courant d’avoir besoin de résoudre des problèmes tels que les performances de démarrage lentes ou peut-être un logiciel malveillant qui décide de s’exécuter immédiatement au démarrage de Windows. Procmon dispose d’une fonctionnalité appelée Enregistrement au démarrage que vous pouvez activer pour capturer ces informations.

Pour activer l’enregistrement au démarrage, cliquez sur Options —> Activer l’enregistrement au démarrage dans le menu comme indiqué ci-dessous.

Enabling boot logging

Une fois que vous cliquez sur Activer l’enregistrement au démarrage, une boîte de dialogue apparaîtra vous demandant des informations facultatives. Cette boîte de dialogue est l’endroit où vous pouvez capturer des événements de profilage de thread.

Activer les événements de profilage des threads est un cas d’utilisation avancé. Lorsque vous activez le profilage des threads, procmon capture des traces de pile de threads et une utilisation du processeur que vous pouvez utiliser pour identifier la source des problèmes de performance liés au processeur.

Optional thread-profiling events for boot time logging

Une fois que vous avez cliqué sur OK, procmon activera le journal de démarrage, ce qui indique au pilote de filtre (plus d’informations à ce sujet plus tard) d’attendre le prochain redémarrage de Windows. Lorsque vous redémarrez Windows, procmon commencera alors à capturer les événements de processus comme si vous l’aviez lancé manuellement.

Toutes les données d’événements au démarrage sont stockées dans un fichier journal temporaire appelé C:\Windows\procmon.pmb.

Une fois que Windows est de nouveau opérationnel, ouvrez à nouveau procmon. Vous devriez voir une boîte de dialogue comme ci-dessous. Ici, cliquez sur Oui pour convertir les données au démarrage au format PML en sélectionnant ensuite le fichier journal pour enregistrer les données.

Confirmation to convert boot-time events to PML

Alors que procmon convertit les données, vous verrez une barre de progression comme ci-dessous.

Converting boot-time event data to PML

N’oubliez pas de relancer procmon après un redémarrage ! Procmon commencera à capturer des événements dès que Windows démarrera dans C:\Windows\procmon.pmb. Il continuera à le faire jusqu’à ce que vous le désactiviez en ouvrant à nouveau procmon.

Exécution de Procmon à distance

Bien que procmon ne s’exécute que localement sur une machine Windows, vous pouvez appeler procmon pour s’exécuter à distance via psexec ou la commande Invoke-Command de PowerShell.

Connexe: PsExec: Le Guide Ultime, Invoke-Command: La Meilleure Façon d’Exécuter du Code à Distance

Pour exécuter procmon avec la commande Invoke-Command de PowerShell, suivez les étapes suivantes :

  1. Activez PowerShell Remoting sur la machine distante si ce n’est pas déjà fait.

2. Copiez le dossier procmon vers l’ordinateur distant via la console PowerShell.

Copy-Item -Path C:\procmon \\MYPC\c$

3. Appelez procmon via PowerShell en vous assurant de sauter la confirmation de l’EULA et de forcer procmon à stocker les événements dans un fichier de sauvegarde plutôt que dans la mémoire virtuelle, et ne demandez pas le filtre au démarrage.

Invoke-Command -Computer MYPC -ScriptBlock { C:\procmon\procmon.exe /AcceptEula /BackingFile C:\capture.pml /Quiet }

4. À ce stade, procmon a commencé la capture. Reproduisez le problème que vous essayez de capturer.

5. Arrêtez procmon sur l’ordinateur distant en utilisant l’option /Terminate.

Invoke-Command -Computer MYPC -ScriptBlock { C:\procmon\procmon.exe /Terminate }

6. Attendez que procmon se ferme. En raccourci, vous pouvez vérifier périodiquement le processus procmon et retourner le contrôle à la console PowerShell une fois qu’il est terminé.

while (Invoke-Command -Computer MYPC -ScriptBlock { Get-Process procmon -ErrorAction Ignore }) {
     Write-Host "Waiting on procmon to exit…"
     Start-Sleep -Seconds 5
 }

7. Copiez le fichier journal distant sur l’ordinateur local

$session = New-PSSession -ComputerName MYPC
Copy-Item -Path C:\log.pml -Destination C:\ -FromSesson $session
$session | Remove-PSSession

À ce stade, vous avez le fichier journal exécuté à distance sur votre ordinateur local !

Si vous souhaitez un script PowerShell approprié pour gérer cette capture, vous pouvez le trouver ci-dessous.

[CmdletBinding()]
 param(
     [Parameter()]
     [string]$ComputerName, 
     [Parameter()]
     [string]$LogFilePath = 'C:\capture.pml'
 )
 $procmonFolderPath = 'C:\procmon'
 try {
     $session = New-PSSession -ComputerName $ComputerName
     Copy-Item -Path $procmonFolderPath -Destination $procmonFolderPath -ToSession $session $scriptBlock = {
         & "$using:procmonFolderPath\procmon.exe" /AcceptEula /BackingFile $using:LogFilePath /Quiet
         & "$using:procmonFolderPath\procmon.exe" /Terminate
         while (Get-Process procmon -ErrorAction Ignore) {
             Write-Host "Waiting on procmon to exit…"
             Start-Sleep -Seconds 5
         }
     }
     Copy-Item -Path $LogFilePath -Destination C:\ -FromSesson $session
 } catch {
     throw $_
 } finally {
     $session | Remove-PSSession
 }

Configuration des captures procmon de longue durée

A busy Windows system can produce a lot of events procmon captures that can overwhelm your PC. If you intend to run procmon for an extended amount of time, there a few measure you should take into consideration.

Filtrer les événements

Lorsque procmon effectue une capture, il enregistre tous les événements. Vous pouvez créer et appliquer des filtres d’événements, mais ces filtres cachent simplement les événements à l’écran ; ils n’empêchent pas procmon de les capturer.

Si vous avez l’intention d’effectuer des captures Procmon plus longues, il est toujours une bonne idée de choisir Drop Filtered Events dans le menu Filter comme indiqué ci-dessous.

Drop Filtered Events

Une fois que vous sélectionnez l’élément Drop Filtered Events, Procmon commence immédiatement à supprimer tous les événements filtrés. Procmon ne les affiche pas à l’écran et ne les enregistre pas dans la mémoire virtuelle ou un fichier journal. Supprimer entièrement les événements indésirables aide à économiser des ressources.

Thèmes Avancés

Vous cherchez toujours plus d’informations sur Procmon et comment l’utiliser ? Plongeons dans quelques sujets avancés ! Ces sujets sont ceux que vous n’aurez probablement pas besoin de connaître trop souvent. Ils concernent davantage les fonctionnalités de Procmon sous le capot, mais ces informations peuvent être utiles lors du dépannage de Procmon.

Pilotes de Filtre

Pour capturer des événements, Procmon enregistre et utilise un pilote de filtre via le Windows Filter Manager (FltDrv). Ce pilote de filtre appelé PROCMON24 s’installe lorsque vous démarrez une capture. Parfois, ce pilote de filtre peut entrer en conflit avec d’autres applications.

Après avoir démarré Procmon, ouvrez une console PowerShell ou une invite de commande élevée et exécutez fltmc filters. L’utilitaire fltmc répertorie, charge et décharge les pilotes de filtre. Lorsque vous exécutez cela, vous verrez le filtre PROCMON24 chargé comme indiqué ci-dessous.

Remarquez que l’Altitude de PROCMON24 est 385200 par défaut, avec d’autres filtres ayant un nombre inférieur. L’altitude du pilote de filtre représente le niveau auquel un pilote de filtre peut « voir » les événements. Par exemple, si un événement se produit au niveau wcifs, luafv ou Wof, procmon ne pourra pas le voir. Nous en parlerons plus tard pour changer cela.

Procmon 24

Le pilote de filtre PROCMON24 reste chargé même lorsque procmon n’est pas en cours d’exécution.

Parfois, procmon peut rencontrer des problèmes lors du chargement d’un pilote de filtre. Pour résoudre ce problème, ouvrez procmon avec l’option /NoConnection pour empêcher procmon de se connecter au pilote de filtre.

Déchargement du pilote de filtre PROCMON24

Il existe des cas où le pilote de filtre PROCMON24 peut entrer en conflit avec différents périphériques matériels et vous devrez le décharger. Cependant, cette situation peut ne pas être aussi facile qu’elle en a l’air.

Vous pouvez décharger des pilotes de filtre en utilisant la commande fltmc unload suivie du nom du pilote de filtre.

fltmc unload PROCMON24

Mais si vous essayez la commande ci-dessus, vous vous rendrez rapidement compte qu’elle ne fonctionne pas. Vous ne pouvez pas décharger ce pilote de filtre car apparemment le développeur n’a pas ajouté cette fonctionnalité.

Can’t Unload the Filter

Si vous devez décharger le pilote de filtre PROCMON24, malheureusement, redémarrer est la seule façon de le faire.

Traces de la pile.

Parfois, des événements simples comme la lecture d’une clé de registre, l’ouverture d’un fichier ou l’appel d’une adresse réseau ne sont pas suffisamment profonds. Vous devez creuser davantage et voir l’historique des appels de fonction réels de l’API Windows qu’un processus effectue. Vous devez examiner la pile d’appels.

A stack trace is the history of various functions called during various function calls when a process is running.

Avec une liste d’événements apparaissant dans procmon, double-cliquez sur n’importe quel événement et cliquez sur l’onglet Pile comme indiqué ci-dessous. L’onglet Pile représente les appels de fonction que le processus individuel a effectués au moment où l’événement s’est produit.

Stack Tab

Le sujet des traces de pile pourrait être développé pendant longtemps. Si vous souhaitez en savoir plus sur la compréhension de la pile d’appels d’un processus, consultez l’article Obtenir de meilleures traces de pile dans Process Monitor

Changer l’altitude de Procmon (Capturer des événements de niveau inférieur)

Comme mentionné précédemment, Procmon utilise un pilote de filtre pour capturer des événements. Même s’il peut sembler que Procmon capture chaque événement Windows (il y a beaucoup d’événements qui apparaissent dans la fenêtre Procmon !), ce n’est pas le cas. Procmon ne capture que les événements connus de son pilote de filtre ou l’altitude à laquelle se trouve son pilote de filtre.

Par exemple, si vous devez journaliser l’activité de l’antivirus, le stockage de bas niveau et d’autres événements matériels de niveau inférieur, vous devez modifier l’altitude du pilote de filtre PROCMON24 pour qu’elle soit inférieure à celle des autres.

Pour ce faire :

  1. Assurez-vous que Procmon est fermé.

2. Trouvez l’altitude la plus basse des pilotes de filtre actuellement chargés avec la commande fltmc.

fltmc filter

3. Modifiez la valeur de l’altitude dans le registre sous la clé de registre HKLM\System\CurrentControlSet\Services\PROCMON24\Instances\Process Monitor 24 Instance pour 100 de moins que la valeur d’altitude la plus basse (pour voir tous les événements).

En fonction de la version de Procmon que vous avez installée, l’emplacement de la clé de registre peut changer. Ce tutoriel utilise Procmon 2.4.

Vous pouvez ouvrir une session PowerShell élevée et exécuter le fragment de code ci-dessous pour modifier rapidement la valeur.

Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Services\PROCMON24\Instances\Process Monitor 24 Instance' -Name 'Altitude' -Value 40400

Plus vous réglez l’altitude basse, plus vous aurez d’événements à gérer. Ne réglez pas l’altitude plus bas que ce dont vous avez besoin.

4. Refusez les droits de Supprimer et Définir la valeur pour Tout le monde sur la clé Process Monitor 24 Instance. Lorsque Procmon s’exécute à nouveau, il tentera de réinitialiser la valeur de Altitude à sa valeur par défaut. Vous pouvez modifier ces autorisations via l’utilitaire regedit ou simplement exécuter le fragment de code PowerShell ci-dessous.

$regKeyPath = 'HKLM:\System\CurrentControlSet\Services\PROCMON24\Instances\Process Monitor 24 Instance'
$acl = Get-Acl $regKeyPath
$idRef = System.Security.Principal.NTAccount
$regRights = @([System.Security.AccessControl.RegistryRights]::Delete,[System.Security.AccessControl.RegistryRights]::SetValue) 
$inhFlags = [System.Security.AccessControl.InheritanceFlags]::None
$prFlags = [System.Security.AccessControl.PropagationFlags]::None
$acType = [System.Security.AccessControl.AccessControlType]::Deny
$rule = New-Object System.Security.AccessControl.RegistryAccessRule ($idRef, $regRights, $inhFlags, $prFlags, $acType) 
$acl.SetAccessRule($rule) $acl | Set-Acl -Path $regKeyPath

5. Déchargez le pilote de filtre PROCMON24 en redémarrant Windows.

6. Démarrez Procmon.

7. Ouvrez une console PowerShell ou une invite de commandes et exécutez fltmc filters. Vous devriez maintenant voir le pilote de filtre Procmon à la nouvelle altitude.

PowerShell console or command prompt

Vous pouvez désormais capturer tout ce dont vous avez besoin. Si vous abaissez l’altitude de Altitude de procmon au minimum possible, soyez prêt pour l’événement mousson !

Exemples concrets

Vous devriez maintenant avoir une bonne compréhension de ce que procmon peut faire et comment il peut vous aider à suivre les événements de Windows. Appliquons maintenant ces connaissances et examinons quelques cas d’utilisation courants où vous pourriez avoir besoin de ce genre de savoir-faire.

Trouver ce qui supprime un fichier

Si un fichier de votre machine Windows continue d’être supprimé pour une raison inconnue et que vous souhaitez le localiser, procmon peut vous aider (et c’est assez facile).

Peut-être avez-vous ouvert procmon et avez essayé de définir un événement de fichier appelé Delete ou Remove, mais à votre grand désarroi, aucune telle opération n’existe. Pour trouver les événements de suppression de fichiers, vous devez filtrer les événements avec une Operation de :

  • SetDispositionInformationFile
  • SetDispositionInformationEx

Si votre système supprime beaucoup de fichiers, vous voudrez également limiter les événements de suppression de fichiers au nom ou au chemin du fichier en utilisant le filtre Path.

Operation is          SetDispositionInformationEx   Include
Operation is          SetDispositionInformationFile Include
Path      begins with C:\MyFolder                   Include

Localisation des problèmes de fichiers verrouillés

Nous avons tous été là ; vous essayez de déplacer ou de supprimer un fichier et il est verrouillé par un autre processus. Parfois, si vous essayez de désinstaller une application, par exemple, vous ne saurez jamais si cette erreur aléatoire que vous voyez a quelque chose à voir avec un fichier verrouillé en premier lieu !

Pour savoir quand Windows tente de supprimer ou de modifier un fichier verrouillé, utilisez l’ensemble de filtres ci-dessous.

Operation is CreateFile        Include
Result    is SHARING VIOLATION Include

Dépannage des applications nécessitant des droits d’administrateur

Travaillez-vous avec une application qui, selon la documentation, devrait fonctionner mais ne fonctionne pas ? Nous avons tous déjà été confrontés à cette situation. Parfois, un processus invoqué par l’application nécessite des privilèges élevés mais ne vous indique pas où ni comment. Vous pouvez utiliser procmon pour vous aider.

Une façon de repérer les processus refusés en raison des privilèges élevés requis est de filtrer sur le Résultat d’un événement.

Chaque fois qu’un événement est refusé en raison du manque de droits élevés, vous verrez généralement un résultat de ACCÈS REFUSÉ. Sachant cela, vous pouvez facilement créer un filtre simple affichant tous les événements ayant un Résultat de ACCÈS REFUSÉ comme indiqué ci-dessous.

Result is ACCESS DENIED Include

À partir de là, vous pouvez ajouter d’autres filtres comme le chemin du registre ou du dossier avec l’attribut Chemin.

Trouver le processus accédant à une adresse IP

Peut-être avez-vous un comportement réseau étrange avec Wireshark et avez besoin de savoir quel processus initie cette communication. Lancez procon et ajoutez le jeu de filtres suivant.

Ces filtres permettent de limiter les événements au trafic réseau initié localement avec une seule adresse IP de destination.

Operation   is       TCP Send        Include
Operation   is       UDP Send        Include
Path        contains ->  Include
Event Class is       Network         Include

Dépannage du démarrage lent

Parfois, Windows met du temps à démarrer. Cette lenteur peut être causée par de nombreux composants Windows, des applications installées, etc. En utilisant la fonctionnalité d’enregistrement de démarrage de procmon, vous pouvez identifier et résoudre le problème.

  1. Activer l’enregistrement au démarrage. Vous pouvez découvrir comment faire cela dans la section Capture des événements au démarrage ci-dessus.

2. Sur la boîte de dialogue Activer l’enregistrement au démarrage, assurez-vous de cocher la case Générer des événements de profilage des threads. Le bouton radio Chaque seconde devrait être suffisant.

Enabling thread profiling events on boot

3. Après un redémarrage, ouvrez Procmon, faites un clic droit sur n’importe quelle colonne et choisissez Sélectionner des colonnes.

4. Sur la boîte de dialogue Sélection des colonnes de Process Monitor, cochez Durée. Une fois cela fait, vous pourrez voir combien de temps chaque événement a pris pour s’exécuter.

Process Monitor Column

5. Maintenant, vous pouvez créer une règle de filtre sur Durée pour un certain nombre de secondes que vous estimez être adéquat. La règle de filtre ci-dessous ne montrera que les événements qui ont pris plus de cinq secondes à se terminer.

filter rule on Duration

6. Enfin, une autre façon utile d’investiguer ces événements lents est d’utiliser l’outil Arborescence des processus de Procmon. L’arborescence des processus montre les relations entre les processus parent et enfant et contient l’heure de début et de fin de chaque processus. Pour le trouver, cliquez sur Outils —> Arborescence des processus.

Process Tree

7. Une fois dans l’outil Arborescence des processus, examinez la colonne Durée de vie qui montre graphiquement la durée de chaque processus. Vous pouvez également remarquer les plages horaires en comparant les colonnes Heure de début et Heure de fin dans cette vue.

Lifetime Column

Résolution des problèmes des applications App-V

De nombreuses organisations utilisent le service Microsoft App-V pour virtualiser et déployer des applications auprès des utilisateurs finaux. Si vous utilisez App-V, il existe un commutateur pratique (et non documenté) que vous devez connaître appelé /externalcapture.

L’utilisation de .\procmon.exe /ExternalCapture permet généralement de capturer plus d’activités de registre autour des applications App-V. Essayez ce commutateur si vous ne parvenez pas à trouver ce que vous cherchez lors du dépannage des applications App-V!

Le commutateur /HookRegistry est censé servir le même objectif que /ExternalCapture, mais il ne fonctionne plus sur les machines 64 bits.

Conclusion

Eh bien, voilà; un guide complet sur tout procmon! Bien que vous ayez beaucoup appris sur procmon, il y a toujours plus de trésors à découvrir avec cet utilitaire pratique.

Si vous souhaitez suggérer des mises à jour ou des modifications à ce Guide Ultime, veuillez me contacter sur Twitter et faites-le moi savoir!

Source:
https://adamtheautomator.com/procmon/