מדריך לשימוש בסיסי בתוכנת Procmon

Authors
  • Name
    YossiZ
    Published on
    Twitter

מה זה PROCMON?

Procmon ‏(Process Monitor) היא תוכנת ניטור שניתן לנטר באמצעותה אירועים במערכת ווינדוס.
שימושי מאוד לדיבוג תקלות.
אילו אירועים אפשר לנטר?

  • קבצים: פתיחה, סגירה, כתיבה, קריאה, מחיקה, ועוד
  • מפתחות רג'יסטרי: פתיחה, סגירה, כתיבה, קריאה, מחיקה, ועוד
  • רשת: אירועי רשת, חיבור, ניתוק, האזנה, שליחה, קבלה ועוד
  • תהליכים: הרצת תהליך, טעינת DLL, יצירת thread, סיום תהליך/thread ועוד

כל אירוע מלווה בשלל מידע שימושי. מזהה תהליך, מזהה thread, צילום של ה-stack (מאוד שימושי!) ועוד.
ישנן אפשרויות מתקדמות לסינון האירועים.

מאיפה מורידים?

https://docs.microsoft.com/en-us/sysinternals/downloads/procmon
התוכנה היא קובץ אחד (שמכילה בתוכה: גירסת x64 של התוכנה, וכן גירסאות x68 ו-x64 של הדרייבר שהתוכנה צריכה. התוכנה מחלצת מתוכה את הקבצים הנצרכים בזמן ריצה!). אין צורך בהתקנה.

הרצה

קליק כפול על קובץ התוכנה, אם נתבקש נאשר הרצה כמנהל - לא ניתן להריץ אותה בלי הרשאות ניהול - וזהו, אנחנו בפנים!
(בהרצה ראשונה צריך לאשר את תנאי השימוש).
הערה: אם אתה מבין מה זה stack trace וברצונך לעשות בו שימוש כדאי שתגדיר גם debugging symbols בתפריט options ‏> ‏configure symbols...‎

החלון הראשי

כך נראה החלון הראשי בעת הפתיחה הראשונה:

1577827679855-bbe444e1-23f4-4534-92b9-48fbb6fb1c78-image.png

נשים לב לאיזור העיקרי - הוא מכיל רשימה של אירועים. הרשימה הולכת וגדלה כל שניה בעוד אלפי אירועים!
בשורת המצב מוצג מספר האירועים שהוקלטו, וכמה מתוכם מוצגים:
1577827824404-3ec62d90-b746-4b1d-86d2-12850b2210ed-image.png
אז דבר ראשון נפסיק את ההקלטה לפני שהמספר יגיע למאות מליונים!
לחיצה על 1577827894126-fdaed507-8ea4-4413-9963-e81676c76f2b-image.png מפסיקה את ההקלטה. לחיצה נוספת תתחיל אותה שוב.

