De Ultieme Gids voor Procmon

Procmon. De beruchte hulpprogramma van Windows Sysinternals om allerlei soorten Windows-activiteit te volgen. Bekend om zijn vermogen om schurkensoftware-installatieprogramma’s op te sporen die onbekende wijzigingen aan registersleutels aanbrengen of misschien het spoor van een virus inspecteren.

Als u Windows-register, bestandssysteem, proces- of netwerkactiviteit moet inspecteren en hebt besloten om procmon te gebruiken, is dit artikel voor u.

In deze ultieme handleiding leert u alles wat er te weten valt over het gebruik van het procmon-hulpprogramma, van installatie, basisgebruik tot verschillende gebruiksscenario’s die u zullen helpen allerlei soorten activiteiten op te sporen.

Vereisten

Deze ultieme handleiding is van toepassing op bijna alle Windows-systemen, maar om volledig te zijn (en om te voorkomen dat u procmon probeert uit te voeren op een Windows 3.1-computer), heeft u het volgende nodig:

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

Dat is alles! U downloadt en installeert procmon in de volgende secties. De handleiding zal v3.6 van procmon gebruiken op een Windows 10 Build 1909 x64-machine.

Procmon downloaden en uitvoeren

Om te beginnen moet procmon worden uitgevoerd op uw Windows-machine. U kunt het op twee verschillende manieren krijgen; via de traditionele downloadmethode of wat Windows Sysinternals Sysinternals live noemt.

De ouderwetse manier

Procmon hoeft niet geïnstalleerd te worden; het is een enkel uitvoerbaar bestand. Je kunt het krijgen door het ZIP-bestand te downloaden het ZIP-bestand. Als je het eenmaal gedownload hebt, pak je het ZIP-bestand uit met je favoriete tool. Hieronder staat een PowerShell-codefragment als je het hebt opgeslagen in je thuismap. Dit codefragment zal een map aanmaken op ~\ProcessMonitor met alle benodigde bestanden.

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

In de ~\ProcessMonitor map, zul je vijf bestanden zien:

  • Eula.txt – De licentieovereenkomst die je moet accepteren voordat je procmon uitvoert.
  • procmon.chm – Het helpbestand met alle verstrekte documentatie.
  • Procmon.exe – Het hoofdbestand dat de juiste procmon instantie zal starten (x86 of x64).
  • Procmon64.exe – De x64 procmon binaire.
  • Procmon64a.exe – De alfa 64 procmon binaire.

Voer nu procmon uit door het aanroepen van het bestand ~\ProcessMonitor\procmon.exe.

Procmon draait alleen met verhoogde rechten, dus je wordt gevraagd dit te accepteren als je UAC hebt ingeschakeld wanneer je het uitvoert. Er is een manier om dit te omzeilen, wat later in deze Gids zal worden besproken.

Sysinternals Live

Als je liever geen EXE-bestand wilt downloaden (of niet kunt), kun je ook de Sysinternals Live-map gebruiken. Open hiervoor de Bestandsverkenner en plak \\live.sysinternals.com\tools in. Je ziet dan een map zoals elke willekeurige gedeelde netwerkmap met alle Sysinternals-bestanden, inclusief procmon.

Sysinternals Live

Scroll naar beneden totdat je procmon vindt, dubbelklik en voilà, je gebruikt procmon!

Aanpassen van het startgedrag van Procmon

Standaard start procmon met het tonen van een gebruikerslicentieovereenkomst (EULA) en opent ook een venster. Met de commandoregel kun je dit standaardgedrag aanpassen.

Bijvoorbeeld, als je procmon gestart wilt hebben geminimaliseerd, gebruik dan de /Geminimaliseerd-schakelaar.

.\procmon.exe /Minimized

Misschien draai je procmon op een nieuwe machine en wil je liever niet het EULA-venster zien. Je kunt dat uitschakelen bij het starten met de /AccepteerEula-schakelaar.

.\procmon.exe /AcceptEula

Hoewel minder waarschijnlijk in deze tijd, detecteert procmon bij het starten of je een 64-bits of 32-bits OS gebruikt. Als je op een 64-bits machine zit, zal het een 64-bits proces starten en vice versa. Als je op een 64-bits machine zit en procmon liever als een 32-bits proces wilt laten draaien, of een logbestand wilt lezen (meer hierover later) dat is gegenereerd vanaf een 32-bits machine, gebruik dan de /Run32-schakelaar.

.\procmon.exe /Run32

Procmon heeft andere commandoregelschakelaars voor het aanpassen van het gedrag, maar daar leer je meer over in de komende secties.

Introductie Procmon

Wanneer je Procmon voor de eerste keer start, kun je overweldigd worden door de opties. Maak je geen zorgen, je leert bijna alles in deze handleiding! Hieronder zie je een typische Procmon-capture in uitvoering.

Default Procmon process view

Zodra je Procmon start, begint het met het vastleggen van veel verschillende soorten Windows-gebeurtenissen.

Als je niet wilt dat Procmon automatisch gebeurtenissen begint vast te leggen, kun je het starten vanaf de opdrachtregel door procmon.exe /NoConnect uit te voeren.

Zoals je kunt zien in de bovenstaande schermafbeelding onder de Operatie-kolom, zijn er verschillende pictogrammen die elk verschillende klassen van Windows-gebeurtenissen vertegenwoordigen. Procmon legt gebeurtenissen vast vanuit vijf verschillende klassen:

  • Register
  • Bestandssysteem
  • Netwerk
  • Processen
  • Profileringsgebeurtenissen

