انتقل إلى المحتوى الرئيسي

المختبر 11.1: تحليل ذاكرة العمليات

الأهداف التعليمية​

في نهاية هذا المختبر، ستكون قادرًا على:

  • استخدام أدوات Sysinternals لتحليل الذاكرة
  • فهم Working Set وأنواع الذاكرة المختلفة
  • تحديد الشذوذات في ذاكرة عملية
  • اكتشاف العمليات المشبوهة من خلال سلوكها في الذاكرة

المدة المقدرة​

45 دقيقة

المتطلبات المسبقة​

  • VM ويندوز 10/11
  • أدوات Sysinternals (Process Explorer, VMMap, RAMMap)
  • حقوق المسؤول

السياق المهني​

يُستخدم تحليل الذاكرة لـ:

  • تشخيص تسريبات الذاكرة
  • تحديد البرمجيات الخبيثة بدون ملفات
  • تحليل أداء التطبيقات
  • التحقيق الجنائي والتحقيق في الحوادث

الجزء 1: نظرة عامة باستخدام مدير المهام​

الخطوة 1.1: فتح مدير المهام​

Ctrl+Shift+Esc

اذهب إلى علامة التبويب الأداء > الذاكرة

الخطوة 1.2: فهم المقاييس​

المقياسالوصف
قيد الاستخدامRAM المستخدمة حاليًا
متاحRAM الحرة + في وضع الاستعداد
مصدقذاكرة "موعودة" (قد تكون > RAM)
مخزنة مؤقتًابيانات مخزنة للوصول السريع
مُصفحةفي ملف الصفحة على القرص
غير مُصفحةدائمًا في RAM (برامج التشغيل)

الخطوة 1.3: عرض حسب العملية​

علامة التبويب التفاصيل > انقر بزر الماوس الأيمن على الأعمدة > تحديد الأعمدة

أضف:

  • Working set (الذاكرة)
  • الذاكرة (مجموعة العمل الخاصة)
  • الذاكرة (حجم التحقق)

السؤال 1: أي عملية تستخدم أكبر قدر من الذاكرة على نظامك؟


الجزء 2: استكشاف العمليات بعمق باستخدام Process Explorer​

الخطوة 2.1: التحميل والتشغيل​

# تحميل Sysinternals Suite إذا لم يتم بالفعل
# https://docs.microsoft.com/en-us/sysinternals/downloads/

# تشغيل Process Explorer كمسؤول
.\procexp64.exe

الخطوة 2.2: إعداد أعمدة الذاكرة​

  1. View > Select Columns...
  2. علامة التبويب Process Memory، أضف:
    • Working Set
    • Private Bytes
    • Virtual Size
    • Peak Working Set
    • Page Faults

الخطوة 2.3: تحليل عملية​

  1. اختر عملية (مثال: explorer.exe)
  2. انقر بزر الماوس الأيمن > Properties
  3. علامة التبويب Performance

لاحظ:

  • Working Set: الذاكرة في RAM حاليًا
  • Private Bytes: الذاكرة الحصرية للعملية
  • Virtual Size: مساحة العنوان الكلية

السؤال 2: ما الفرق بين Working Set وPrivate Bytes؟

الخطوة 2.4: عرض DLLs المحملة​

  1. View > Show Lower Pane
  2. View > Lower Pane View > DLLs
  3. اختر عملية

السؤال 3: كم عدد DLLs المحملة في explorer.exe؟


الجزء 3: VMMap للتحليل التفصيلي​

الخطوة 3.1: تشغيل VMMap​

vmmap64.exe

اختر عملية لتحليلها (مثال: notepad.exe - قم بتشغيله أولاً).

الخطوة 3.2: فهم العرض​

يعرض VMMap مساحة العنوان الكاملة:

