Process Monitor

Process Monitor

Autor: Robert Żuber

Opublikowano: 9/13/2008, 12:00 AM

Liczba odsłon: 19419

Pakiet Microsoft Sysinternals dostarcza wiele znakomitych narzędzi, pomocnych ciut bardziej doświadczonym użytkownikom systemów Windows, w zgłębieniu wiedzy o zachodzących procesach w użytkowanym systemie. Oprócz walorów czysto edukacyjnych, umieszczone w pakiecie programy pozwalają również, we współpracy z użytkownikiem, rozwiązać wiele problemów, na które napotykamy się w codziennej pracy. Po Process Explorer, którego test przeprowadziliśmy dla Państwa jakiś czas temu, przyszedł czas na omówienie kolejnego z gamy znakomitych programów diagnostycznych z tej rodziny. Bohaterem tego artykułu będzie tym razem Process Monitor. Oprócz szczegółowego opisania jego możliwości, przedstawimy również jeden z możliwych scenariuszy, w którym program okazać się może pożyteczny.

Wprowadzenie

Process Monitor, chociaż napisany został na nowo, od podstaw, jest połączeniem, swoistą hybrydą funkcji dostępnych przedtem w dwóch narzędziach skonstruowanych przez ojców Sysinternals, Panów Marka Russinovicha oraz Bryce’a Cogswella, mianowicie Filemon i Regmon. Oprócz funkcji, które oferują wspomniane aplikacje dodano również szereg innych, nowych usprawnień. Program jest zaawansowanym narzędziem monitorującym w czasie rzeczywistym aktywność powiązań składników systemowego rejestru, uruchomionych procesów i otwartych przestrzeni systemu plików. Może być używany przez administratorów w celu dostarczania szczegółowych informacji na temat obserwowanego procesu, jak i całego systemu.

Użytkownicy, którzy mieli okazję korzystać ze starszych wersji, zauważą wiele zaimplementowanych ulepszeń. Nowościami jakie wdrożono w stosunku do pierwowzorów są:

  • Monitorowanie statusów wejścia i wyjścia procesów i wątków, wliczając kod statusu wyjściowego
  • Monitorowanie ładowanych obrazów bibliotek DLL i sterowników urządzeń jądra systemu
  • Większa ilość porównywanych parametrów wejścia/wyjścia
  • Bezpieczne stosowanie filtrów zapewnia ochronę zebranych danych
  • Konfigurowalne i ruchome kolumny dla każdego ze zdarzeń
  • Filtry mogą być stosowane dla każdego pola, wliczając w to pozycje nie skonfigurowane jako kolumny
  • Zaawansowana architektura monitoringu pozwala na tworzenie dużych logów, zawierających nawet dziesiątki milionów zdarzeń
  • Drzewo procesów pokazuje powiązania występujące między procesami w trakcie analizy
  • Kompatybilność z plikami logów tworzonymi przy pomocy starszych wersji programu
  • Dymek ze szczegółowymi informacjami o procesie
  • Okienko podpowiedzi pozwalające na łatwy dostęp do sformatowanych danych , które nie uwzględniono w kolumnach
  • Monitorowanie w czasie uruchamiania

Oręż w dłoń... do dzieła!

Najnowszą wersję programu pobrać możemy z Działu pobierania. Aplikacja nie posiada instalatora, jedynym krokiem jaki musimy wykonać, aby ją uruchomić jest wypakowanie plików ze ściągniętego archiwum i uruchomienie pliku Procmon.exe. Niestety menu nie zostało spolszczone, ale nie powinno to w znaczący sposób wpłynąć na prostotę użytkowania.

Interfejs programu zawiera belkę z najpotrzebniejszymi i zarazem najczęściej używanymi opcjami, pod którą zlokalizowano główne okno aplikacji, gdzie znalazło się miejsce dla wychwyconych w trakcie monitorowania zdarzeń. Każdemu wejściu przyporządkowano szereg szczegółów, które wyświetlane są w kolumnach obok. Informacje zawierają po kolei numer sekwencji, czas zdarzenia, nazwę procesu i jego PID, rodzaj operacji (otwieranie, tworzenie, nadawanie wartości, zamykanie klucza/lokalizacji), ścieżkę (w rejestrze lub na dysku lokalnym), rezultat, oraz szczegółowy opis.