Elke gebeurtenis in alle klassen wordt weergegeven in een enkel lijstvenster van zeven kolommen:

  • Tijdstip – Het tijdstip waarop de gebeurtenis plaatsvond.
  • Procesnaam – De naam van het proces dat de gebeurtenis heeft veroorzaakt.
  • PID – De procesidentificatie.
  • Operatie – Het type gebeurtenis, zoals of het proces een bestand heeft geopend, een registerwaarde heeft gewijzigd, enz.
  • Pad – Het pad naar het object waarmee de gebeurtenis heeft geïnteracteerd, zoals een bestandspad, registerpad, enz.
  • <Resultaat – Deze kolom zal tal van waarden bevatten om het resultaat van het evenement aan te geven. Deze waarde kan zo eenvoudig zijn als SUCCES of specifiek voor het evenement zoals HERPARSEREN, BUFFEROVERLOOP, NAAM NIET GEVONDEN, enz.
  • Detail – Deze kolom bevat alle details eens u een evenement hebt gevonden dat u wilt zien.

Als u liever een bepaalde kolom niet wilt zien of andere beschikbare kolommen wilt zien, klik dan met de rechtermuisknop op een kolomkop en kies Kolommen selecteren. U krijgt dan een dialoogvenster waar u de zichtbare kolommen kunt aanpassen.

Customizing procmon columns

In het gebeurtenisvenster dubbelklikt u op een gebeurtenis. U kunt veel meer details over het proces en de gebeurtenis zelf vinden door de tabbladen Gebeurtenis, Proces en Stack te bekijken.

Procmon event properties window

In- en uitschakelen van opnamen

U hebt volledige controle over het opnameproces. U kunt het volledige opnameproces uitschakelen of opnamen per gebeurtenisklasse uitschakelen.

In de menubalk bovenaan ziet u een vergrootglaspictogram (hieronder). Als er een rood X over het vergrootglaspictogram staat, betekent dit dat de opname is uitgeschakeld. Anders is de opname ingeschakeld.

Procmon actively capturing events

Laat Procmon niet langer gebeurtenissen vastleggen dan nodig is. Het gebruikt virtueel geheugen om al die gebeurtenissen op te slaan en als u niet voorzichtig bent, zou u Windows kunnen laten crashen! U kunt dit gedrag wijzigen zoals u later zult zien.

Als u liever selectiever wilt zijn, kunt u ook de vastlegging van elke gebeurtenisklasse regelen. In de menubalk ziet u vijf van dezelfde pictogrammen worden weergegeven in de kolom Bediening. Door op deze knoppen te klikken, kunt u hele gebeurtenisklassen in- en uitschakelen.

Types of Windows events

Beweeg met uw muis over elk pictogram om te zien wat voor soort activiteit elk pictogram vertegenwoordigt.

Zodra u op een pictogram klikt, past procmon een gebeurtenisfilter toe. Afhankelijk van hoeveel gebeurtenissen tot nu toe zijn vastgelegd, ziet u mogelijk een pop-up zoals degene hieronder.

Types of Windows events

Standaard is het meest rechtse pictogram (het zwart-groene grafiek) niet ingeschakeld. Als u deze gebeurtenisklasse bij het opstarten van procmon wilt inschakelen, kunt u procmon vanaf de opdrachtregel aanroepen met .\procmon.exe /Profiling.

U kunt het aantal gebeurtenissen in het venster zien door naar de onderkant te kijken. Zoals u hieronder kunt zien, heeft procmon 84.334 gebeurtenissen verwerkt, maar vanwege het toegepaste gebeurtenisfilter worden er slechts 15.912 of 18% van getoond. U kunt ook zien dat deze gebeurtenissen worden opgeslagen in virtueel geheugen (meer hierover later).

Number of Events in the Window

Gebeurtenisfilters

Om procmon te begrijpen, moet u ongetwijfeld het concept van gebeurtenisfilters begrijpen. Gebeurtenisfilters zijn hoe u het signaal van het lawaai scheidt. Gebeurtenisfilters verbergen alle gebeurtenissen waarin u niet geïnteresseerd bent. Hierboven hebt u gebeurtenisfilters toegepast op hele gebeurtenisklassen, maar u kunt veel gedetailleerder te werk gaan.

Er zijn meerdere manieren om met gebeurtenisfilters te interageren. Laten we eenvoudig beginnen. Klik op het Filter menu-item bovenaan. Je ziet verschillende opties om met filters te werken.

Filter menu options

Filters bekijken

Standaard maakt Procmon een filter voor je aan. Onder het Filter menu-item, klik op Filter…. Je ziet een Process Monitor Filter box verschijnen met twee gebieden; één voor het filteren van je filterregels en één voor het bekijken van alle regels die je hebt ingesteld. Je kunt hieronder een voorbeeld hiervan zien.

Filter rules

Standaard zal Procmon de bovenstaande filters tonen wanneer je het start. Als je wilt dat deze box verborgen blijft, kun je dit doen door Procmon te starten met de /Quiet schakelaar.

Je zult zien dat zonder zelf filters aan te maken, Procmon ook een ingebouwde set filterregels gebruikt. Als je naar beneden scrolt in de Process Monitor Filter box, zul je veel verschillende soorten regels zien gedefinieerd. Hier kun je elke categorie, operator, waarde en actie bekijken die op elke regel moet worden toegepast.

Deze filters worden toegepast omdat je meestal de gebeurtenissen die deze filters uitsluiten niet hoeft te zien. Maar als je alle gebeurtenissen wilt zien, kun je ook gewoon alle standaardfilters verwijderen of klikken op Filter —> Geavanceerde uitvoer inschakelen zoals hieronder wordt weergegeven.