النوعاللونالوصف
Imageأصفرملفات تنفيذية/DLLs
Mapped Fileبرتقاليملفات مدمجة في الذاكرة
Shareableأخضرذاكرة قابلة للمشاركة
Heapأحمركومة العملية
Stackبنفسجيمكدسات الخيوط
Private Dataأزرقبيانات خاصة
Freeأبيضغير مخصص

الخطوة 3.3: تحديد المناطق​

  1. انقر على منطقة في الرسم البياني
  2. انظر إلى التفاصيل في الأسفل
  3. لاحظ العنوان، الحجم، الحماية

حماية الذاكرة:

  • R: قراءة
  • W: كتابة
  • X: تنفيذ
  • G: صفحة حراسة

الخطوة 3.4: البحث عن الشذوذات​

إشارات التحذير:

  • RWX: منطقة قابلة للقراءة والكتابة والتنفيذ (مشبوهة!)
  • Heap كبيرة جدًا: احتمال تسرب الذاكرة
  • Private Data غير مبررة: احتمال حقن
# سكريبت لاكتشاف المناطق RWX المشبوهة
# (يتطلب أدوات محددة مثل WinDbg)

السؤال 4: هل هناك مناطق RWX في notepad.exe؟ إذا نعم، ما هي؟


الجزء 4: RAMMap للنظرة العامة​

الخطوة 4.1: تشغيل RAMMap​

rammap64.exe

قم بتشغيله كمسؤول.

الخطوة 4.2: نظرة عامة​

علامة التبويب Use Counts:

النوعالوصف
Process Privateذاكرة حصرية للعمليات
Mapped Fileملفات مدمجة
Shareableذاكرة قابلة للمشاركة
Page Tableجداول الصفحات
Nonpaged Poolتجمع النواة غير القابل للصفحة
Driver Lockedمقفل بواسطة برامج التشغيل
Standbyفي الذاكرة المؤقتة، قابلة للتحرير عند الحاجة
Modifiedمعدلة، لم تُكتب بعد على القرص

الخطوة 4.3: علامة التبويب File Summary​

تظهر الملفات المدمجة في الذاكرة.

السؤال 5: ما هي الملفات التي تستهلك أكبر قدر من RAM في الذاكرة المؤقتة؟

الخطوة 4.4: تفريغ الذاكرة المؤقتة​

القائمة Empty > Empty Standby List

تنبيه: استخدم بحذر في الإنتاج!


الجزء 5: اكتشاف الشذوذات​

الخطوة 5.1: سكريبت الاكتشاف​

# سكريبت تحليل الذاكرة الأساسي
Write-Host "=== تحليل ذاكرة النظام ===" -ForegroundColor Cyan

# أفضل 10 عمليات حسب Working Set
Write-Host "`n[أفضل 10 Working Set]" -ForegroundColor Yellow
Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10 |
Format-Table Name, Id, @{N='WorkingSet(MB)';E={[math]::Round($_.WorkingSet64/1MB,2)}}

# أفضل 10 حسب Private Bytes
Write-Host "[أفضل 10 Private Bytes]" -ForegroundColor Yellow
Get-Process | Sort-Object PrivateMemorySize64 -Descending | Select-Object -First 10 |
Format-Table Name, Id, @{N='PrivateBytes(MB)';E={[math]::Round($_.PrivateMemorySize64/1MB,2)}}

# عمليات مع نسبة مشبوهة (Virtual >> Working Set)
Write-Host "[نسبة مشبوهة Virtual/Working]" -ForegroundColor Yellow
Get-Process | Where-Object {
$_.WorkingSet64 -gt 10MB -and
$_.VirtualMemorySize64 -gt ($_.WorkingSet64 * 100)
} | Format-Table Name, Id,
@{N='Working(MB)';E={[math]::Round($_.WorkingSet64/1MB,2)}},
@{N='Virtual(MB)';E={[math]::Round($_.VirtualMemorySize64/1MB,2)}}