Przywołany pasek z przyciskami zawiera następujące opcje:

  1. Open – otwiera logi programu zapisane w plikach .PML i .PMB
  2. Save – zapisuje log programu
  3. Capture (Ctrl + E) – uruchamia oraz wyłącza proces zapisywania zdarzeń
  4. Autoscroll (Ctrl + A) – automatyczne przesuwanie
  5. Clear (Ctrl + X) – czyszczenie okna
  6. Filter (Ctrl + L) – uruchamia okno stosowania filtrów ograniczających wyniki
  7. Highlight (Ctrl + H) – zaznaczanie kolorem wyników spełniających założone kryteria
  8. Include Process From Window – pozwala wybierać pośród otwartych okien aplikacji proces, który życzymy sobie uwzględnić w porównaniu
  9. Find (Ctrl + F) – przeszukiwanie
  10. Jump To Object (Ctrl + J) – przechodzi do ścieżki w rejestrze lub na dysku
  11. Show Registry Activity – pokazuje wejścia dotyczące rejestru
  12. Show File System Activity – wyświetla zdarzenia z udziałem lokalizacji
  13. Show Process and Thread Activity – uwzględnia procesy i wątki
  14. Show Profiling Events – pokazuje zmiany w sferze profili użytkownika

Mechanizm filtrowania i podświetlania

Funkcjonalnością, bez której ProcMon byłbym praktycznie bezużyteczny, lub w znacznym stopniu upośledzony, jest wbudowana funkcja tworzenia kwerend, za pomocą których możemy w znaczący sposób ułatwić sobie analizę zebranych informacji. W toku tworzenia logu programu (Capture) wyświetlane zostają wszystkie wykonane akcje. Jest ich zazwyczaj bardzo wiele, w takiej ilości wyników bardzo trudno odnaleźć dane, które będą istotne. Pomocna w takim wypadku będzie wspomniana funkcja filtrowania. Wybierając przycisk Filter ujrzymy okno, którego poprawne wypełnienie sprawi, że zawężone zostaną wyniki monitorowania.

Pierwsza lista rozwijana zdefiniować pozwala charakter poszukiwań, to znaczy, czy mechanizm ma przetworzyć dane na podstawie np. nazwy pliku, numeru PID, unikalnego ID, ścieżki, wersji, czy nazwy firmy. Lista jest dość długa i zawiera szereg możliwych do wyboru kryteriów. Pole wyboru obok służy do określenia czy wpisana do wyszukania fraza zawierać winna dokładnie taki ciąg znaków (is) i odwrotnie, wskazane jest, aby nie występował (is not), poniżej oraz powyżej określonej wartości (less than oraz more than), rozpoczyna się (begins with) oraz kończy (ends with) określonymi znakami jak również zawiera (contains) oraz nie zawiera (exclude) wskazanego ciągu. Lista najbardziej po prawej mieści tylko dwie opcje. Wybranie Include powoduje, że skonfigurowany filtr będzie wyświetlał wyłapany wątek na liście po przetworzeniu, natomiast Exclude przyniesie odwrotny skutek, pośród wyników, element spełniający podane kryteria zostanie ukryty. Skonfigurowany element dodajemy do listy przyciskiem Add. Możliwe jest tworzenie sekwencji kwerend, co może maksymalnie zawęzić grono potencjalnie poszukiwanych zdarzeń. Po naciśnięciu przycisku OK aplikacja rozpocznie przeszukiwanie tworzonego non stop dziennika i wyświetli dane spełniające założone przez użytkownika kryteria. Skonfigurowane dane można zapisywać, służy ku temu opcja Save filter w menu Filter. Gdy zaistnieje przymus przeinstalowania systemu, możemy również utworzone filtry wyeksportować do pliku, a następnie ponownie je wgrać. Potrzebne opcje znajdziemy w Filter, Organize filters.