Enable Advanced Output

Bijvoorbeeld, bovenaan zie je een paar regels die Procesnaam tonen voor de waarde van Kolom, is voor Relatie, verschillende procmon-gerelateerde processen voor de waarde van de kolom Waarde, en een Actie van Uitsluiten. In gewoon Nederlands vertellen deze regels procmon om bijvoorbeeld een proces met de naam procmon.exe niet weer te geven (uit te sluiten).

Beheer van gebeurtenisfilterregels

Afhankelijk van je gebruikssituatie zul je ongetwijfeld je eigen regels moeten toevoegen. Er zijn verschillende manieren om regels toe te voegen.

Gebruik de filterbox van Process Monitor

In de vorige sectie zag je hoe de Filterbox van Process Monitor eruitzag en bekeek je alle regels. In deze box kun je ook regels maken, wijzigen en verwijderen.

Laten we zeggen dat je alleen de momenten wilt zien waarop het proces explorer.exe een registersleutel heeft bevraagd.

Gebeurtenisfilters toevoegen

In de Filterbox van Process Monitor:

  1. Klik op de linker dropdownlijst. Deze lijst toont alle verschillende categorieën van gebeurtenissen waarop je kunt filteren. Hieronder kun je zien dat er behoorlijk wat zijn!

    Elk item dat je in deze lijst ziet, komt overeen met een kolom die wordt weergegeven in het hoofdscherm, zoals hieronder wordt getoond. Kies voor het doel van dit artikel Procesnaam.

Process Monitor Filter

2. Kies een categorie en kies vervolgens een operator. Standaard zal het keuzemenu is zijn, maar als je op het keuzemenu klikt, heb je vele andere opties. Deze operators stellen je in staat om wat je ook gekozen hebt op vele verschillende manieren te filteren. Aangezien je op zoek bent naar een proces dat precies explorer.exe is, kies dan is.

Operator List

3. Kies tot slot de procesnaam zoals hieronder weergegeven. Je zult merken dat omdat je Procesnaam als categorie hebt gekozen, procmon automatisch alle momenteel actieve processen weergeeft om uit te kiezen.

Process Name in Process Monitor Filter

4. Zorg ervoor dat je Opnemen hebt gekozen aangezien je alleen de gebeurtenissen wilt zien die aan deze criteria voldoen. En klik vervolgens op de Toevoegen knop om de regel toe te voegen aan je huidige filter. Zoals je hieronder kunt zien, wordt de Opnemen-regel weergegeven als een groen vinkje.

5. Tenslotte, aangezien je alle gebeurtenissen wilt waarbij explorer.exe een registerwaarde opvraagt, zorg ervoor dat je ook de RegQueryKey operatie opneemt. Wanneer je klaar bent, zouden beide regels toegevoegd moeten zijn.

RegQueryKey

6. Klik op OK en je zult dan zien dat het hoofdvenster alle gebeurtenissen verwijdert die niet overeenkomen met de zojuist gedefinieerde filterregels.

Events that do not match the filter rules

Verwijderen van filterregels voor gebeurtenissen

Je kunt ook net zo makkelijk filterregels verwijderen en wijzigen.

  1. Klik op het Filter-icoon bovenaan het hoofdvenster om het Filter van Process Monitor venster te openen.
Process Monitor Filter Box

2. Highlight beide van de filterregels die je hierboven hebt gemaakt, klik op de knop Verwijderen zoals hieronder getoond en klik op OK. Deze actie zal beide eerder toegevoegde aangepaste regels verwijderen.

remove both of the custom rules added

Je kunt ook op de Herstellen knop klikken om automatisch alle aangepaste filterregels te verwijderen.

Telkens wanneer je een filter toepast, stop dan procmon en start het opnieuw, dat filter zal opnieuw worden toegepast. Als je wilt garanderen dat er geen filter wordt toegepast wanneer je procmon start, kun je procmon oproepen met de /NoFilter schakelaar.

Filterregels toevoegen met rechtsklikken

Je kunt ook filterregels toevoegen via een rechtsklikmenu als je met de rechtermuisknop op een proces klikt. Zoals je hieronder kunt zien, kun je rechtstreeks vanuit dit menu elk soort regel maken; je hoeft helemaal niet naar het Process Monitor Filter vak te gaan!

add filter rules via a right-click menu

Om filterregels die zijn gemaakt via het rechtsklikmenu te verwijderen, moet je nog steeds naar het Process Monitor Filter vak gaan om ze te verwijderen.

Aangepaste filters opslaan en beheren

Als je een gevorderde procmon-gebruiker bent, komt er waarschijnlijk een moment waarop je sets filterregels hebt voor verschillende gelegenheden. Met behulp van de filteropslag- en organisatiefuncties van procmon kun je zoveel van deze sets beheren en opslaan als je wilt.

Stel dat je een heleboel aangepaste filters hebt gedefinieerd en je wilt ze opslaan om ze later opnieuw te gebruiken. Je kunt dit filter opslaan door naar Filter te gaan, Filter opslaan te kiezen en een naam op te geven zoals hieronder weergegeven.

Saving a filter

Zodra het filter is opgeslagen, kunt u vervolgens naar Filter gaan, klikken op Filters organiseren waar u dan al uw opgeslagen filters zult zien. Vanaf hier kunt u op een filter klikken, op OK klikken en uw opgeslagen filter zal van toepassing zijn op het huidige venster.

Viewing and loading filters

U kunt ook een opgeslagen filter laden door te zweven boven Filter laden in het Filter dropdownmenu en uw opgeslagen filter te kiezen uit de lijst aan de rechterkant.

Loading a filter

