Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
aegis — कर्नेल-मोड प्रक्रिया संरक्षण ड्राइवर उपयोगकर्ता GUI के साथ | Kitploit
उपकरण/GitHubGitHub/tobiaskocur/aegis
रक्षात्मक उपकरणविशेषाधिकार वृद्धिशोषणलर्निंग और शिक्षारेड टीमिंग
GitHubtobiaskocur/aegis

aegis

कर्नेल-मोड प्रक्रिया संरक्षण ड्राइवर उपयोगकर्ता GUI के साथ

रिपॉजिटरी देखें
5317 महीने पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

Aegis

Kernel-मोड प्रक्रिया सुरक्षा ड्राइवर जो ObRegisterCallbacks का उपयोग करके हैंडल से मेमोरी एक्सेस अनुमतियों को हटाता है। बुनियादी कार्यान्वयन जो हैंडल निर्माण को हुक करता है और अनधिकृत एक्सेस प्रयासों से PROCESS_VM_READ/WRITE/OPERATION को हटाता है।

डेमो स्क्रीनशॉट

डेमो GIF

नोट: यदि GIF एनिमेट नहीं होती है, तो इसे सीधे Imgur पर देखें

अवलोकन

ड्राइवर ऊँचाई 321123 पर OB कॉलबैक पंजीकृत करता है और OB_OPERATION_HANDLE_CREATE तथा OB_OPERATION_HANDLE_DUPLICATE संचालनों को इंटरसेप्ट करता है। जब कोई प्रक्रिया किसी संरक्षित लक्ष्य के लिए हैंडल खोलने का प्रयास करती है, तो हम स्रोत प्रक्रिया के नाम की एक श्वेतसूची (explorer.exe, csrss.exe, svchost.exe, MsMpEng.exe, RuntimeBroker.exe) से तुलना करते हैं और यदि अनुमति नहीं है तो एक्सेस अधिकार हटा देते हैं।

वर्तमान कार्यान्वयन PsGetProcessImageFileName (अप्रलेखित API) का उपयोग करके नाम-आधारित मिलान है। सुरक्षा सूची को स्पिनलॉक सिंक्रनाइज़ेशन के साथ एक लिंक्ड लिस्ट के माध्यम से प्रबंधित किया जाता है। वर्कर थ्रेड मौजूद है लेकिन रिफ्रेश लॉजिक अभी लागू नहीं किया गया है।

यूज़र-मोड घटक सुरक्षा सूची में प्रक्रियाएँ जोड़ने के लिए ImGui GUI प्रदान करता है। संचार METHOD_BUFFERED ट्रांसफर का उपयोग करके \\Device\\Aegis सिमलिंक पर IOCTL कोड के माध्यम से होता है। ड्राइवर \\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 वर्ण) लौटाता है
  • थ्रेड सुरक्षा: प्रतिस्पर्धा स्थितियों को रोकने के लिए DISPATCH_LEVEL (IRQL 2) पर KSPIN_LOCK संचालन
  • मेमोरी प्रबंधन:
    • protect_manager के लिए NonPagedPool (हमेशा RAM में, तेज़ पहुँच, सीमित पूल)
    • व्यक्तिगत प्रक्रिया संरचनाओं के लिए PagedPool (पेज आउट किया जा सकता है)
  • वर्कर थ्रेड: एसिंक्रोनस प्रोसेसिंग के लिए KEVENT के साथ सिस्टम थ्रेड (वर्तमान में स्टब)
  • IOCTL: सुरक्षित बफर हैंडलिंग के लिए METHOD_BUFFERED, डिवाइस प्रकार 0x8000 (तीसरे पक्ष की श्रेणी)

यूज़र-मोड कार्यान्वयन

  • GUI: DirectX 11 स्वैपचेन के साथ ImGui, कस्टम स्टाइलिंग
  • ड्राइवर लोडिंग: सर्विस कंट्रोल मैनेजर API, SERVICE_DEMAND_START के साथ सेवा "AegisDriver" बनाता है
  • संचार: साझा ioctl.h में परिभाषित IOCTL कोड के साथ DeviceIoControl
  • त्रुटि हैंडलिंग: MessageBox के माध्यम से बुनियादी त्रुटि प्रदर्शन

कोड उदाहरण

OB कॉलबैक पंजीकरण:

root@kitploit:~
// Register OB callbacks for handle creation/duplication
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;
// we care about duplication because smart hackers or malware, often do not create handles 
// but duplicate current ones to not arouse suspicion
op_registration.PreOperation = pre_open_process;

