المختبر 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: إعداد أعمدة الذاكرة
- View > Select Columns...
- علامة التبويب Process Memory، أضف:
- Working Set
- Private Bytes
- Virtual Size
- Peak Working Set
- Page Faults
الخطوة 2.3: تحليل عملية
- اختر عملية (مثال:
explorer.exe) - انقر بزر الماوس الأيمن > Properties
- علامة التبويب Performance
لاحظ:
- Working Set: الذاكرة في RAM حاليًا
- Private Bytes: الذاكرة الحصرية للعملية
- Virtual Size: مساحة العنوان الكلية
السؤال 2: ما الفرق بين Working Set وPrivate Bytes؟
الخطوة 2.4: عرض DLLs المحملة
- View > Show Lower Pane
- View > Lower Pane View > DLLs
- اختر عملية
السؤال 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: تحديد المناطق
- انقر على منطقة في الرسم البياني
- انظر إلى التفاصيل في الأسفل
- لاحظ العنوان، الحجم، الحماية
حماية الذاكرة:
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
- قم بتشغيل سكريبت التسرب
- راقب العملية
powershell.exeفي Process Explorer - لاحظ تطور Working Set وPrivate Bytes
التسليمات
-
لقطات شاشة:
- مدير المهام علامة التبويب الذاكرة
- Process Explorer مع أعمدة الذاكرة
- VMMap لعملية
- RAMMap نظرة عامة
-
الإجابات على الأسئلة الستة
-
تقرير التحليل (1-2 صفحات):
- العمليات الأكثر استهلاكًا
- الشذوذات المكتشفة
- التوصيات
معايير التقييم
| المعيار | النقاط |
|---|---|
| استخدام مدير المهام | 15% |
| Process Explorer | 25% |
| VMMap | 25% |
| RAMMap | 15% |
| سكريبت الاكتشاف | 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