Як подружитися з procmon, smearg

Напевно, кожен поважаючий себе ІТ-шник знає (або хоча б чув) про Process Monitor (ProcMon) від Sysinternals.

Нещодавно розповідав одному юному падаванів як користуватися цим чудовим, а в деяких випадках незамінним інструментом. І поки розповідав прийшла в голову думка написати таку вступну інструкцію для тих, хто тільки починає свій тернистий шлях адміна.

Взагалі, на мою думку все, що стосується ProcMon найкраще описано в книзі від розробників, яка так і називається "Програми Sysinternals. Довідник адміністратора ".

Я ж не буду лізти в нетрі, і спробую викласти з мінімумом теорії, і максимумом практики на конкретному прикладі.

запуск ProcMon

По-перше, я не рекомендую запускати ProcMon просто так, щоб подивитися, що він робить, і як виглядає. Я вам і так скажу, що він робить цитатою з книги:

Реєструє активність файлової системи, реєстру, мережі, процесів, потоків, а також завантаження образів в реальному часі.

Якщо просто запустити ProcMon робоче вікно програми моментально заповнився різними подіями, навіть якщо ви нічого не робите. Розібратися в цих подіях, і знайти цікаві навіть досвідченому майстрові дуже складно. Та й не потрібно, але про все по порядку.

Найчастіше ProcMon запускається з конкретною метою, наприклад, визначити, що робить та, чи інша програма, який процес пише файли в певний каталог або гілку реєстру, куди дівається місце на диску, і т.д. Тому, якщо просто запус ProcMon то доведеться зупинити збір подій (Ctrl + E), очистити вже зібрані події (Ctrl + X), налаштувати фільтри (Ctrl + L), і знову запустити спостереження. Для того, щоб не робити стільки зайвий рухів передбачений параметр командного рядка / noconnect.

Запуск з цим параметром запускає Procmon, але не починає спостереження, замість цього відразу ж відкривається вікно фільтрів.

Взагалі для спрощення запуску, я роблю (і всім раджу робити так) як описується все в тій же книзі:

Фільтри в ProcMon

Як було сказано вище вікно фільтрів під час відкривання з параметром / noconnect. Якщо ви не скотитися закрили, або потрібно підправити вже налаштовані фільтри, відкрити вікно фільтрів можна сполучення клавіш Ctrl + L. або через меню Filter | Filter ....

Ось ми і дісталися до практики 🙂

Як моніторити реєстр я вже розповідав. тому сьогодні будемо вчитися моніторити файлову систему. Для прикладу будемо відслідковувати які зміни робить стандартний блокнот.

Отже, у нас відкрито вікно фільтрів.

Про всяк випадок натискаємо кнопку скидання фільтрів в стан за замовчуванням - Reset (за замовчуванням в ProcMon налаштоване до фіга фільтрів, не рекомендується їх видаляти) і додаємо фільтр

Process Name is notepad.exe include.

Натискаємо кнопку Add. Як можна зрозуміти з назви захоплюватися будуть тільки події, пов'язані з процесом notepad.exe, тобто ті події, які генерує блокнот.

Важливий момент: ім'я процесу повинно бути вказано повністю - з розширенням, інакше ProcMon нічого не захопить. Як варіант можна використовувати фільтр

Process Name begins with notepad include

В такому випадку будуть захоплені події, пов'язані з процесами, які починаються часткою на notepad, це може бути як стандартний блокнот, так і Notepad ++. або який-небудь ще блокнот. Таким же чином додаємо фільтр на запис файлів:

Operation is WriteFile include

Натискаємо Add і OK (взагалі можна просто натиснути OK. В такому випадку ProcMon скаже, що такого фільтра ще немає, і запитає хочемо-ми його додати. Справа в тому, що натискання кнопки закриває OK вікно фільтрів, якщо це не єдиний фільтр, то краще натиснути кнопку Add. це дозволить додати фільтр, і залишити вікно фільтрів відкритим для подальших фільтрів).

Так як нас цікавить тільки файлова активність, в головному вікні ProcMon відключаємо значки спостереження за реєстром, мережею і процесами - залишаємо тільки спостереження за файловою системою (виділені на скріншоті нижче).

Ще один важливий момент.

За замовчуванням ProcMon реєструє всю активність системи, навіть ті події, які не потрапляють під фільтри, що в деяких випадках може призводити до подтормаживанию роботи. Якщо ви впевнені в тому, що фільтри налаштовані правильно (в даному прикладі ми впевнені), і вам не потрібні події, приховані ними - їх можна відкинути за допомогою опції Filter | Drop Filtered Events (Видалення відфільтрованих подій) в меню Filter. Даний параметр діє тільки на реєстрацію поточних подій, раніше записані події з журналу будуть збережені.

Після того як фільтри налаштовані запускаємо збір подій (кнопка із зображенням лупи, або Ctrl + E). Запускаємо блокнот, пишемо якийсь текст і зберігаємо файл. Дивимося, що вийшло:

Як подружитися з procmon, smearg

Файлова активність в ProcMon

Як видно з Скриншоти ProcMon зафіксував подію записи файлу процесом notepad.exe по шляху C: \ temp \ test.txt.

Проведемо ще один експеримент.

Зупинимо захоплення подій (Ctrl + E), з акро блокнот і очистимо зібрані події (Ctrl + X). Викличемо вікно Фільт (Ctrl + L), скинемо фільтри (кнопкою Reset) і додамо наступний фільтр:

Path begins with c: \ temp \

Цим самим ми вказуємо, що нас цікавить будь-яка активність по шляху C: \ temp. А так як значення вказано неточно (Не is. А begins with), то захоплюватися будуть події не тільки з цього каталогу, але і з усіх його підкаталогів.

Перевірте, щоб було включено спостереження тільки за файлової системою (при скиданні фільтрів все скидається в стан за замовчуванням)

Як подружитися з procmon, smearg

Фільтри в ProcMon

Запустимо спостереження. Відкриємо провідник і перейдемо нашим шляхом. Заглянемо в ProcMon.

Як подружитися з procmon, smearg

Так виглядає відкриття каталогу в ProcMon

Там буде купа незрозумілих нам подій, але вони нам і не потрібні, просто подивіться скільки подій відбувається, коли ви всього лише заходите в каталог.

Можете відкрити файл і подивитися яка плутанина буде в ProcMon. Ось чому я ніколи не раджу запускати ProcMon тільки для того, щоб подивитися, що там відбувається в системі.

Для того, щоб побачити самі події читання файлу, зупиніть збір подій, очистіть вікно результатів, додайте фільтр

Operation is ReadFile

і знову відкрийте файл.

Має вийти, щось на зразок цього (як видно з скріншоту я відкривав файл двома різними процесами):

Як подружитися з procmon, smearg

А ось так виглядає читання файлу в ProcMon

Ось таким простим способом можна дізнатися хто пише файли в певний каталог. Ще раз зазначу, що це не все, на що здатний ProcMon, це тільки верхівка айсберга. Для ближчого знайомства з ним рекомендую почитати книгу "Програми Sysinternals. Довідник адміністратора ", а також шукати додаткову інформацію в інтернеті, наприклад, на YouTube. або TechDays. До речі, на TechDays є записи від самого Марка Русиновича з українським перекладом 🙂