RtlInitUnicodeString(&ob_registration.Altitude, L"321123"); 
// 321000 is standard for 3rd party drivers, we set it a bit higher to not have collision

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);
        
        // Lock list at DISPATCH_LEVEL to prevent BSOD
        KIRQL irql;
        KeAcquireSpinLock(&g_protect_manager->list_lock, &irql);
        
        // Check if process is in protection list
        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) {
                // Check source process - allow system processes
                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;
                }
                
                // Strip VM_READ, VM_WRITE, VM_OPERATION (0x1, 0x10, 0x20)
                // We don't set to 0 because it can cause bugs
                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 (Kernel Interrupt Request Level) 0-31 tells CPU to not disturb
    // 0 = PASSIVE_LEVEL, 2 = DISPATCH_LEVEL, 31 = HIGH_LEVEL
    KIRQL irql;
    
    // Acquire spinlock, raises IRQL to DISPATCH_LEVEL (2)
    // Locks the list so it doesn't change while we edit
    KeAcquireSpinLock(&self->list_lock, &irql);
    InsertTailList(&self->process_list, &process->entry);
    KeReleaseSpinLock(&self->list_lock, irql);
    
    // Signal worker thread to refresh
    self->refresh_needed = TRUE;
    KeSetEvent(&self->worker_event, 0, FALSE); // FALSE = auto revert IRQL
    return STATUS_SUCCESS;
}

यूज़र-मोड IOCTL संचार:

root@kitploit:~
bool ioctl_manager::check(std::string name)
{
    // Open driver device via symlink \\\\.\\Aegis -> \\Device\\Aegis
    this->driver_object = CreateFile(this->path, GENERIC_READ | GENERIC_WRITE, 
                                      0, NULL, OPEN_EXISTING, 0, NULL);
    
    // Send process name to driver via 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); // don't forget to close handles
    return result;
}

सभी कोड कर्नेल अवधारणाओं, IRQL स्तरों, मेमोरी प्रबंधन और संभावित समस्याओं की विस्तृत टिप्पणियों के साथ हैं। बेझिझक स्रोत देखें - यह शैक्षिक और अच्छी तरह से दस्तावेजित है।

बिल्ड आवश्यकताएँ

  • C++ कार्यभार के साथ Visual Studio
  • Windows Driver Kit (WDK)
  • टेस्ट साइनिंग सक्षम (bcdedit /set testsigning on)

बिल्ड आउटपुट: km.sys (ड्राइवर) और um.exe (यूज़र-मोड ऐप)।

ज्ञात समस्याएँ / सीमाएँ

  • कोई कर्नेल-मोड सुरक्षा नहीं - कोई भी KM ड्राइवर EPROCESS तक सीधे पहुँचकर इसे बायपास कर सकता है
  • केवल नाम-आधारित मिलान - प्रक्रिया नाम स्पूफिंग संभव है, कोई PID सत्यापन नहीं
  • हार्डकोडेड श्वेतसूची - सिस्टम प्रक्रिया सूची अधूरी और स्थिर है
  • हैंडल डुप्लिकेशन - केवल OB_OPERATION_HANDLE_CREATE को संभालता है, डुप्लिकेशन हमले संभव हैं
  • वर्कर थ्रेड अधूरा - protect_manager.c में रिफ्रेश लॉजिक खाली है
  • पदावनत APIs - ExAllocatePool2 के बजाय ExAllocatePool का उपयोग करता है

TODO

  • DKOM कार्यान्वयन - PsActiveProcessHead से अनलिंक करके प्रक्रिया छिपाना, PsLoadedModuleList से ड्राइवर छिपाना
  • थ्रेड सुरक्षा - थ्रेड हैंडल की सुरक्षा के लिए OB कॉलबैक का विस्तार
  • PID-आधारित सुरक्षा - केवल नामों पर निर्भर रहने के बजाय प्रक्रिया ID सत्यापन जोड़ना
  • असुरक्षित कार्यक्षमता - सुरक्षा सूची से प्रक्रियाओं को हटाने के लिए IOCTL जोड़ना
  • वर्कर थ्रेड पूरा करें - प्रक्रिया सूची अपडेट के लिए वास्तविक रिफ्रेश लॉजिक लागू करें

अस्वीकरण

केवल शैक्षिक उद्देश्यों के लिए। अप्रलेखित APIs का उपयोग करता है जो Windows अपडेट के साथ टूट सकते हैं। चलाने के लिए टेस्ट साइनिंग या उचित कोड साइनिंग आवश्यक है।

टूल डाउनलोड करें