
برنامج تشغيل وضع النواة في ويندوز مع عميل وضع المستخدم يعرض القراءة/الكتابة في الذاكرة الفيزيائية والافتراضية عبر IOCTL، والتنقل في جداول الصفحات، ومسح الأنماط، ومحاكاة الإدخال للغش في الألعاب.
██╗ ██╗████████╗██╗ ██╗██╗██╗ ██╗███╗ ███╗
██║ ██║╚══██╔══╝██║ ██║██║██║ ██║████╗ ████║
██║ ██║ ██║ ███████║██║██║ ██║██╔████╔██║
██║ ██║ ██║ ██╔══██║██║██║ ██║██║╚██╔╝██║
███████╗██║ ██║ ██║ ██║██║╚██████╔╝██║ ╚═╝ ██║
╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═════╝ ╚═╝ ╚═╝
إطار عمل لبرنامج تشغيل وضع النواة في Windows مع عميل وضع المستخدم
[!IMPORTANT]
احصل على المشروع الكامل
ملفات الحل متاحة عبر خادم Discord.
هل أنت مهتم بشراء الشيفرة المصدرية الكاملة؟ تواصل معي على Telegram أو Discord: @tonythimself.
Lithium هو برنامج تشغيل وضع النواة في Windows (lithium-kernel) مقترن بعميل وضع المستخدم (lithium-usermode). يتواصل عبر واجهة IOCTL مخصصة ويكشف عن عمليات التلاعب بالذاكرة منخفضة المستوى، والمشي في جداول الصفحات، وبدائيات التحكم في أجهزة الإدخال.
| الميزة | الوصف |
|---|---|
| قراءة/كتابة الذاكرة الفيزيائية | قراءة/كتابة العناوين الفيزيائية مباشرة عبر MmCopyMemory |
| قراءة/كتابة الذاكرة الافتراضية | الوصول إلى الذاكرة الافتراضية عبر العمليات عبر MmCopyVirtualMemory |
| استخراج DTB | استخراج قاعدة جدول الدليل عبر تعداد قاعدة بيانات PFN |
| المشي في جدول الصفحات | ترجمة العنوان الخطي مع التخزين المؤقت لطبقات PML4/PDPT/PD/PT |
| مسح الأنماط | مسح التوقيعات بأسلوب IDA عبر ذاكرة العملية |
| تخصيص الذاكرة | ZwAllocateVirtualMemory في سياق العملية الهدف |
| حماية الذاكرة | ZwProtectVirtualMemory في سياق العملية الهدف |
| محاكاة الفأرة | إدخال الفأرة على مستوى النواة عبر خطاف استدعاء خدمة MouClass |
| إخفاء الخيوط | تزييف حقول ETHREAD (عنوان البدء، CID، وقت الإنشاء، إلخ) |
| تعطيل استدعاء NMI | كتم استدعاء NMI للتهرب من أدوات التصحيح |
| تنظيف التجمع | إزالة إدخال جدول التجمع الكبير من متتبع تجمع النواة |
lithium/
├── lithium-kernel/ # Kernel-mode driver (KMDF)
│ ├── entry.cpp # DriverEntry entry point
│ ├── core/
│ │ ├── dispatch/ # IOCTL dispatch and request routing
│ │ ├── requests/
│ │ │ ├── directory-table-base/ # DTB resolution & page table walk
│ │ │ ├── image-base/ # Process module base retrieval
│ │ │ ├── mouse/ # Mouse input emulation via MouClass
│ │ │ ├── read-write/ # Physical and virtual memory R/W
│ │ │ └── virtual-memory/ # Allocate, protect, query, pattern scan
│ │ └── utilities/
│ │ ├── kernel/ # Module enumeration, NMI, thread ops
│ │ └── ... # Pool cleaner, CRT shim
│ └── dependencies/
│ ├── additional/
│ │ ├── crt/ # Minimal CRT implementation
│ │ ├── security/ # skCrypter string encryption, oxorany
│ │ └── structures/ # Shared invoke data structures
│ └── includes.hpp # Master include header
│
└── lithium-usermode/ # User-mode client
├── entry.cpp # Client entry point
├── core/
│ └── driver/ # IOCTL communication layer
└── dependencies/
├── additional/
│ └── structs.hpp # Page table entry unions & helpers
└── includes.hpp
يتم إنشاء الاتصال عبر اعتراض روتين إرسال IOCTL لبرنامج تشغيل موجود (ProcObsrvesx.sys). عند التحميل، يحدد برنامج النواة برنامج التشغيل الهدف، ويمسح بحثًا عن معالج إرسال IRP الخاص به، ويستبدله بترامبولين إلى hooked_ioctl الخاص بـ lithium. يفتح عميل وضع المستخدم \\.\ProcObsrvesx ويتم إعادة توجيه جميع IOCTLs بشفافية عبر الخطاف.
| الرمز | بنية الإدخال | الإجراء |
|---|---|---|
invoke_base | base_invoke { pid, handle } | استرداد قاعدة صورة العملية |
invoke_dtb | dtb_invoke { pid, dtb } | استخراج قاعدة جدول الدليل |
invoke_read | read_invoke { pid, directory_table, address, buffer, size } | قراءة الذاكرة الفيزيائية |
invoke_write | write_invoke { pid, directory_table, address, buffer, size } | كتابة الذاكرة الفيزيائية |
invoke_read_virtual | read_virtual_invoke { pid, address, buffer, size } | قراءة الذاكرة الافتراضية |
invoke_write_virtual | write_virtual_invoke { pid, address, buffer, size } | كتابة الذاكرة الافتراضية |
invoke_allocate | allocate_invoke { pid, type, protection, address, size } | تخصيص الذاكرة الافتراضية |
invoke_protect | protect_invoke { pid, protection, address, size } | تغيير حماية الذاكرة |
invoke_virtual_query | query_virtual_invoke { pid, address, mbi } | الاستعلام عن معلومات الذاكرة الافتراضية |
invoke_pattern_scan | pattern_invoke { pid, signature, address, pattern_address } | مسح الأنماط في الذاكرة |
invoke_move_mouse | mouse_invoke { x, y, flags, button_flags } | محاكاة إدخال الفأرة |
يكرر برنامج التشغيل على نطاقات الذاكرة الفيزيائية التي يعيدها MmGetPhysicalMemoryRanges، ويمشي في قاعدة بيانات PFN لتحديد إدخال PML4 ذاتي الإشارة، ويتحقق من كل طبقة جدول صفحات لتأكيد قاعدة جدول الدليل الصحيحة لعملية معينة.
تعبر الترجمة من الخطي إلى الفيزيائي التسلسل الهرمي لجدول الصفحات رباعي المستويات x64 (PML4 → PDPT → PD → PT) مع التخزين المؤقت لكل مستوى. يتم تضمين دعم الصفحات الكبيرة (2MB / 1GB) على أساس بذل أفضل جهد.
يحدد برنامج التشغيل كائنات برنامج التشغيل MouClass و MouHID، ويستخرج MouseClassServiceCallback من امتداد جهاز HID، ويحقن حزم MOUSE_INPUT_DATA مباشرة في سلسلة الاستدعاء.
يتم حفظ حقول ETHREAD الرئيسية — وقت الإنشاء، عنوان البدء، عنوان بدء Win32، مكدس النواة، CID، وحالة الخروج — واستبدالها بقيم حميدة أو فارغة. عند التفكيك، يتم استعادة القيم الأصلية قبل إنهاء الخيط.
lithium.sln في Visual Studiolithium-kernel → lithium-kernel.syslithium-usermode → lithium-usermode.exeأو عبر MSBuild:
msbuild lithium.sln /p:Configuration=Release /p:Platform=x64
#include <core/driver/driver.hpp>
g_driver->initialize_handle();
DWORD pid = g_driver->get_process_id(L"target.exe");
g_driver->attach(pid);
g_driver->image_base = g_driver->get_image_base(0);
g_driver->dtb = g_driver->resolve_directory_table_base();
auto value = g_driver->read<uintptr_t>(g_driver->image_base + 0xOFFSET);
g_driver->mouse_event(-10, -10, 0, 0);
هذا المشروع مخصص للأغراض التعليمية والبحثية فقط.
استخدمه فقط على الأنظمة التي تملكها أو لديك إذن صريح باختبارها.
المؤلفون غير مسؤولين عن أي إساءة استخدام أو ضرر ناتج عن هذا البرنامج.