2.5 ממשק WMI הרצאה
קונספט: WMI¶
מה זה WMI?¶
ממשק WMI (Windows Management Instrumentation) הוא ממשק של מיקרוסופט לניהול המערכת והתקני חומרה במחשב. מדובר במערכת שמאפשרת שליפה של מידע לגבי המחשב, מערכת ההפעלה, המכשירים, התוכנות, ולמעשה כל דבר שקשור למערכת ההפעלה של Windows. WMI מספקת ממשק אחיד למפתחי תוכנה ואדמיניסטרטורים לשלוף נתונים על המערכת בצורה פשוטה באמצעות שאילתות WQL (WMI Query Language).
שפת WQL¶
שפת WQL (Windows Management Query Language) היא שפה דמוית SQL שמאפשרת שליפה של מידע מ-WMI. אם אתם מכירים SQL, השפה הזו תראה לכם מאוד מוכרת. השימוש בשפה זו מאפשר לנו לשלוף אובייקטים ונתונים מתוך המערכת בצורה גמישה ויעילה.
- כדי לראות את כל האובייקטים שאפשר לשלוף עליהם הורידו את התוכנה: wmi-explorer:
https://www.bleepingcomputer.com/download/wmi-explorer/
זה יתקין לכם zip שמכיל את הexe, עשו לו extract והריצו:

התוכנה אמורה להיראות כך:

לחצו על connect בשמאל למעלה, יופיע בפניכם כל הnamespace-ים של wmi, בכל אחד מהם אמור להיות רשימה של class-ים שמצייגים דברים במערכת ההפעלה, ועליהם נוכל לשלוף עם WQL.
לחצו על הnamespace שנקרא ROOT\CMIV2:

אפשר לראות שקיבלנו רשימה של כל הclass-ים שנמצאים בCIMv2, זה למעשה הnamespace שנשתמש בו הכי הרבה, הוא מכיל את כל הדברים הכי רלוונטים בגלל שCIMv2 זה פורמט מוכר (והיסטורי) שנכתב בעבר שמכיל רשימה של כל האובייקטים הכי רלוונטים במערכת הפעלה.
כתבו בquick filter את המחלקה: Win32_Process, היא מחלקה שאמורה לתת מידע על כל התוכנות שרצות במחשב, לחצו על המחלקה הזו.

- אפשר לראות בצד ימין שיש פה רשימה של כל הinstance-ים של המחלקה, או במילים אחרות את כל התוכנות שרצות במחשב, אפשר לראות בtab-ים שנמצאים מעל הרשימה הזו שאפשר לראות את הproperties והmethods של הclass הזה.
- בואו נלמד כיצד לשלוף על הclass הזה עם WQL בpowershell:
שליפה על WMI עם WQL בpowershell¶
- הריצו בpowershell את הפקודה הבאה:
- פקודה זו שולפת באמצעות שפת WQL על הclass בwmi שנקרא Win32_process שמכיל מידע על כל התוכנות שרצות במחשב, אם תריצו תראו שזה מפוצץ לנו את הshell במלא, אבל מלא מידע. ראינו שקיבלנו רשימה של כל התוכנות, ניגש לדוגמה רק לפרוסס אחד, באמצעות פקודה כזו:
- אפשר לראות שבאחד הproperties קיבלנו את Name, שמכיל את השם של התוכנה, אפשר לדייק את השאילתה כדי לקבל רק את notepad, (אם הוא פתוח, אם לא תפתחו)
- אז שליפות עם wql על wmi יכולים לספק לנו המון מידע הכרחי על מערכת ההפעלה, למעשה בווינדוס המון פעמים אם יש לנו שם וסיסמא למחשב ווינדוס אחר ברשת שלנו, יש מצבים שבהם נוכל לשלוף שאילתות wmi על המחשב המרוחק, זה יכול לעזור לנו אם אנחנו רוצים לנטר על דברים שקורים במחשב שלנו, או על מחשבים אחרים ברשת. וגם למטרות זדוניות.
- בbatch אנחנו יכולים לשלוף על wmi באמצעות הפקודה
wmic.exe, מוזמנים לקרוא עלייה.
איך WMI עובד מאחורי הקלעים?¶
- ה-WMI עובד באמצעות מידע שנשמר בקבצים, הנקראים ה-"Repository". המידע שנשמר כאן הוא מידע סטטי לגבי ה-Classes השונים, והוא נמצא בנתיב
C:\Windows\System32\wbem\Repository. - המידע על תוכנות שרצות במחשב, כמו
Win32_Process, לא נשמר ב-Repository, כי זה מידע דינמי שיכול להשתנות כל הזמן. במקום זאת, ה-WMI שולף את המידע הזה בזמן אמת, כלומר, כאשר אנחנו מבצעים שליפה על ה-WMI, אנחנו מקבלים את המידע ישירות מהמחשב בזמן הריצה.
שני סוגי שליפות ב-WMI:¶
- שליפה סטטית: מידע שנשמר בקבצי ה-repository. לדוגמה, פרטים על מחלקות, התקני חומרה, שירותים ועוד.
- שליפה דינמית: מידע שמשתנה כל הזמן, כמו תהליכים שרצים במערכת, ולא נשמר בקבצים, אלא נשלף ישירות מהמחשב בזמן הריצה.
קבצי MOF ו-DLL:¶
איך כל זה קורה? אם נלך לתקייה C:\Windows\System32\wbem אנחנו נראה שיש שם המון קבצי mof, וקבצי dll.
- קבצי MOF הם קבצים טקסטואליים שמכילים את ההגדרות עבור המחלקות השונות ב-WMI. כל מחלקה ב-WMI מוגדרת בקובץ MOF, ואתם יכולים להוסיף מחלקות חדשים אם תרצו.
- קבצי DLL מכילים את הקוד שרץ כאשר שולפים דינמית אובייקטי WMI (מדובר רק על השליפות הדנימיות כמו Win32_Process). יש בהם קוד שאחראי לשלוף דינמית את המידע על אובייקט WMI מסויים. (למשל קוד שאחראי להביא מידע על התוכנות במחשב ברגע השליפה על האובייקט)
שימושים של WMI:¶
- ניטור מערכת: באמצעות WMI אפשר לנטר את מצב המחשב, לדוגמה, על ידי שליפת נתונים אודות תהליכים רלוונטיים או שימוש בזיכרון.
- ניהול מרוחק: עם הרשאות מתאימות, ניתן לשלוף נתונים מ-WMI גם ממחשב מרוחק, מה שיכול להיות שימושי לניהול וניטור מחשבים ברשת.
סיכום:¶
מנגנון WMI הוא חזק, יעיל ומספק ממשק אחיד לשליפה, ניהול וניטור מידע על מערכת ההפעלה ומחשבים ב-Windows. הוא מאפשר שליפות גמישות ודינמיות ב-PowerShell באמצעות WQL ומסייע בניהול המערכת בצורה אוטומטית וממוקדת.