# معلومات النظام العامة
Write-Host "[معلومات النظام]" -ForegroundColor Yellow
$os = Get-CimInstance Win32_OperatingSystem
Write-Host " RAM الكلية: $([math]::Round($os.TotalVisibleMemorySize/1MB,2)) GB"
Write-Host " RAM الحرة: $([math]::Round($os.FreePhysicalMemory/1MB,2)) GB"
Write-Host " الالتزام الكلي: $([math]::Round($os.TotalVirtualMemorySize/1MB,2)) GB"

الخطوة 5.2: مؤشرات البرمجيات الخبيثة​

علامات مشبوهة في الذاكرة:

  • عمليات باسم قياسي ولكن في موقع غير معتاد
  • مناطق RWX (كومة/مكدس قابلة للتنفيذ)
  • حقن في عمليات شرعية
  • عمليات "جوفاء" (hollow process)
# التحقق من مسارات العمليات
Get-Process | Where-Object { $_.Path } | ForEach-Object {
$expectedPaths = @("C:\Windows", "C:\Program Files", "C:\Program Files (x86)")
$isExpected = $expectedPaths | ForEach-Object { $proc.Path -like "$_*" } | Where-Object { $_ }

if (-not $isExpected -and $_.Name -in @("svchost", "csrss", "services", "lsass")) {
Write-Host "[مشبوه] $($_.Name) - المسار: $($_.Path)" -ForegroundColor Red
}
}

السؤال 6: هل وجدت عمليات مشبوهة؟


الجزء 6: تمرين عملي​

الخطوة 6.1: إنشاء تسرب ذاكرة (محاكاة)​

# سكريبت يحاكي تسرب الذاكرة
# للتنفيذ في VM اختبار

$leak = @()
Write-Host "محاكاة تسرب الذاكرة..." -ForegroundColor Yellow
Write-Host "اضغط على Ctrl+C للإيقاف"

while ($true) {
$leak += [byte[]]::new(10MB) # تخصيص 10MB
$totalMB = $leak.Count * 10
Write-Host "الذاكرة المخصصة: $totalMB MB" -ForegroundColor Gray
Start-Sleep -Seconds 1

if ($totalMB -ge 500) {
Write-Host "تم الوصول إلى الحد، توقف." -ForegroundColor Red
break
}
}

# تحرير
$leak = $null
[System.GC]::Collect()
Write-Host "تم تحرير الذاكرة." -ForegroundColor Green

الخطوة 6.2: الملاحظة باستخدام Process Explorer​

  1. قم بتشغيل سكريبت التسرب
  2. راقب العملية powershell.exe في Process Explorer
  3. لاحظ تطور Working Set وPrivate Bytes

التسليمات​

  1. لقطات شاشة:

    • مدير المهام علامة التبويب الذاكرة
    • Process Explorer مع أعمدة الذاكرة
    • VMMap لعملية
    • RAMMap نظرة عامة
  2. الإجابات على الأسئلة الستة

  3. تقرير التحليل (1-2 صفحات):

    • العمليات الأكثر استهلاكًا
    • الشذوذات المكتشفة
    • التوصيات

معايير التقييم​

المعيارالنقاط
استخدام مدير المهام15%
Process Explorer25%
VMMap25%
RAMMap15%
سكريبت الاكتشاف20%

أوامر مرجعية​

# ذاكرة العمليات
Get-Process | Sort-Object WorkingSet64 -Descending | Select-Object -First 10

# معلومات النظام
Get-CimInstance Win32_OperatingSystem | Select-Object *Memory*

# ملف الصفحة
Get-WmiObject Win32_PageFileUsage

استكشاف الأخطاء وإصلاحها​

Process Explorer لا يعمل​

  • قم بتشغيله كمسؤول
  • تحقق من أنه غير محظور بواسطة برنامج مكافحة الفيروسات

VMMap يعرض معلومات قليلة​

  • اختر العملية من القائمة
  • تأكد من أن العملية لا تزال موجودة

مختبر مطور في إطار دورة أنظمة التشغيل - الوحدة 11