עכשיו נסביר בקצרה על הרשימה.
כל שורה מייצגת אירוע אחד. בברירת מחדל העמודות שמופיעות הן:

  • Time of Day: "השעה:דקה:שניה.מילי שניה" של האירוע
  • Process Name: שם התהליך שגרם לאירוע
  • PID: מזהה התהליך (לפעמים יש כמה תהליכים עם אותו שם. אפשר להבחין ביניהם על ידי המזהה)
  • Operation: סוג האירוע. האייקון מצביע על הסוג הכללי (רג'יסטרי, קובץ, תהליך, או רשת). הטקסט מצביע על הסוג הפרטי, פתיחת קובץ קריאת קובץ וכו' וכו' (יש עשרות...)
  • Path: הנתיב של ה{קובץ, מפתח רג'יסטרי} או ה-IP + פורט + כיוון של תעבורת הרשת.
  • Result: תוצאת הפעולה. SUCCESS = הצלחה. אם לא הצליח, כתוב קוד השגיאה.
  • Detail: פרטים נוספים משתנים לפי סוג הפעולה.

נעבור בקצרה על האייקונים בסרגל:

  • 1577868624080-fa70531b-8bd8-4b86-9827-2b64cf7a9a23-image.png פתיחת הקלטה שנשמרה
  • 1577868673467-418e3be9-9ec0-405c-9771-c65b3f1274e6-image.png שמירת הקלטה
  • 1577868698495-c24642be-40d6-43ce-af98-cc1be5940817-image.png התחל/עצור הקלטה
  • 1577868720378-0ff24ec4-aa92-46bb-a3c4-105567661c4f-image.png הפעל השבת גלילה אוטומטי של הרשימה
  • 1577868752522-1378f7ac-93a7-4cad-9b68-05e9fded0d24-image.png נקה רשימה
  • 1577868769228-1230f81b-c687-4699-ac65-a55ceb4fb8a3-image.png הגדרת סינון
  • 1577868802025-b66923d5-159f-4163-9032-88cdd70619e4-image.png הגדרת סימון שורות לפי תנאים
  • 1577868833300-c29520f6-77d1-4d74-b182-8ace382a5e8d-image.png אפשר לגרור את האייקון על גבי חלון של תוכנה וזה יוסיף את מזהה התוכנה ההוא לסנן הפעיל
  • 1577868879535-e7e7ecf5-5f9b-4270-9eec-effdc341efc8-image.png פותח חלון עם רשימת התהליכים שהיו פעילים בעת ההקלטה
  • 1577868925242-d0b3b632-b05a-451a-a986-ca6f39e2462c-image.png חיפוש תיבה ברשימה
  • 1577868940290-4ccf0ccb-095f-4def-b61c-cdfa3a2a4610-image.png פותח את הנתיב של השורה הנוכחי
  • 1577868966042-511884cc-9245-4262-aae3-5cd31fa526a2-image.png הפעלה/השבתה של סוגי אירועים: רג'יסטרי, קובץ, רשת, תהליך, profiling (לא נדבר על profiling בהדרכה זו)

סינון

עכשיו נגדיר מסנן. נלחץ על 1577828015016-e77437b0-089a-4f4f-922b-e2d432942a99-image.png

בברירת מחדל מוגדרים כבר כמה מסננים. מומלץ להשאיר אותם.
לכל מסנן יש 4 שדות:
1577869164537-10acba35-9e84-4a8c-9882-6d9bee6ec297-image.png

  1. הראשון הוא בחירת השדה לפיו נסנן. יש המון אופציות. העיקריים הם
    • Process Name: לסנן לפי שם התהליך
    • PID: לפי מזהה תהליך במקרה שיש כמה תהליכים של אותו תוכנה
    • Operation: לסנן לפי אירוע
    • Path: סינון לפי נתיב קובץ/מפתח רג'יסטרי
  2. בחירת סוג תנאי לפיו נסנן:
    • is/is not: הערך המלא תואם/לא תואם לתנאי
    • less than/more than: על שדות של מספרים הערך שוה יותר/פחות מהערך של התנאי
    • begins with/ends with: הערך מתחיל ב/מסתיים בהערך של התנאי
    • includes/excludes: הערך של התנאי נמצא/לא נמצא איפשהו בערך של השדה
  3. פה נמלא את הערך של התנאי, כלומר שהתוכנה תבדוק את השדה שבחרנו ב-① מול מה שנכתוב כאן ולפיו יקבע אם התנאי מתקיים או לא. האופציות פה משתנות לפי מה שבחרנו בשדה ①.
    לדוגמה, אם ב-① בחרנו Operation, כאן נוכל למלאות אחד מהאירועים הזמינים, התפריט מתמלא עם הרשימה הזמינה של אירועים אפשריים. אם בחרנו בשדה ① Path, נמלא פה נתיב או חלק מנתיב (לפי מה שבחרנו בשדה ②)
  4. כאן נבחר אם קיום התנאי יגרום לשורה להופיע (include) או לא להופיע (exclude).

הערה: אף פעם לא עמדתי על צורת ההרכבה של תנאים מרובים... האם זה OR או AND או האם אפשר לחבר חלק ב-OR וחלק ב-AND (לא נראה לי אפשרי, הלוואי...)... ניסוי וטעיה פשוט אמור להביא את התשובה... אם מישהו מתנדב לבדוק אשמח!

דוגמה

ועכשיו נעבור על דוגמה פשוטה.
נניח שאנחנו רוצים לראות איפה שמורות ההגדרות של רקע שולחן העבודה.

  • נפתח את הגדרות המערכת על הדף של רקע שולחן עבודה.
  • נפתח את procmon ונגדיר סינון כמו בתמונה:
    • לחיצה על reset כדי לאפס את הסינון לברירת המחדל
    • נגדיר סינון על שדה path שהנתיב יכלול את המילה wallpaper (טפט). סביר להניח שאם הגדרות רקע שמורות ברג'יסטרי או בקובץ כלשהו שהנתיב יכלול את המילה הזאת.
    • אחרי הגדרת סינון צריך ללחוץ add להוסיף אותו לרשימה.
    • נעשה עוד סינון על אירוע שכולל את המילה set או write. זה יכלול רק פעולות של כתיבה לקובץ (WriteFile) או למפתח רג'יסטרי (RegSetValue). זה יוריד אלפי אלפים של שורות של קריאה. אנחנו מעוניינים רק בכתיבה ולא בקריאה.

1577871381988-54e39cfc-5b31-4a39-8b0d-09d47284b8e9-image.png

  • אישור
  • עכשיו מתחילה ההקלטה
  • נעבור לחלון ההגדרות ונשנה רקע שולחן העבודה. נפסיק את ההקלטה.
  • נסתכל על הרשימה - והנה הסוד מתגלה לעינינו...
    HKCU\Control Panel\Desktop\Wallpaper

הערה: שימו לב שלא סיננתי לפי מזהה או שם התהליך של ההגדרות. אם הייתי עושה כן לא היה מתקבל שום תוצאה. הסיבה היא שתוכנת ההגדרות לא עושה את השינוי בעצמה אלא שולחת מסר לתהליך explorer.exe על מנת לבצע את השינוי.

הערה: במדריך זה כיסינו רק שימוש בסיסי בתוכנה. מומלץ מאוד לעבור על קובץ העזרה, וגם לקרוא בבלוג של יוצר התוכנה על עוד דוגמאות לשימוש בתוכנה (בד"כ הדוגמאות נמצאות בפוסטים שהכותרת שלהם מתחילה במילים ‎"The case of..."‎).

בהצלחה!