Filters importeren en exporteren

Als u verwacht dat u procmon op een andere computer zult laden en al uw opgeslagen filters wilt behouden, heeft u pech. Procmon heeft geen cloudservice om filters te synchroniseren. Maar u kunt filters handmatig exporteren en later importeren.

Om procmon-filters te exporteren:

  1. Ga naar het vak Filters organiseren.
  2. Klik op het filter dat u al heeft opgeslagen en wilt exporteren.
  3. Klik op de knop Exporteren.
  4. Geef een naam, kies een pad en klik op OK. U zult zien dat alle procmon-filters worden opgeslagen met een PMF-extensie.

Om procmon-filters te importeren:

  1. Ga naar het vak Filters organiseren.
  2. Klik op de knop Importeren.
  3. Vind het filter dat u wilt importeren en klik op OK.

U kunt een visuele stapsgewijze handleiding van deze stappen hieronder zien.

import procmon filters

Procmon-configuraties importeren en exporteren

Als je hierboven hebt geleerd, kun je procmon-filters exporteren en importeren via PMF-bestanden. Maar filters zijn slechts een onderdeel van een procmon-instantie. Je kunt de kolommen aanpassen, de opslaglocatie wijzigen (meer hierover later) en meer. Zou het niet fijn zijn om al die instellingen ook op te slaan? Dat kan!

Om de volledige procmon-configuratie op te slaan, klik op Bestand —> Configuratie exporteren en kies vervolgens een locatie waar je het PMC-bestand (procmon-configuratie) wilt opslaan.

Export Configuration

Na het opslaan kun je procmon sluiten op dezelfde computer (of zelfs een andere), procmon openen en klikken op Bestand —> Configuratie importeren, waar procmon alle filters en andere instellingen zal toepassen zoals ze zijn geëxporteerd.

Je kunt ook opgeslagen configuraties (inclusief filters) laden via de command-line met de /LoadConfig-schakelaar gevolgd door het pad van het bestand bijvoorbeeld ./procmon.exe /LoadConfig C:\ProcmonConfigs\file_deletion.pmc.

Gebeurtenissen markeren en converteren naar filters

Misschien wil je bepaalde gebeurtenissen gemakkelijker opmerken, maar wil je niet noodzakelijk gebeurtenissen verbergen met een filter. In dat geval kun je highlights gebruiken. Highlights stellen je in staat om sets regels te maken, net als filters, maar in plaats van gebeurtenissen te verbergen, wordt de achtergrondkleur van de gebeurtenissen gewijzigd.

Misschien zie je een proces in de gebeurtenissenlijst genaamd ctfmon.exe dat je wilt markeren in de lijst. Je kunt een highlight-regel maken door:

  1. Klik met de rechtermuisknop op de gebeurtenis die je wilt markeren.
  2. Klik op Markeren en kies een attribuut van dat evenement om te markeren. In dit voorbeeld zou je Procesnaam kiezen. Je zult dan zien dat de achtergrondkleur verandert naar een lichtblauwe kleur.
  3. Nadat de markeringsregel is gemaakt, kun je naar het vak Markeren van procesmonitor gaan door te klikken op Filter —> Markeren. Je ziet daar de gemaakte markeringsregel.
  4. Vanuit het vak Markeren van procesmonitor kun je regels toevoegen en verwijderen, net zoals je kunt doen met een filter.
  5. Als je enkele markeringsregels hebt gemaakt en ze wilt omzetten in een filter, kun je dat doen door op de knop Filter maken te klikken in het vak Markeren van procesmonitor.

Je kunt hieronder een visuele handleiding van deze stappen zien.

Highlighting Events and Converting to Filters

Exporteren en Openen van Gebeurtenissen naar/van Logbestanden

Om gebeurtenissen weer te geven in een venster, moeten ze ergens worden opgeslagen. Standaard worden gebeurtenissen opgeslagen in het virtuele geheugen, meer specifiek in je wisselbestand.

events are stored in virtual memory

Afhankelijk van hoe groot je het wisselbestand hebt gedefinieerd (en de systeemtoewijzingslimiet) bepaalt hoeveel gebeurtenissen procmon kan opslaan.

Procmon is in staat om maximaal 199 miljoen gebeurtenissen vast te leggen.

Gebeurtenissen Opslaan naar een Logbestand

Misschien moet je deze gebeurtenissen opslaan voor latere onderzoeken of misschien laden op een andere computer? In dat geval moet je gebeurtenissen opslaan in een logbestand (PML).

Één manier om die handige gebeurtenissen op te slaan, is door te klikken op Bestand —> Opslaan. Deze actie opent het dialoogvenster Opslaan als bestand hieronder, waar je wordt gepresenteerd met een paar opties.

Te bewaren gebeurtenissen:

  • Alle gebeurtenissen – Deze optie is precies wat het lijkt. Het slaat alle gebeurtenissen op die procmon heeft vastgelegd, ongeacht of je een gebeurtenisfilter hebt toegepast of niet, naar een bestand.
  • Gebeurtenissen weergegeven met het huidige filter – Deze optie slaat niet alle vastgelegde gebeurtenissen op, maar alleen diegene die door je momenteel actieve gebeurtenisfilters zijn gekomen.
  • Gemarkeerde gebeurtenissen – Deze optie exporteert alleen naar het logbestand die gebeurtenissen die je momenteel hebt gemarkeerd.

