Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
aegis — برنامج تشغيل حماية العمليات في وضع النواة مع واجهة مستخدم رسومية | Kitploit
أدوات/GitHubGitHub/tobiaskocur/aegis
أدوات دفاعيةتصعيد الامتيازاتالاستغلالالتعلم والتعليمالفريق الأحمر
GitHubtobiaskocur/aegis

aegis

برنامج تشغيل حماية العمليات في وضع النواة مع واجهة مستخدم رسومية

عرض المستودع
531منذ 8 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

Aegis

مشغل حماية عمليات في وضع النواة باستخدام ObRegisterCallbacks لإزالة صلاحيات الوصول للذاكرة من المقابض. تنفيذ أساسي يربط إنشاء المقابض ويزيل PROCESS_VM_READ/WRITE/OPERATION من محاولات الوصول غير المصرح بها.

لقطة شاشة توضيحية

صورة متحركة توضيحية

ملاحظة: إذا لم تتحرك الصورة، شاهدها مباشرة على Imgur

نظرة عامة

يسجل المشغل استدعاءات كائن (OB callbacks) على ارتفاع 321123 ويعترض عمليات OB_OPERATION_HANDLE_CREATE و OB_OPERATION_HANDLE_DUPLICATE. عندما تحاول عملية فتح مقبض لهدف محمي، نتحقق من اسم العملية المصدر مقابل قائمة بيضاء (explorer.exe, csrss.exe, svchost.exe, MsMpEng.exe, RuntimeBroker.exe) ونقوم بإزالة حقوق الوصول إذا لم تكن مسموحة.

التنفيذ الحالي يستند إلى مطابقة الأسماء باستخدام PsGetProcessImageFileName (API غير موثق). تتم إدارة قائمة الحماية عبر قائمة مرتبطة مع مزامنة باستخدام قفل الدوران (spinlock). يوجد خيط عامل (worker thread) ولكن منطق التحديث لم يتم تنفيذه بعد.

يوفر مكون وضع المستخدم واجهة رسومية ImGui لإضافة العمليات إلى قائمة الحماية. يتم الاتصال عبر رموز IOCTL عبر الرابط الرمزي \\Device\\Aegis باستخدام نقل METHOD_BUFFERED. يقوم المشغل بإنشاء رابط رمزي من \\DosDevices\\Aegis إلى \\Device\\Aegis ليتمكن وضع المستخدم من الوصول إليه عبر \\\\.\\Aegis.

البنية

النواة (km/):

  • driver.c - DriverEntry, تسجيل OB, موزع IOCTL, إنشاء الجهاز/الرابط الرمزي
  • protect_manager/ - إدارة قائمة العمليات، الخيط العامل (منطق التحديث معلق)

وضع المستخدم (um/):

  • client.cpp - الحلقة الرئيسية، عرض ImGui، إدارة النوافذ
  • gui/ - إعداد DirectX 11 + ImGui، خطوط مخصصة (Gilroy)
  • service_manager/ - تكامل SCM لتحميل/إلغاء تحميل المشغل
  • ioctl_manager/ - غلاف DeviceIoControl للاتصال بالمشغل

تفاصيل تقنية

تنفيذ وضع النواة

  • استدعاءات OB: مسجلة على ارتفاع 321123 (المعيار لجهات خارجية هو 321000+، تم تعيينه أعلى لتجنب التصادم)
  • تحديد العملية: يستخدم PsGetProcessImageFileName - API غير موثق يعيد اسم ملف .exe فقط (بحد أقصى 15 حرف)
  • سلامة الخيوط: عمليات KSPIN_LOCK على مستوى DISPATCH_LEVEL (IRQL 2) لمنع حالات السباق
  • إدارة الذاكرة:
    • NonPagedPool لـ protect_manager (دائمًا في RAM، وصول أسرع، مساحة محدودة)
    • PagedPool لهياكل العمليات الفردية (يمكن إخراجها من الصفحات)
  • الخيط العامل: خيط نظام مع KEVENT للمعالجة غير المتزامنة (حاليًا دمية)
  • IOCTL: METHOD_BUFFERED للتعامل الآمن مع المخازن، نوع الجهاز 0x8000 (نطاق جهات خارجية)

