مرحبًا. بعد أن ثبتنا قاعدة التصريح القانوني وجهزنا آلة Windows افتراضية معزولة مع لقطة استعادة نظيفة، حان وقت التعرف إلى النظام من منظور المحلل. قبل فتح أي ملف تدريبي في Ghidra أو تشغيله تحت مصحح أخطاء، نحتاج إلى إجابة أسئلة أولية: ما الملفات الموجودة في مجلد المختبر؟ ما العمليات النشطة؟ وما الخدمات التي تعمل في الخلفية؟
في هذا الدرس ستستخدم PowerShell لجمع هذه المعلومات بطريقة منظمة وقرائية فقط. ستتعلم التعامل مع ثلاثة أوامر مركزية: Get-ChildItem للملفات والمجلدات، وGet-Process للعمليات، وGet-Service للخدمات. في نهاية الدرس ستتمكن من كتابة ملاحظات أولية قابلة لإعادة الإنتاج عن حالة بيئة المختبر، دون تغييرها.
PowerShell: لا تجمع نصًا فقط، بل كائنات
افتح Windows PowerShell داخل الآلة الافتراضية المخصصة للمختبر. لا تحتاج إلى تشغيله كمسؤول لتنفيذ أوامر الاستعراض الأساسية في هذا الدرس. إن رفض Windows عرض خاصية معينة لعملية لا تملكها، دوّن ذلك بوصفه قيد صلاحيات؛ لا ترفع الصلاحيات تلقائيًا لمجرد إزالة رسالة خطأ.
تتبع معظم أوامر PowerShell نمطًا واضحًا: فعل ثم اسم. مثلًا:
Get-ChildItem: اجلب العناصر الفرعية في موقع ما.Get-Process: اجلب العمليات.Get-Service: اجلب الخدمات.
القيمة المهمة هنا أن هذه الأوامر لا تعيد سطور نصية جامدة فقط، بل تعيد كائنات لها خصائص مثل الاسم، والمسار، والحجم، والمعرف، والحالة. تستطيع تمرير هذه الكائنات عبر الرمز | إلى أمر آخر لاختيار خصائص محددة أو ترتيب النتائج.
مثال بسيط:
Get-Process -Name notepad | Select-Object Id, ProcessName, Path
الأمر الأول يجلب عملية Notepad، ثم يعرض الأمر الثاني ثلاث خصائص فقط: المعرف، والاسم، ومسار الملف التنفيذي.
اقرأ أولًا جدول أوامر وحدة الإدارة الرسمية من Microsoft. لا تحفظ الجدول كله؛ المطلوب أن تربط أسماء الأوامر بوظائفها الأساسية.
Microsoft.PowerShell.Management Module - PowerShell
اقرأ جدول Microsoft.PowerShell.Management Cmdlets من Microsoft Learn لفهم نمط أوامر الإدارة في PowerShell وتحديد الأوامر الثلاثة التي سنستخدمها.
في قسم Microsoft.PowerShell.Management Cmdlets، انتقل داخل الجدول إلى مدخل Get-ChildItem، ثم مدخل Get-Process، وأخيرًا مدخل Get-Service. ركّز على الفرق بين ما يستعرضه كل أمر، لا على الأوامر التي تغيّر النظام مثل Stop-Process أو Restart-Service.
عندما تنسى صيغة أمر، لا تعتمد على التخمين. استخدم المساعدة المدمجة، وهي متاحة محليًا:
Get-Help Get-ChildItem -Examples
Get-Help Get-Process -Examples
Get-Help Get-Service -Examples
استعراض الملفات والمجلدات باستخدام Get-ChildItem
في تحليل البرامج، يبدأ الفحص الساكن غالبًا من الموقع: أين وُجد الملف؟ ما اسمه؟ متى عُدّل؟ ما حجمه؟ هذه ليست أدلة قاطعة على وظيفة الملف، لكنها تشكل وصفًا أوليًا مفيدًا قبل حساب البصمة أو فتح الملف في محرر سداسي عشري.
يعرض الأمر التالي محتويات مسار محدد:
Get-ChildItem -Path "C:\Users\labuser\Documents"
استبدل labuser باسم حساب المختبر الخاص بك، أو استخدم المتغير $HOME الذي يشير عادة إلى مجلد المستخدم الحالي:
Get-ChildItem -Path "$HOME\Documents"
يعرض PowerShell عادةً أعمدة مثل:
| العمود | معناه العملي |
|---|---|
Mode | صفات العنصر، ومنها كونه ملفًا أو مجلدًا وبعض السمات الأخرى |
LastWriteTime | آخر وقت تعديل مسجل للعنصر |
Length | حجم الملف بالبايت؛ يظل فارغًا عادةً للمجلدات |
Name | اسم الملف أو المجلد |