Formaat:

  • Natief Process Monitor-formaat (PML) – Het standaardformaat om alle gebeurtenissen in op te slaan (PML).
  • Door komma’s gescheiden waarden (CSV) – Sla alle gebeurtenissen op in een CSV-bestand.
  • Uitbreidbare opmaaktaal (XML) – Sla alle gebeurtenissen op in een XML-bestand. Dit formaat geeft je ook de mogelijkheid om trace-traces op te slaan (meer hierover later) en zal stack-symbolen oplossen.
Events

Klik op OK en procmon zal alle momenteel vastgelegde gebeurtenissen die aan je criteria voldoen, opslaan in het door jou gekozen bestand.

Geopende opgeslagen gebeurtenislogs

Je hebt duizenden gebeurtenissen op één computer vastgelegd, die sessie opgeslagen in een PML-bestand en het naar een andere computer gekopieerd voor onderzoek. En nu? Je moet het openen.

Je kunt elk PML-bestand openen, ongeacht of je het op je lokale computer hebt vastgelegd of niet, door eenvoudig naar het menu Bestand te gaan en Openen te kiezen en het PML-bestand te selecteren.

Je kunt logs vanaf de opdrachtregel openen met de /OpenLog-schakelaar bijvoorbeeld procmon.exe /OpenLog C:\MijnLogBestand.pml.

Gebeurtenissen automatisch vastleggen

In het vorige gedeelte heb je geleerd hoe je gebeurtenissen naar een log kunt exporteren nadat je ze hebt vastgelegd. Maar wat als je van tevoren weet dat je gebeurtenissen in een PML-, XML- of CSV-bestand wilt hebben? Je kunt procmon automatisch gebeurtenissen laten vastleggen in een van die logbestandsindelingen.

Eveneens is het opslaan van gebeurtenissen in het paginabestand prima als je bezig bent met een eenvoudige ad-hoc probleemoplossingssessie die minder dan een uur duurt. Deze methode heeft echter enkele nadelen.

  1. Telkens wanneer je procmon afsluit, zijn de gebeurtenissen verdwenen.
  2. Zoals eerder vermeld, kan de grootte van je paginabestand uit de hand lopen.

Als je virtueel geheugen als opslaglocatie gebruikt, kun je ontdekken hoeveel ruimte er over is voor procmon om te gebruiken door te klikken op Bestand —> Ondersteuningsbestanden.

Wat te doen? Verander de opslaglocatie.

Gebeurtenissen op schijf opslaan

Je kunt wijzigen waar procmon gebeurtenissen opslaat vanuit je paginabestand naar schijf door:

  1. Stop een vastlegging als je er momenteel een uitvoert.

2. Klik op Bestand —> Back-upbestanden. U ziet dan een overzicht van opgeslagen gebeurtenissen en grootte, samen met een optie om de opslaglocatie te wijzigen.

Process Monitor Backing Files

3. Om de opslaglocatie naar een bestand te wijzigen, klik op het veld Gebruik bestand met naam:, klik op de drie puntjes en definieer een bestandslocatie.

Probeer een ander schijfvolume te gebruiken dan waarop Procmon wordt uitgevoerd voor de beste prestaties.

U kunt Procmon dwingen om een bestand als opslaglocatie te gebruiken door het ook vanaf de opdrachtregel te starten en de schakelaar /BackingFile te gebruiken. Als u ooit wilt terugschakelen naar het gebruik van het paginabestand, gebruikt u de schakelaar /PagingFile.

Logbestanden converteren

Procmon kan logbestanden opslaan in drie verschillende formaten: PML, CSV en XML. Misschien heeft u een logbestand opgeslagen als PML en moet u de gebeurtenissen analyseren met een script of ander hulpprogramma. In dat geval kunt u dat PML-logbestand op de opdrachtregel converteren naar XML of CSV.

Laten we zeggen dat u een PML-logbestand hebt op C:\capture.pml. U wilt dit logbestand converteren naar XML en één in CSV-indeling. U kunt dit doen door eerst het logbestand te openen met de schakelaar /OpenLog en vervolgens een schakelaar /Save* te gebruiken om het op te slaan.

Procmon heeft een standaardparameter /SaveAs waarmee u een logbestand in een van de drie eerder genoemde formaten kunt opslaan. De parameter /SaveAs stelt het bestandsformaat in afhankelijk van de bestandsextensie die u opgeeft.

Hier zijn enkele voorbeelden:

Converteer het logboek capture.pml naar capture.xml:

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

Converteer het logbestand capture.pml naar capture.csv:

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

Herinner je je nog de opties voor stack trace en stack symbol resolution in het dialoogvenster Opslaan naar bestand hierboven? Je kunt deze opties ook inschakelen met behulp van /SaveAs1 en /SaveAs2.

Je kunt alleen stack traces en symboolinformatie opslaan in XML-indeling.

Converteer het logbestand capture.pml naar capture.xml inclusief stack-informatie:

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

Converteer het logbestand capture.pml naar capture.xml inclusief stack-informatie met symbolen:

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

Weet dat het toevoegen van stack traces en symbolen de conversietijd aanzienlijk zal verhogen en dat je ongetwijfeld een voortgangsindicator zult zien zoals hieronder weergegeven.

Progress Indicator

Gebeurtenissen bij het opstarten vastleggen

Soms wordt de benodigde informatie niet gegenereerd terwijl Windows draait. Misschien moet je ook onderzoeken wat een proces doet wanneer Windows net opstart.

Het is gebruikelijk om problemen zoals langzame opstartprestaties of mogelijk malware die direct wordt uitgevoerd bij het opstarten van Windows te moeten oplossen. Procmon heeft een functie genaamd Boot Time Logging die je kunt inschakelen om deze informatie vast te leggen.

Om het opstarten vast te leggen, klik je op Opties —> Enable Boot Logging in het menu zoals hieronder weergegeven.

