Як подружитися з 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
Як видно з Скриншоти 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
Запустимо спостереження. Відкриємо провідник і перейдемо нашим шляхом. Заглянемо в ProcMon.

Так виглядає відкриття каталогу в ProcMon
Там буде купа незрозумілих нам подій, але вони нам і не потрібні, просто подивіться скільки подій відбувається, коли ви всього лише заходите в каталог.
Можете відкрити файл і подивитися яка плутанина буде в ProcMon. Ось чому я ніколи не раджу запускати ProcMon тільки для того, щоб подивитися, що там відбувається в системі.
Для того, щоб побачити самі події читання файлу, зупиніть збір подій, очистіть вікно результатів, додайте фільтр
Operation is ReadFile
і знову відкрийте файл.
Має вийти, щось на зразок цього (як видно з скріншоту я відкривав файл двома різними процесами):

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