انتبه إلى نقطتين مهمتين:
- الاسم والامتداد ليسا حقيقة الملف. قد يسمى الملف
report.txtبينما يكون محتواه مختلفًا، وقد يحمل برنامج امتدادًا مضللًا. سنتحقق من المحتوى والبصمة لاحقًا. - وقت التعديل قرينة وليس إثباتًا. يمكن تغييره بالنسخ أو الأدوات أو اختلاف ساعة النظام. سجله، لكن لا تبنِ استنتاجًا حاسمًا عليه وحده.
شاهد الآن الجزء العملي من فيديو «PowerShell Quick Tips: Get-ChildItem» لقناة JackedProgrammer. يركز على الاستعراض المعتاد، والملفات المخفية، والنزول إلى المجلدات الفرعية، والتصفية حسب النوع.
PowerShell Quick Tips : Get-ChildItem
شاهد هذا الجزء لتتعرف بصريًا إلى أثر الخيارات الأساسية لـGet-ChildItem عند استعراض مجلدات حقيقية، خصوصًا -Force و-Recurse و-File.
شاهد استعراض الملفات. ركز على الفرق بين الاستعراض المباشر للمجلد، وإظهار العناصر المخفية بـ-Force، والنزول في المجلدات الفرعية بـ-Recurse، وقصر النتائج على الملفات بـ-File. تجاهل في هذا الدرس الجزء اللاحق المتعلق بالسجل والشهادات.
خيارات تحتاجها في المختبر
لعرض الملفات فقط، دون المجلدات:
Get-ChildItem -Path "$HOME\Documents" -File
لعرض المجلدات فقط:
Get-ChildItem -Path "$HOME\Documents" -Directory
لعرض العناصر المخفية أيضًا:
Get-ChildItem -Path "$HOME\Documents" -Force
لا يعني -Force أن PowerShell “يكسر” حماية الملفات أو يمنحك صلاحيات إدارية؛ في هذا السياق هو يطلب عرض العناصر المخفية وعناصر النظام التي لا تظهر في الاستعراض الافتراضي.
للبحث داخل المجلدات الفرعية، استخدم -Recurse. احصر النطاق دائمًا في مجلد المختبر بدل استخدامه على القرص C:\ كاملًا؛ الاستعراض الواسع ينتج ضوضاء كبيرة، وقد يواجه مسارات محمية، ولن يفيدك في تحليل ملف تدريبي واحد.
Get-ChildItem -Path "$HOME\Documents" -Recurse -File
إذا أردت ملفات ذات امتداد محدد، فلتكن النية واضحة في الأمر:
Get-ChildItem -Path "$HOME\Documents" -Recurse -File -Filter "*.exe"
ولكي تحصل على سجل موجز يمكن نقله إلى ملاحظات التحليل، اختر الحقول ذات الصلة بدل عرض كل شيء:
Get-ChildItem -Path "$HOME\Documents" -Recurse -File |
Select-Object Name, Extension, Length, LastWriteTime, FullName
الخاصية FullName مهمة جدًا؛ فوجود اسم متشابه لا يكفي. في التحليل، المسار الكامل يميز مثلًا بين ملف مشروع داخل مجلد المختبر وملف آخر يحمل الاسم نفسه في مجلد مختلف.
العمليات: ما الذي يعمل الآن؟
العملية (Process) هي نسخة قيد التنفيذ من برنامج. عندما تفتح Notepad، لا تكتفي Windows بوجود ملف notepad.exe على القرص؛ بل تنشئ عملية لها معرف خاص وذاكرة وموارد نظام وسياق تنفيذ.
لهذا السبب، تحليل الملفات وحده لا يكفي. قد يكون ملف ما موجودًا في القرص لكنه لم يُشغّل قط، وقد تكون عملية ما نشطة الآن وموضعها أو خصائصها تستحق التدقيق.
Get-Process