Enabling boot logging

Zodra je op Enable Boot Logging klikt, verschijnt er een dialoogvenster waarin optionele informatie wordt gevraagd. In dit dialoogvenster kun je thread-profileringsgebeurtenissen vastleggen.

Het inschakelen van thread-profileringsgebeurtenissen is een geavanceerd gebruiksscenario. Wanneer u thread-profileren inschakelt, legt procmon thread-stacktraces en CPU-gebruik vast die u kunt gebruiken om de bron van CPU-gerelateerde prestatieproblemen te identificeren.

Optional thread-profiling events for boot time logging

Zodra u op OK klikt, zal procmon het opstartlogboek inschakelen, wat de filterdriver (hierover later meer) opdraagt te wachten op de volgende herstart van Windows. Wanneer u Windows opnieuw opstart, zal procmon vervolgens procesgebeurtenissen vastleggen alsof u het handmatig had geïnitieerd.

Alle gegevens van gebeurtenissen tijdens het opstarten worden opgeslagen in een tijdelijk logbestand met de naam C:\Windows\procmon.pmb.

Wanneer Windows weer is opgestart, opent u procmon opnieuw. U zou een dialoogvenster moeten zien zoals hieronder. Klik hier op Ja om de gegevens van het opstarten om te zetten naar het PML-formaat door vervolgens het logbestand te selecteren om de gegevens in op te slaan.

Confirmation to convert boot-time events to PML

Terwijl procmon de gegevens omzet, ziet u een voortgangsbalk zoals hieronder.

Converting boot-time event data to PML

Vergeet niet om procmon opnieuw te openen na een herstart! Procmon zal beginnen met het vastleggen van gebeurtenissen zodra Windows opstart in C:\Windows\procmon.pmb. Het zal dit blijven doen totdat u het uitschakelt door procmon opnieuw te openen.

Procmon op afstand uitvoeren

Hoewel procmon alleen lokaal op een Windows-machine draait, kunt u procmon op afstand laten uitvoeren via psexec of de Invoke-Command-opdracht van PowerShell.

Gerelateerd: PsExec: De Ultieme Gids, Invoke-Command: De Beste Manier om Externe Code uit te Voeren

Om procmon uit te voeren met het Invoke-Command-commando van PowerShell, volg de volgende stappen:

  1. Activeer PowerShell Remoting op de externe machine indien nog niet ingeschakeld.

2. Kopieer de procmon-map naar de externe computer via de PowerShell-console.

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

3. Roep procmon aan via PowerShell en zorg ervoor dat je de EULA-bevestiging overslaat en procmon dwingt om gebeurtenissen op te slaan in een back-upbestand in plaats van virtueel geheugen, en vraag niet om het filter bij het starten.

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

4. Op dit punt is procmon begonnen met vastleggen. Reproduceer het probleem dat je probeert vast te leggen.

5. Stop procmon op de externe computer door de /Terminate-schakelaar te gebruiken.

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

6. Wacht tot procmon is afgesloten. Als snelkoppeling kun je periodiek controleren op het procmon-proces en de controle teruggeven aan de PowerShell-console wanneer het voltooid is.

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

7. Kopieer het externe logbestand naar de lokale computer

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

Op dit moment heb je het extern uitgevoerde logbestand op je lokale computer!

Als je een juist PowerShell-script wilt om deze vastlegging te beheren, kun je het hieronder vinden.

[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
 }

Instellen van Langdurige Procmon-vastleggingen

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.

Gefilterde gebeurtenissen uitsluiten

Wanneer procmon een vastlegging uitvoert, worden alle gebeurtenissen vastgelegd. Je kunt gebeurtenisfilters maken en toepassen, maar deze filters verbergen alleen de gebeurtenissen op het scherm; ze voorkomen niet dat procmon ze vastlegt.

Als u van plan bent langlopende procmon-captures uit te voeren, is het altijd een goed idee om Gefilterde gebeurtenissen negeren te kiezen uit het Filter-menu zoals hieronder weergegeven.

Drop Filtered Events

Zodra u het item Gebeurtenissen negeren selecteert, begint procmon onmiddellijk alle gefilterde gebeurtenissen te negeren. Procmon toont ze niet op het scherm, slaat ze niet op in het virtuele geheugen of een logbestand. Het volledig negeren van ongewenste gebeurtenissen helpt bij het besparen van middelen.

Geavanceerde onderwerpen

Heb je nog steeds zin in meer informatie over procmon en hoe je het moet gebruiken? Laten we ons verdiepen in enkele geavanceerde onderwerpen! Deze onderwerpen zijn waarschijnlijk niet iets waar je vaak mee te maken krijgt. Ze hebben betrekking op meer onderliggende kenmerken van procmon, maar deze informatie kan handig zijn bij het oplossen van problemen met procmon.

Filterdrivers

Om gebeurtenissen vast te leggen, registreert en gebruikt procmon een filterdriver via de Windows Filter Manager (FltDrv). Deze filterdriver, genaamd PROCMON24, wordt geïnstalleerd wanneer u een capture start. Soms kan deze filterdriver conflicteren met andere toepassingen.

Nadat u procmon hebt gestart, opent u een verhoogde PowerShell-console of opdrachtprompt en voert u fltmc filters uit. Het hulpprogramma fltmc vermeldt, laadt en lost filterdrivers. Wanneer u dit uitvoert, ziet u de geladen PROCMON24-filter zoals hieronder weergegeven.

