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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
RightHand-Persistence — تقنية الثبات عبر COM في Windows | Kitploit
أدوات/GitHubGitHub/i014n/righthand-persistence
آليات الاستمراريةالاستغلالما بعد الاستغلالالتعلم والتعليمالفريق الأحمر
GitHubi014n/righthand-persistence

RightHand-Persistence

تقنية الثبات عبر COM في Windows

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

الأكثر شعبية

عرض الكل →

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

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

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

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

RightHand Persistence

مستوحى من CVE-2026-21509

معالج قائمة السياق COM بلغة C++ للثبات

مثال تطبيقي لمعالج قائمة سياق Windows باستخدام C++ وCOM، يوضح تقنية ثبات خفية. من خلال تسجيل كائن COM مخصص، يتم تنفيذ الكود الخاص بك عندما ينقر المستخدم بزر الماوس الأيمن على أهداف محددة (ملفات، مجلدات، أو خلفيات) في مستكشف Windows.

تنويه: هذا المشروع لأغراض تعليمية وبحثية فقط. يمكن استخدام التقنيات الموضحة هنا لأغراض ضارة. المؤلف لا يوافق على استخدام هذا الكود لأي نشاط غير قانوني. كن مسؤولاً واستخدم هذه المعرفة بأخلاق.


POC

poc

البدء

المتطلبات الأساسية

  • مترجم C++ (مثل MSVC من Visual Studio، أو MinGW-w64)
  • Windows SDK
  • آلة افتراضية للاختبار (للتسجيل والتنفيذ الآمن)

الإعداد الخاص بي

  • بيئة التطوير المتكاملة: Visual Studio 2019
  • تطوير الآلة الافتراضية: Windows 10 x64 (Build 19045)
  • اختبار الآلة الافتراضية: Windows 10 x64 / Windows 11 x64

هيكل المشروع

root@kitploit:~
                                       DllMain.cpp     
                                +-----------------------+
                                |  DLL Template Project |
                                +-------+-------+-------+
                            ____/           |        \_____
                            |               |             |
                            v               v             v
                    +------------+  +----------------+  +--------------+
                    |   Define   |  | MyClassFactory |  |   Define     |
    clsid_defined.h |   CLSID    |  +----------------+  |   Export     | Source.def
                    +------------+     ClassFactory     |  Functions   |
                                          class         +--------------+
                                            |
                                            |
                                            v
                                     +--------------+    
                                     | MyMenuHandler|
                                     +--------------+         
                                      MyMenuHandler
                                          class

1. DllMain.cpp

يحتوي على الوظائف القياسية المطلوبة لكائن COM لتسجيل وإلغاء تسجيل DLL.

  • DllRegisterServer(): يكتب مسارات التسجيل المقابلة لامتدادات الملفات/الخلفيات المستهدفة. يتم تنفيذه عند تسجيل DLL.
root@kitploit:~
STDAPI DllRegisterServer() {
    std::wstring clsidString = MyStringFromCLSID(CLSID_DecrypShellExtensionx64);
    std::wstring dllPath = MyGetModuleFilename();

    // 1. Register the COM Class (CLSID)
    std::wstring clsidBaseKey = L"SOFTWARE\\Classes\\CLSID\\" + clsidString;
    SetRegistryKey(HKEY_LOCAL_MACHINE, clsidBaseKey, L"", L"MyMenuHandler Object");

    // 2. Register the DLL Path and Threading Model
    std::wstring inprocKey = clsidBaseKey + L"\\InprocServer32";
    SetRegistryKey(HKEY_LOCAL_MACHINE, inprocKey, L"", dllPath);
    SetRegistryKey(HKEY_LOCAL_MACHINE, inprocKey, L"ThreadingModel", L"Apartment");

    // 3. Register for all Shell Contexts
    // Array of paths to cover Files, Folders, Backgrounds, and Desktop
    std::wstring handlerPaths[] = {
        L"SOFTWARE\\Classes\\*\\shellex\\ContextMenuHandlers\\",
        L"SOFTWARE\\Classes\\Directory\\shellex\\ContextMenuHandlers\\",
        L"SOFTWARE\\Classes\\Directory\\Background\\shellex\\ContextMenuHandlers\\",
        L"SOFTWARE\\Classes\\DesktopBackground\\shellex\\ContextMenuHandlers\\"
    };

    for (const auto& path : handlerPaths) {
        std::wstring fullPath = path + L"MyMenuHandler"; // Replace with your handler's name
        SetRegistryKey(HKEY_LOCAL_MACHINE, fullPath, L"", clsidString);
    }

    // 4. Register in the Approved list (Required for many Windows versions)
    std::wstring approvedKey = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Shell Extensions\\Approved";
    SetRegistryKey(HKEY_LOCAL_MACHINE, approvedKey, clsidString, L"MyMenuHandler");

    // 5. Notify the Shell that things have changed
    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, NULL, NULL);

    return S_OK;
}
  • DllUnregisterServer(): ينظف السجل. يتم استدعاؤه عند إلغاء تسجيل DLL.

2. MyClassFactory

مطلوب لإنشاء كائن COM. اقرأ المزيد عن مصانع الفئات.

3. Clsid_defined.h

يحتوي على المعرف الفريد العمومي (GUID) الذي سيتم تسجيل التطبيق تحته في Explorer. يمكنك إنشاء GUID جديد باستخدام guidgen.exe في Visual Studio أو مولد GUID عبر الإنترنت.