Opcja podświetlania w menu Filter, Highlight działa bardzo podobnie do opisanego wyżej filtrowania, z tą jednak różnicą, że wydarzenia spełniające założenia zostają wyróżnione na tle wszystkich innych określonym kolorem, który zdefiniować można w menu Options, Highlight colors.

Inne opcje

Miejsce przechowywanej bazy danych oraz dane jej dotyczące

Wybierając File, Backing Files wywołamy okienko konfiguracji logu programu. Domyślnie jest on tworzony z udziałem pliku stronicowania (pagefile), ale program może zapisywać go również w zdefiniowanym przez użytkownika miejscu. Dodatkowo w miejscu tym wyświetlane zostają dane dotyczące aktywnego pliku logu, to jest np. ilość rekordów lub wielkość bazy w bajtach.

Unikalne rekordy

Opcja Tools, Unique values pozwala na wyświetlenie poszczególnych rekordów z podziałem na kryteria, bez powtórek.

Dodatkowe kolumny

W menu Options, Select columns będziemy mogli wybrać typy danych, jakie wyświetlać się będą w kolumnach w głównym oknie programu.

Analiza podczas uruchamiania

Opcja Enable Boot Logging w podmenu Options pozwoli aktywować opcję śledzenia zdarzeń, począwszy od momentu ładowania się systemu operacyjnego.

Po teorii odrobina praktyki

Program wykorzystać możemy np. w celu dowiedzenia się, w jakim kluczu rejestru zapisywane zostają zmiany poczynione w jednym z apletów systemu Windows, lub z aplikacji wchodzącej w jego skład, ale nie tylko. Po krótkim wprowadzeniu spróbujmy zastosować omówioną funkcjonalność w prostym scenariuszu. Wykorzystamy tutaj popularny Notatnik i opcję zmiany domyślnej czcionki oraz jej wielkości. Zanim go jednak uruchomimy powinniśmy upewnić się, że Process Monitor, jest aktywny i monitoruje system. Będzie to sygnalizował brak X na ikonie Capture na belce zawierającej główne przyciski. Wykonajmy kolejno następujące kroki:

  1. Otwórzmy notepad
  2. Napiszmy kilka dowolnych znaków
  3. Wybierzmy menu Format, Czcionka, a następnie:

    a. Z listy dostępnych krojów zaznaczmy np. Calibri
    b. Zmieńmy wielkość czcionki na powiedzmy 20
    c. Wciśnijmy OK

  4. Po wprowadzeniu zmian możemy zapisać plik i zamknąć edytor, nie będzie już w kolejnych krokach potrzebny
  5. Przejdźmy do Process Monitor
  6. Zatrzymajmy proces tworzenia listy przeprowadzanych operacji naciskając przycisk Capture w taki sposób, aby na ikonie pojawił się znak X

W tym momencie zaprzestaliśmy dalszego rozrostu logu programu, aby ograniczyć do absolutnego wymaganego minimum ilość różnorakich akcji, jakie zostały wykonane w procesie zmiany domyślnej czcionki i jej wielkości w systemowym Notatniku. Teraz pozostało jedynie w odpowiedni sposób przetworzyć zebrane informacje, aby rozwikłać zagadkę, jaką sobie postawiliśmy na początku tego akapitu. Mianowicie w jakim zakamarku rejestru program składuje dane, które w poprzednim kroku konfigurowaliśmy poprzez menu w graficznym interfejsie.

Jeżeli przypadkowo zamknęliśmy procmon, musimy ponowić wcześniejszy proces, jeżeli jednak pozostawiliśmy go uruchomionego, możemy teraz przejść do filtrowania zebranych informacji.