Let op de Hoogte van PROCMON24 is standaard 385200 met andere filters die een lager nummer hebben. De filter driver hoogte vertegenwoordigt het niveau waarop een filter driver gebeurtenissen kan “zien”. Bijvoorbeeld, een gebeurtenissen die plaatsvinden op het wcifs, luafv of Wof niveau, procmon zal niet in staat zijn te zien. Meer over het veranderen hiervan later.

Procmon 24

De PROCMON24 filter driver blijft geladen, zelfs wanneer procmon niet actief is.

Soms kan procmon problemen ondervinden bij het laden van een filter driver. Om problemen op te lossen, open procmon met de /NoConnection schakelaar om te voorkomen dat procmon verbinding maakt met de filter driver.

Het ontladen van de PROCMON24 Filter Driver

Er zijn enkele gevallen waarbij de PROCMON24 filter driver in conflict kan komen met verschillende hardwareapparaten en je zult het moeten ontladen. Maar, deze situatie kan niet zo eenvoudig zijn als het lijkt.

Je kunt filter drivers ontladen met het fltmc unload commando gevolgd door de naam van de filter driver.

fltmc unload PROCMON24

Maar als je het bovenstaande commando probeert, zul je al snel ontdekken dat het niet werkt. Je kunt deze filter driver niet ontladen omdat vermoedelijk de ontwikkelaar deze mogelijkheid niet heeft toegevoegd.

Can’t Unload the Filter

Als je de PROCMON24 filter driver moet ontladen, is een herstart, helaas, de enige manier om dit te doen.

Stack Traces

Soms zijn eenvoudige gebeurtenissen zoals het lezen van een registerwaarde, het openen van een bestand of het aanroepen van een netwerkadres niet diepgaand genoeg. Je moet dieper graven en de geschiedenis van de daadwerkelijke Windows API-functieaanroepen bekijken die een proces aanroept. Je moet naar de stack trace van een proces kijken.

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

Met een lijst van gebeurtenissen die worden weergegeven in Procmon, dubbelklik je op een gebeurtenis en klik je op het Stack-tabblad zoals hieronder getoond. Het Stack-tabblad vertegenwoordigt functieaanroepen die het individuele proces heeft aangeroepen op het moment dat de gebeurtenis plaatsvond.

Stack Tab

Het onderwerp van stack traces kan lang doorgaan. Als je meer wilt leren over het begrijpen van de call stack van een proces, bekijk dan het artikel Betere stack traces krijgen in Process Monitor

Het wijzigen van de Altitude van Procmon (Lagere-Level Gebeurtenissen Vastleggen)

Zoals eerder besproken, gebruikt Procmon een filterstuurprogramma om gebeurtenissen vast te leggen. Ook al lijkt het misschien dat Procmon elke Windows-gebeurtenis vastlegt (er zijn veel gebeurtenissen die in het Procmon-venster verschijnen!), dat doet het niet. Procmon legt alleen gebeurtenissen vast waarvan het filterstuurprogramma op de hoogte is of waarvan de altitude van het filterstuurprogramma zich bevindt.

Als je bijvoorbeeld antivirusactiviteiten, opslag op laag niveau en andere hardwaregebeurtenissen op laag niveau wilt vastleggen, moet je de altitude van het PROCMON24-filterstuurprogramma lager maken dan de andere.

Om dat te doen:

  1. Zorg ervoor dat Procmon gesloten is.

2. Zoek de laagste hoogte van de momenteel geladen filterstuurprogramma’s met het fltmc commando.

fltmc filter

3. Wijzig de Altitude registerwaarde onder de HKLM\System\CurrentControlSet\Services\PROCMON24\Instances\Process Monitor 24 Instance register sleutel naar 100 minder dan de laagste hoogtewaarde (om alle gebeurtenissen te zien).

Afhankelijk van de versie van procmon die je hebt geïnstalleerd, kan de registerlocatie veranderen. Deze handleiding gebruikt Procmon 2.4.

Je kunt een verhoogde PowerShell-sessie openen en de onderstaande codefragment uitvoeren om de waarde snel te wijzigen.

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

Hoe lager je de hoogte instelt, hoe meer gebeurtenissen je zult moeten beheren. Stel de hoogte niet lager in dan nodig is.

4. Ontzeg Verwijderen en Waarde instellen rechten voor Iedereen op de Process Monitor 24 Instance sleutel. Wanneer procmon opnieuw wordt uitgevoerd, zal het proberen de Altitude waarde terug te zetten naar standaard. Je kunt deze machtigingen wijzigen via het regedit hulpprogramma of gewoon het onderstaande PowerShell-fragment uitvoeren.

$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. Ontlaad het PROCMON24 filterstuurprogramma door Windows opnieuw op te starten.

6. Start procmon.

7. Open een PowerShell-console of opdrachtprompt en voer fltmc filters uit. Je zou nu het procmon filterstuurprogramma op de nieuwe hoogte moeten zien.

PowerShell console or command prompt

Je kunt nu vastleggen wat je maar nodig hebt. Als je de Hoogte van procmon verlaagt naar het laagst mogelijke niveau, wees dan voorbereid op het evenement moesson!

Voorbeelden uit de echte wereld

Je zou nu een goed begrip moeten hebben van wat procmon kan doen en hoe het je kan helpen bij het opsporen van Windows-gebeurtenissen. Laten we die kennis nu toepassen en een paar veelvoorkomende gevallen behandelen waarin je deze knowhow nodig zou kunnen hebben.

Het vinden van wat een bestand verwijdert

Als je een bestand op je Windows-machine hebt dat om een ​​onbekende reden steeds wordt verwijderd en je het wilt opsporen, kan procmon helpen (en het is vrij eenvoudig).