root@kitploit:~
// {CEF1AA1B-42F7-4A54-AF46-BCEE5B3FE6BF}
DEFINE_GUID(CLSID_DecrypShellExtensionx64, 0xcef1aa1b, 0x42f7, 0x4a54, 0xaf, 0x46, 0xbc, 0xee, 0x5b, 0x3f, 0xe6, 0xbf);

4. Source.def

ملف تعريف الوحدة النمطية. يحدد هذا الملف الوظائف التي يقوم DLL بتصديرها. اقرأ المزيد عن ملفات .DEF.

root@kitploit:~
EXPORTS
    DllGetClassObject PRIVATE
    DllCanUnloadNow PRIVATE
    DllRegisterServer PRIVATE
    DllUnregisterServer PRIVATE

5. MyMenuHandler.cpp

الفئة الأساسية التي تنفذ IShellExtInit و IContextMenu. هذا هو المكان الذي تحدد فيه الإجراءات المخصصة الخاصة بك.

  • MyContextMenuHandler::Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject* pdtobj, HKEY hkeyProgId) يتم استدعاؤها في كل مرة يتم فيها النقر بزر الماوس الأيمن على هدفك المسجل. تستخدم لتحليل الملف أو المجلد الذي تم النقر عليه.
root@kitploit:~
HRESULT MyContextMenuHandler::Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject* pdtobj, HKEY hkeyProgId)
{
    MessageBoxA(NULL, "Initialize Called!", "Debug", MB_OK);

    // 1. Check if we clicked on a FILE/FOLDER
    if (pdtobj)
    {
        STGMEDIUM medium;
        FORMATETC fe = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
        if (SUCCEEDED(pdtobj->GetData(&fe, &medium)))
        {
            DragQueryFileA((HDROP)medium.hGlobal, 0, m_szFile, MAX_PATH);
            ReleaseStgMedium(&medium);
            return S_OK; // Success!
        }
    }

    // 2. Check if we clicked the BACKGROUND (pidlFolder)
    if (pidlFolder)
    {
        if (SHGetPathFromIDListA(pidlFolder, m_szFile))
        {
            return S_OK; // Success!
        }
    }

    // 3. Fallback: If we got neither, still return S_OK to show the menu.
    // You just won't have a path populated in m_szFile.
    return S_OK;
}
  • MyContextMenuHandler::InvokeCommand(LPCMINVOKECOMMANDINFO picp) يتم استدعاؤها عندما ينقر المستخدم على الخيار المخصص الخاص بك من قائمة السياق. هذا هو المكان الذي يتم فيه تنفيذ حمولة الثبات أو الإجراء المخصص الخاص بك.

الاختبار

على الجهاز الافتراضي المستهدف، انسخ DLL المُجمّع وقم بتشغيل الأوامر التالية:

1. التسجيل

سجل DLL باستخدام ملفات Windows الثنائية القياسية.

root@kitploit:~
regsvr32.exe RightHandPersistence.dll

2. إعادة تشغيل Explorer

أعد تشغيل عملية explorer.exe لضمان تحميل إضافة shell الجديدة في الذاكرة.

root@kitploit:~
taskkill /f /im explorer.exe & start explorer.exe

3. إلغاء التسجيل

لإزالة معالج قائمة السياق وتنظيف السجل، استخدم العلامة /u مع regsvr32.exe. هذا يستدعي وظيفة DllUnregisterServer الخاصة بك.

root@kitploit:~
regsvr32.exe /u RightHandPersistence.dll

التخصيص

1. استهداف مواقع محددة

يقوم Windows بتصنيف 'المساحة الفارغة' بشكل مختلف عن الملفات. لاستهداف الخلفية، قم بتعيين مفاتيح التسجيل الخاصة بك إلى هذه المواقع المحددة.

يمكن العثور على مزيد من التفاصيل حول تعيين الامتدادات في وثائق قائمة سياق Windows Shell من Microsoft.

2. إنشاء أوامر قائمة مخصصة

يمكنك تحديد نص مخصص للقائمة (مثل 'نسخ مخصص' أو 'تشغيل التشخيصات') من خلال تنفيذ طريقة IContextMenu::QueryContextMenu. يؤدي النقر على هذا النص المخصص إلى تشغيل المنطق الخاص بك داخل IContextMenu::InvokeCommand.


المراجع

  • إنشاء معالجات قائمة الاختصارات (Microsoft Learn)
  • واجهة IShellExtInit (Microsoft Learn)
  • واجهة IContextMenu (Microsoft Learn)
  • تسجيل معالجات إضافات Shell (Microsoft Learn)
  • التصدير من DLL باستخدام ملفات DEF (Microsoft Learn)
  • GuidGenerator.com
تنزيل الأداة
الهدف عند النقر بزر الماوس الأيمنمسار مفتاح التسجيل
الملفات (الكل)HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers
المجلدات (الأيقونة)HKEY_CLASSES_ROOT\Directory\shellex\ContextMenuHandlers
خلفية المجلدHKEY_CLASSES_ROOT\Directory\Background\shellex\ContextMenuHandlers
خلفية سطح المكتبHKEY_CLASSES_ROOT\DesktopBackground\shellex\ContextMenuHandlers