العرض الافتراضي يتضمن أعمدة مهمة:
| العمود | ما الذي يوضحه؟ | ملاحظة تحليلية |
|---|---|---|
Handles | مراجع مفتوحة إلى موارد نظام مثل ملفات أو كائنات أو مقابض | رقم مرتفع وحده ليس دليلًا على السوء |
NPM(K) | ذاكرة غير قابلة للترحيل بالـKB | معلومة استهلاك ذاكرة متخصصة |
PM(K) | ذاكرة قابلة للترحيل بالـKB | لا تفسرها وحدها كاستهلاك حقيقي كامل |
WS(K) | مجموعة الذاكرة العاملة للعملية بالـKB | مؤشر تقريبي للصفحات المستخدمة حديثًا |
CPU(s) | مجموع وقت المعالج المستخدم منذ بدء العملية | ليس نسبة استخدام لحظية للمعالج |
Id | معرف العملية، أو PID | يتغير بين مرات التشغيل ويمكن إعادة استخدامه |
SI | معرف الجلسة | يساعد على التفريق بين جلسات المستخدمين |
ProcessName | اسم العملية | غالبًا يظهر دون الامتداد .exe |
شاهد الجزء التالي من فيديو «Intro to PowerShell: Investigating Windows Processes» لقناة The Cyber Mentors. الهدف هنا ليس افتراض أن كل عملية غريبة خبيثة، بل تعلم اختيار معلومات مفيدة وفصل الإشارة عن الضوضاء.
Intro to PowerShell: Investigating Windows Processes
يعرض هذا المقطع استخدام Get-Process لفهم العمليات النشطة، ثم يشرح التصفية بالاسم أو المعرف واختيار خصائص مثل المسار والوصف.
شاهد مخرجات العمليات لفهم أعمدة Get-Process ومعنى PID ووقت CPU. ثم شاهد التصفية والعرض لتتعلم التصفية باسم العملية أو رقمها واستخدام Select-Object وFormat-List عند قص الأعمدة الطويلة.
الوصول إلى عملية معروفة
بدل فحص عشرات العمليات دفعة واحدة، ابدأ بعملية تعرفها. مثلًا، بعد فتح Notepad:
Get-Process -Name notepad
يمكن حذف اسم الوسيط -Name لأنه الموضع الأول في هذا الأمر، لكن الصيغة الصريحة أوضح للمبتدئ:
Get-Process -Name notepad
تستطيع استخدام محرف المطابقة * عندما تعرف جزءًا من الاسم فقط:
Get-Process -Name "note*"
وللتعامل مع عملية محددة بدقة، استخدم PID:
Get-Process -Id 1234
استبدل 1234 بالرقم الذي ظهر لك. لا تنس أن PID ليس هوية دائمة للبرنامج؛ عند إغلاق العملية قد يختفي المعرف، وقد يُعطى لاحقًا لعملية أخرى.
يمكنك أيضًا تحديد عملية جلسة PowerShell الحالية نفسها عبر المتغير التلقائي $PID:
Get-Process -Id $PID
اختيار المعلومات المفيدة بدل قراءة جدول مزدحم
عند استعراض عملية تملكها، جرّب:
Get-Process -Name notepad |
Select-Object Id, ProcessName, Path, StartTime, CPU, WorkingSet |
Format-List
استخدم Format-List عندما تريد أن ترى المسار الكامل دون أن يختصره الجدول.
قد تظهر قيمة فارغة للمسار أو رسالة رفض وصول عند فحص بعض عمليات النظام. هذا متوقع أحيانًا، خصوصًا دون صلاحيات إدارية أو عند وجود اختلاف في معمارية العملية وبيئة PowerShell. لا تحوّل غياب الخاصية تلقائيًا إلى مؤشر خبيث.
لترتيب العمليات حسب الذاكرة العاملة، استخدم:
Get-Process |
Sort-Object -Property WorkingSet -Descending |
Select-Object -First 10 ProcessName, Id, WorkingSet
هذه قائمة ترتيبية مفيدة، لكنها ليست حكمًا أمنيًا. متصفح الويب أو أداة تحليل كبيرة قد تستهلك ذاكرة كثيرة بصورة طبيعية. التحليل الجيد يجمع عدة قرائن: الاسم، المسار، التوقيت، السلوك، ونتائج الفحص الساكن لاحقًا.
الخدمات: برامج خلفية يديرها Windows
الخدمة (Service) مكوّن يعمل في الخلفية أو يُشغّل عند الحاجة تحت إدارة Windows. بعض الخدمات تنفذ داخل عملية مستقلة، وبعضها قد يشارك عملية استضافة مع خدمات أخرى. لذلك، لا تساوِ بين اسم الخدمة واسم عملية واحد بصورة تلقائية.
يعرض الأمر التالي قائمة الخدمات:
Get-Service
الحقول الأساسية هي:
| الحقل | معناه |
|---|---|
Status | الحالة الحالية، مثل Running أو Stopped |
Name | الاسم الداخلي الذي تستخدمه الأوامر والبرامج |
DisplayName | الاسم الوصفي الذي يظهر عادة في واجهة Windows |
للحصول على عرض مرتب وقابل للقراءة:
Get-Service |
Sort-Object Status, Name |
Select-Object Status, Name, DisplayName
إذا كنت تعرف الاسم الداخلي لخدمة، مثل خدمة وقت Windows التي يكون اسمها المعتاد w32time:
Get-Service -Name w32time
أما إن كنت تعرف الاسم المعروض فقط، فاستخدم -DisplayName:
Get-Service -DisplayName "*Windows Time*"
هناك فرق أساسي بين شيئين:
Statusيصف ما إذا كانت الخدمة تعمل الآن.- إعداد البدء يصف ما إذا كانت الخدمة مضبوطة لتبدأ تلقائيًا أو يدويًا أو معطلة.
يعرض Get-Service الحالة الأساسية جيدًا، لكن للحصول على إعداد البدء والمسار التنفيذي في استعلام قرائي واحد، يمكن استخدام Get-CimInstance:
Get-CimInstance -ClassName Win32_Service -Filter "Name='w32time'" |
Select-Object Name, DisplayName, State, StartMode, PathName |
Format-List
هذا لا يشغّل الخدمة ولا يوقفها؛ إنه يجمع معلومات فقط. ستفيدك خاصية PathName لاحقًا عند ربط خدمة بملف تنفيذي معيّن، لكن لا تستنتج أن المسار وحده يثبت موثوقية الملف.
في هذا الدرس، لا تستخدم أوامر مثل Stop-Service أو Restart-Service أو Set-Service. توقف خدمة غير مناسبة قد يعطل نظام المختبر أو يغيّر الحالة التي تحاول توثيقها.
مختبر عملي: بناء خط أساس صغير لآلة المختبر
خصص نحو 20 دقيقة للتطبيق التالي داخل الآلة الافتراضية فقط. لا تحتاج إلى عينة تنفيذية أو ملف غير موثوق؛ سننشئ ملفات نصية تعليمية غير ضارة ونجمع وصفًا أوليًا للحالة.
1. أنشئ مجلدًا تدريبيًا آمنًا
انسخ الأوامر التالية بالتتابع:
$lab = Join-Path $HOME "RE-Lab"
New-Item -ItemType Directory -Path "$lab\Files\Nested" -Force
Set-Content -Path "$lab\Files\alpha.txt" -Value "training note"
Set-Content -Path "$lab\Files\Nested\beta.log" -Value "nested record"
المتغير $lab يحتفظ بمسار مجلد التدريب داخل حسابك الحالي. استخدمناه حتى لا تكتب مسارًا طويلًا كل مرة.
2. اجمع قائمة الملفات
ابدأ بالاستعراض المباشر:
Get-ChildItem -Path "$lab\Files"
ثم اجمع الملفات داخل المجلدات الفرعية مع معلوماتها الأساسية:
Get-ChildItem -Path "$lab\Files" -Recurse -File |
Select-Object Name, Extension, Length, LastWriteTime, FullName
وأظهر ملفات النص فقط:
Get-ChildItem -Path "$lab\Files" -Recurse -File -Filter "*.txt" |
Select-Object Name, Length, LastWriteTime, FullName
دوّن في ملاحظاتك المسار الكامل لـalpha.txt وحجمه ووقت آخر تعديل. هذه هي نفس البنية التي ستستخدمها لاحقًا عند وصف ملف تدريبي مصرح به.
3. افحص عملية تتحكم بها أنت
افتح الملف باستخدام Notepad:
notepad.exe "$lab\Files\alpha.txt"
واترك Notepad مفتوحًا، ثم نفّذ:
Get-Process -Name notepad |
Select-Object Id, ProcessName, Path, StartTime, CPU, WorkingSet |
Format-List
سجّل PID والمسار ووقت البداية. بعد ذلك، أغلق Notepad وأعد تنفيذ الأمر نفسه. ستلاحظ أن النتيجة تختفي، لأن العملية انتهت. هذه تجربة صغيرة تثبت أن العملية حالة وقت تشغيل وليست مجرد ملف موجود على القرص.
افحص أيضًا جلسة PowerShell الحالية:
Get-Process -Id $PID |
Select-Object Id, ProcessName, Path, StartTime |
Format-List
4. افحص خدمة واحدة وخدمات النظام عمومًا
ابدأ بقائمة منظمة:
Get-Service |
Sort-Object Status, Name |
Select-Object Status, Name, DisplayName
ثم افحص خدمة وقت Windows:
Get-Service -Name w32time |
Format-List Status, Name, DisplayName
ولعرض إعداد البدء والمسار المرتبط بها، نفّذ:
Get-CimInstance -ClassName Win32_Service -Filter "Name='w32time'" |
Select-Object Name, State, StartMode, PathName |
Format-List
إذا لم تجد الخدمة بسبب اختلاف إصدار Windows أو إعداداته، اختر اسم خدمة موجودًا ظهر في ناتج Get-Service واستخدمه مكان w32time.
5. وثّق النتيجة كمحلل
أنشئ في ملاحظاتك جدولًا صغيرًا بهذه البنية:
| وقت الجمع | نوع العنصر | الاسم أو PID | المسار أو الحالة | الأمر المستخدم | ملاحظة |
|---|---|---|---|---|---|
| الوقت المحلي | ملف | alpha.txt | المسار الكامل والحجم | Get-ChildItem ... | ملف تدريبي أنشأته |
| الوقت المحلي | عملية | PID الخاص بـNotepad | مسار Notepad ووقت البدء | Get-Process ... | ظهرت عند فتح الملف واختفت بعد إغلاقه |
| الوقت المحلي | خدمة | w32time أو بديل | الحالة وإعداد البدء | Get-Service أو Get-CimInstance | حالة نظام طبيعية في المختبر |
الملاحظة المهنية الأهم: لا تكتب «سليم» أو «خبيث» بناءً على حقل واحد. اكتب ما رأيته فعليًا، وما الذي لا تعرفه بعد. مثلًا: «اسم العملية ومسارها معروفان، لكن لم أتحقق بعد من البصمة أو التوقيع أو محتوى الملف».
الخلاصة
أصبحت تملك الآن ثلاث عدسات أولية لفحص Windows داخل مختبرك:
Get-ChildItemيستعرض الملفات والمجلدات ويجمع الاسم والمسار والحجم والطابع الزمني.Get-Processيعرض البرامج النشطة ومعلومات مثل PID والمسار ووقت البدء واستهلاك الذاكرة.Get-Serviceيعرض الخدمات وحالتها وأسماءها، ويمكن توسيع الفحص قرائيًا بـGet-CimInstanceلمعرفة إعداد البدء والمسار.- التصفية المبكرة وتحديد الخصائص عبر
Select-Objectيجعلان الناتج أقل ضوضاء وأسهل للتوثيق. - المعلومة الأولية ليست حكمًا نهائيًا؛ هي أساس لفرضية ستختبرها لاحقًا بالهاش، وفحص PE، والتحليل الساكن والديناميكي.
في الدرس التالي ستنتقل إلى لغة الأرقام التي تراها باستمرار في أدوات الهندسة العكسية: التحويل بين النظام العشري والثنائي والسداسي عشري، بما في ذلك قيم PID والأحجام والعناوين.
Can't find a good explanation? Sign up and we'll make it for you
Sign up