Ustaliliśmy, że wprowadzone zmiany zapisują się w dwóch z wartości rejestru, wyłączmy więc pokazywanie w głównym oknie programu pozostałego rodzaju zdarzeń z udziałem systemu plików (Show File System Activity), procesów i wątków (Show Process and Thread Activity), oraz profilów (Show Profiling Events). Zauważmy, że w tym momencie wszystkie dostępne typy operacji rozpoczynają się od Reg. Dane możemy przetworzyć na dwa sposoby. Wprost z głównego okna używając menu kontekstowego prawego przycisku dla jednej z akcji i wybraniu Include/Exclude. Spowoduje to otwarcie okna Filter z już wstępnie uzupełnionymi polami, w zależności od zdarzenia jakie wybierzemy z głównego okna. Możemy również samodzielnie uzupełnić wszystkie dane i z tego sposobu skorzystamy w tym przykładzie.

  • Wciśnijmy w tym celu przycisk Filter
  • Dla pewności zresetujmy wszystkie poprzednio używane filtry przyciskiem Reset
  • Wybierzmy opcję Process Name w kolumnie typu danych
  • Zaznaczmy is w polu relacji
  • Wpiszmy Notepad.exe w tekstowym polu wartości
  • Z listy akcji wybierzmy Include
  • Naciśnijmy Add
  • Potwierdźmy przyciskiem Apply

Zastosowanie filtra spowodowało, że lista została znacznie uszczuplona, pozostały na niej jedynie zdarzenia, w których jako nazwa procesu wyszczególniony został notepad. Możliwości znacznie mniej, ale nadal nic pewnego. Dodajmy więc dodatkowe zastrzeżenia. Jak pamiętamy w kolumnie akcji widzieliśmy szereg nazw typu RegQueryValue, RegCloseKey, RegEnumValue, RegSetValue. Jak sama nazwa wskazuje, dotyczą one takich operacji na rejestrze, jak otwieranie, zamykanie itp. Szczególnie powinna zainteresować nas opcja RegSetValue - nadawanie wartości, bo właśnie tym trybem następuje zmiana konfiguracji, które przeprowadzaliśmy. Spróbujmy to wykorzystać dodając w analogiczny do poprzedniego sposób kolejną kwerendę.

  • Ponownie wywołajmy aplet filtrów
  • Wybierzmy opcję Operation w kolumnie typu danych
  • Zaznaczmy is w polu relacji
  • Wpiszmy RegSetValue w tekstowym polu wartości
  • Z listy akcji wybierzmy Include
  • Naciśnijmy Add
  • Potwierdźmy przyciskiem Apply

W ten oto sposób pozostało niewiele możliwości do wyboru. Przyjrzyjmy się więc kolumnie szczegółów (z ang. Detail) oraz ścieżce (z ang. Patch), ponieważ zawierają one znajome dane. Ścieżka odwołuje się do lokalizacji HKCU\Software\Microsoft\Notepad, która już powinna dać wiele do myślenia, a jeżeli spojrzymy na szczegóły, odnajdziemy napis Calibri i wartość IfFaceName oraz iPointSize, w której to wartości zapisana została wielkość czcionki. Tym sposobem odnaleźliśmy informacje, których poszukiwaliśmy. W podobny sposób możemy również rozwikłać zagadkę nadawania uprawnień w rejestrze oraz dla plików na dyskach NTFS.

Pamiętajmy, że wciskanie przycisków zmiany rodzaju wyświetlanych typów operacji jest bezinwazyjne. Znaczy to, że akcje, których w tym momencie sobie nie życzymy, nie zostają bezpowrotnie wykasowane z logu programu, a jedynie ukryte. Ponadto wychodząc z programu warto zapisać skonfigurowane kryteria, a następnie zresetować filtry, tak aby po ponownym uruchomieniu nie zakłócały one pracy programu ukrywając informacje, które akurat w innym przypadku będą ważne.

Podsumowanie

Prosty przykład jaki zaprezentowaliśmy to jedynie namiastka prawdziwych możliwości programu. Z pomocą opcji wbudowanych w Process Monitor możemy praktycznie od środka zaobserwować szereg procedur, jakimi rządzą się operacje , które na co dzień wykonujemy korzystając z systemu operacyjnego. Wobec tych faktów niczym specjalnie niezwykłym wydaje się być fakt, że ProcMon jest jednym z najchętniej wybieranych aplikacji pakietu Microsoft Sysinternals Suite.

Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży
Jak wykorzystać Copilot w codziennej pracy? Kurs w przedsprzedaży

Wydarzenia