تنفيذ وضع المستخدم

  • الواجهة الرسومية: ImGui مع سلسلة DirectX 11، تنسيق مخصص
  • تحميل المشغل: Service Control Manager API، إنشاء خدمة "AegisDriver" مع SERVICE_DEMAND_START
  • الاتصال: DeviceIoControl مع رموز IOCTL معرفة في ioctl.h المشترك
  • معالجة الأخطاء: عرض أخطاء أساسي عبر MessageBox

أمثلة برمجية

تسجيل استدعاء OB:

root@kitploit:~
// تسجيل استدعاءات OB لإنشاء/تكرار المقابض
OB_CALLBACK_REGISTRATION ob_registration = { 0 };
OB_OPERATION_REGISTRATION op_registration = { 0 };
RtlSecureZeroMemory(&ob_registration, sizeof(ob_registration));
RtlSecureZeroMemory(&op_registration, sizeof(op_registration));

op_registration.ObjectType = PsProcessType;
op_registration.Operations = OB_OPERATION_HANDLE_CREATE | OB_OPERATION_HANDLE_DUPLICATE;
// نهتم بالتكرار لأن المخترقين الأذكياء أو البرامج الضارة غالبًا لا ينشئون مقابض
// بل يكررون المقابض الحالية لتجنب إثارة الشكوك
op_registration.PreOperation = pre_open_process;

RtlInitUnicodeString(&ob_registration.Altitude, L"321123"); 
// 321000 هو المعيار لمشغلات الطرف الثالث، قمنا بتعيينه أعلى قليلاً لتجنب التصادم

status = ObRegisterCallbacks(&ob_registration, &reg_handle);

إزالة صلاحيات الوصول للمقبض:

root@kitploit:~
OB_PREOP_CALLBACK_STATUS pre_open_process(PVOID reg_context, POB_PRE_OPERATION_INFORMATION info)
{
    if (info->ObjectType == *PsProcessType) {
        PEPROCESS proc = (PEPROCESS)info->Object;
        char* process_name = (char*)PsGetProcessImageFileName(proc);
        
        // قفل القائمة على مستوى DISPATCH_LEVEL لمنع شاشة الموت الزرقاء
        KIRQL irql;
        KeAcquireSpinLock(&g_protect_manager->list_lock, &irql);
        
        // التحقق مما إذا كانت العملية موجودة في قائمة الحماية
        for (entry = g_protect_manager->process_list.Flink; 
             entry != &g_protect_manager->process_list; 
             entry = entry->Flink) {
            pprocess proces = CONTAINING_RECORD(entry, process, entry);
            if (strcmp(proces->path, process_name) == 0) {
                // التحقق من العملية المصدر - السماح بعمليات النظام
                PEPROCESS source_process = IoGetCurrentProcess();
                char* source_name = (char*)PsGetProcessImageFileName(source_process);
                if (strcmp(source_name, "explorer.exe") == 0 || 
                    strcmp(source_name, "csrss.exe") == 0 || ...) {
                    KeReleaseSpinLock(&g_protect_manager->list_lock, irql);
                    return OB_PREOP_SUCCESS;
                }
                
                // إزالة VM_READ, VM_WRITE, VM_OPERATION (0x1, 0x10, 0x20)
                // لا نضبطها على 0 لأن ذلك قد يسبب أخطاء
                info->Parameters->CreateHandleInformation.DesiredAccess &= ~(0x1 | 0x10 | 0x20);
                KeReleaseSpinLock(&g_protect_manager->list_lock, irql);
                return OB_PREOP_SUCCESS;
            }
        }
        KeReleaseSpinLock(&g_protect_manager->list_lock, irql);
    }
    return OB_PREOP_SUCCESS;
}

إدارة قائمة العمليات:

root@kitploit:~
NTSTATUS protect_manager_protect_process(pprotect_manager self, pprocess process)
{
    // KIRQL (مستوى طلب المقاطعة) 0-31 يخبر وحدة المعالجة المركزية بعدم الإزعاج
    // 0 = PASSIVE_LEVEL, 2 = DISPATCH_LEVEL, 31 = HIGH_LEVEL
    KIRQL irql;
    
    // الحصول على قفل الدوران، يرفع IRQL إلى DISPATCH_LEVEL (2)
    // يقفل القائمة حتى لا تتغير أثناء التحرير
    KeAcquireSpinLock(&self->list_lock, &irql);
    InsertTailList(&self->process_list, &process->entry);
    KeReleaseSpinLock(&self->list_lock, irql);
    
    // إشارة للخيط العامل للتحديث
    self->refresh_needed = TRUE;
    KeSetEvent(&self->worker_event, 0, FALSE); // FALSE = إعادة IRQL تلقائية
    return STATUS_SUCCESS;
}

اتصال IOCTL من وضع المستخدم:

root@kitploit:~
bool ioctl_manager::check(std::string name)
{
    // فتح جهاز المشغل عبر الرابط الرمزي \\\\.\\Aegis -> \\Device\\Aegis
    this->driver_object = CreateFile(this->path, GENERIC_READ | GENERIC_WRITE, 
                                      0, NULL, OPEN_EXISTING, 0, NULL);
    
    // إرسال اسم العملية إلى المشغل عبر IOCTL
    result = DeviceIoControl(this->driver_object, IOCTL_PROTECT_PID, 
                            (LPVOID)data.c_str(), data.size() + 1, 
                            NULL, 0, &bytes_returned, NULL);
    
    CloseHandle(this->driver_object); // لا تنس إغلاق المقابض
    return result;
}

جميع الأكواد موثقة بشكل شامل مع شروحات لمفاهيم النواة، مستويات IRQL، إدارة الذاكرة، والمشاكل المحتملة. لا تتردد في مراجعة المصدر - إنه تعليمي وموثق جيدًا.

متطلبات البناء

  • Visual Studio مع بيئة عمل C++
  • Windows Driver Kit (WDK)
  • تمكين وضع التوقيع الاختباري (bcdedit /set testsigning on)

مخرجات البناء: km.sys (المشغل) و um.exe (تطبيق وضع المستخدم).

المشاكل / القيود المعروفة

  • لا توجد حماية على مستوى النواة - أي مشغل وضع نواة يمكنه تجاوز هذا بالوصول المباشر إلى EPROCESS
  • مطابقة أسماء فقط - من الممكن تزوير اسم العملية، لا يوجد تحقق من PID
  • قائمة بيضاء ثابتة - قائمة عمليات النظام غير مكتملة وثابتة
  • تكرار المقابض - يتعامل فقط مع OB_OPERATION_HANDLE_CREATE، هجمات التكرار ممكنة
  • الخيط العامل غير مكتمل - منطق التحديث في protect_manager.c فارغ
  • APIs قديمة - يستخدم ExAllocatePool بدلاً من ExAllocatePool2

المهام المستقبلية

  • تنفيذ DKOM - إخفاء العمليات عبر الفصل من PsActiveProcessHead، إخفاء المشغل من PsLoadedModuleList
  • حماية الخيوط - توسيع استدعاءات OB لحماية مقابض الخيوط
  • حماية قائمة على PID - إضافة التحقق من معرف العملية بدلاً من الاعتماد على الأسماء فقط
  • وظيفة إزالة الحماية - إضافة IOCTL لإزالة العملية من قائمة الحماية
  • إكمال الخيط العامل - تنفيذ منطق التحديث الفعلي لتحديثات قائمة العمليات

إخلاء مسؤولية

لأغراض تعليمية فقط. يستخدم APIs غير موثقة قد تتعطل مع تحديثات Windows. يتطلب التوقيع الاختباري أو التوقيع المناسب للبرمجة للتشغيل.

تنزيل الأداة