Misschien heb je procmon geopend en geprobeerd een gebeurtenisbestand genaamd Verwijderen of Verwijderen bestand in te stellen, maar tot je teleurstelling bestaat zo’n bewerking niet. Om verwijdergebeurtenissen voor bestanden te vinden, moet je in plaats daarvan filteren op gebeurtenissen met een Operatie van:

  • SetDispositionInformationFile
  • SetDispositionInformationEx

Als je systeem veel bestanden verwijdert, wil je ook de gebeurtenissen voor bestandsverwijdering beperken tot de bestandsnaam of het pad met behulp van het Pad-filter.

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

Het opsporen van problemen met vergrendelde bestanden

We zijn er allemaal geweest; je probeert een bestand te verplaatsen of te verwijderen en het is vergrendeld door een ander proces. Soms, als je bijvoorbeeld probeert een toepassing te verwijderen, weet je nooit of die willekeurige fout die je ziet iets te maken heeft met een vergrendeld bestand in de eerste plaats!

Om erachter te komen wanneer Windows probeert een vergrendeld bestand te verwijderen of te wijzigen, gebruik je de onderstaande filterset.

Operation is CreateFile        Include
Result    is SHARING VIOLATION Include

Problemen oplossen bij toepassingen die beheerdersrechten vereisen

Werk je met een toepassing die volgens de documentatie zou moeten werken, maar dat niet doet? We zijn allemaal wel eens in die situatie geweest. Soms vereist een proces dat door de toepassing wordt gestart verhoogde rechten, maar vertelt het je niet waar of hoe. Je kunt Procmon starten om te helpen.

Één manier om processen op te sporen die worden geweigerd vanwege vereiste verhoogde rechten, is door te filteren op het Resultaat van een gebeurtenis.

Telkens wanneer een gebeurtenis plaatsvindt die wordt geweigerd vanwege het ontbreken van verhoogde rechten, zie je meestal een resultaat van TOEGANG GEWEIGERD. Wetende dit, kun je eenvoudig een eenvoudige filter maken die alle gebeurtenissen met een Resultaat van TOEGANG GEWEIGERD laat zien, zoals hieronder wordt getoond.

Result is ACCESS DENIED Include

Vanaf hier voeg je meer filters toe, zoals register- of map-pad met de Pad-attribuut ook.

Het proces vinden dat toegang krijgt tot een IP-adres

Misschien heb je wat vreemd netwerkgedrag met Wireshark en moet je uitzoeken welk proces die communicatie initieert. Start procon op en voeg de volgende set filterregels toe.

Deze filterregels beperken gebeurtenissen tot alleen lokaal geïnitieerd netwerkverkeer met een bestemming van een enkel IP-adres.

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

Problemen met langzaam opstarten oplossen

Soms is Windows traag bij het opstarten. Die traagheid kan worden veroorzaakt door veel verschillende Windows-onderdelen, geïnstalleerde toepassingen, enzovoort. Met de mogelijkheid voor opstartlogboekregistratie van Procmon kun je het probleem opsporen en oplossen.

  1. Enable boot-logging. U kunt ontdekken hoe u dit kunt doen in de sectie Capture Boot-Time Events hierboven.

2. Op het dialoogvenster Enable Boot Logging moet u ervoor zorgen dat het selectievakje Generate thread profiling events is aangevinkt. De radioknop Every second zou goed genoeg moeten zijn.

Enabling thread profiling events on boot

3. Na een herstart opent u procmon, klikt u met de rechtermuisknop op een willekeurige kolom en kiest u Select Columns.

4. Op het vak Process Monitor Column Selection vinkt u Duration aan. Als u dit doet, kunt u zien hoe lang elk evenement duurde om uit te voeren.

Process Monitor Column

5. Nu kunt u een filterregel maken voor Duration voor een aantal seconden dat u voldoende acht. De onderstaande filterregel geeft alleen gebeurtenissen weer die langer dan vijf seconden duurden.

filter rule on Duration

6. Tot slot, een andere nuttige manier om deze trage gebeurtenissen te onderzoeken, is door procmon’s Process Tree te gebruiken. De Process Tree toont relaties tussen ouder- en kindprocessen en bevat de start- en eindtijd van elk proces. Om het te vinden, klikt u op Tools —> Process Tree.

Process Tree

7. Eenmaal in de Process Tree, bekijk nu de kolom Life Time die in een grafische indeling de duur van elk proces laat zien. U kunt ook tijdsintervallen opmerken door de kolommen Start Time en End Time in deze weergave te vergelijken.

Lifetime Column

Troubleshooting App-V Applications

Veel organisaties maken gebruik van de Microsoft App-V-service om toepassingen te virtualiseren en implementeren naar eindgebruikers. Als je App-V gebruikt, is er een handige (en niet-gedocumenteerde) procmon-schakelaar die je moet kennen, genaamd /externalcapture.

Het gebruik van .\procmon.exe /ExternalCapture neigt meer registratieactiviteit rond App-V-toepassingen vast te leggen. Probeer deze schakelaar uit als je problemen hebt met het vinden van wat je zoekt bij het oplossen van App-V-toepassingen!

De /HookRegistry-schakelaar zou naar verluidt hetzelfde doel dienen als /ExternalCapture, maar het werkt niet meer op 64-bits machines.

Samenvatting

Nou, daar heb je het; een uitgebreide gids over alles wat te maken heeft met procmon! Hoewel je veel hebt geleerd over procmon, zijn er altijd meer waardevolle tips te ontdekken met deze handige tool.

Als je suggesties hebt voor updates of wijzigingen aan deze Ultieme Gids, neem dan contact met me op via Twitter en laat het me weten!

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