Skip to content
KitploitKITPLOIT
FerramentasBlog
Log in
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
RightHand-Persistence — Técnica de Persistência COM no Windows | Kitploit
Ferramentas/GitHubGitHub/i014n/righthand-persistence
Mecanismos de PersistênciaExploraçãoPós-ExploraçãoAprendizado e EducaçãoRed Teaming
GitHubi014n/righthand-persistence

RightHand-Persistence

Técnica de Persistência COM no Windows

Ver Repositório
901159há 5 mesesRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Persistência RightHand

inspirado por CVE-2026-21509

Manipulador de Menu de Contexto COM em C++ para Persistência

Uma implementação de exemplo de um manipulador de menu de contexto do Windows usando C++ e COM, demonstrando uma técnica furtiva de persistência. Ao registrar um objeto COM personalizado, seu código é executado sempre que um usuário clica com o botão direito em alvos específicos (arquivos, pastas ou fundos) no Windows Explorer.

Aviso: Este projeto é destinado apenas para fins educacionais e de pesquisa. As técnicas demonstradas aqui podem ser usadas para fins maliciosos. O autor não endossa o uso deste código para qualquer atividade ilegal. Seja responsável e use este conhecimento de forma ética.


POC

poc

Primeiros Passos

Pré-requisitos

  • Um compilador C++ (por exemplo, MSVC do Visual Studio, ou MinGW-w64)
  • SDK do Windows
  • Máquina Virtual de Teste (para registro e execução seguros)

Minha Configuração

  • IDE: Visual Studio 2019
  • VM Development: Windows 10 x64 (Build 19045)
  • VM Test: Windows 10 x64 / Windows 11 x64

Arquitetura do Projeto

                                       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

Contém as funções padrão exigidas por um objeto COM para registrar e cancelar o registro da DLL.

  • DllRegisterServer(): Escreve os caminhos do registro correspondentes às extensões de arquivo/fundos alvo. Executado quando a DLL é registrada.
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(): Limpa o registro. Chamado quando a DLL é cancelada.

2. MyClassFactory

Necessário para instanciar o objeto COM. Leia mais sobre Fábricas de Classe.

3. Clsid_defined.h

Contém o GUID sob o qual a aplicação será registrada no Explorer. Você pode gerar um novo GUID usando o guidgen.exe do Visual Studio ou um Gerador de GUID online.

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

4. Source.def

O arquivo de Definição de Módulo. Isso determina quais funções a DLL exporta. Leia mais sobre arquivos .DEF.

EXPORTS
    DllGetClassObject PRIVATE
    DllCanUnloadNow PRIVATE
    DllRegisterServer PRIVATE
    DllUnregisterServer PRIVATE

5. MyMenuHandler.cpp

A classe principal que implementa IShellExtInit e IContextMenu. É aqui que você define suas ações personalizadas.

  • MyContextMenuHandler::Initialize(PCIDLIST_ABSOLUTE pidlFolder, IDataObject* pdtobj, HKEY hkeyProgId) Chamada sempre que um clique direito ocorre em seu alvo registrado. Usada para analisar qual arquivo ou pasta foi clicado.
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) Chamada quando o usuário clica em sua opção personalizada específica no menu de contexto. É aqui que sua carga útil de persistência ou ação personalizada é executada.

Teste

Na VM de destino, copie a DLL compilada e execute os seguintes comandos:

1. Registro

Registre a DLL usando binários padrão do Windows.

regsvr32.exe RightHandPersistence.dll

2. Reiniciar o Explorer

Reinicie o processo explorer.exe para garantir que ele carregue a nova extensão de shell na memória.

taskkill /f /im explorer.exe & start explorer.exe

3. Cancelamento de Registro

Para remover o manipulador de menu de contexto e limpar o registro, use a flag /u com regsvr32.exe. Isso chama sua função DllUnregisterServer.

regsvr32.exe /u RightHandPersistence.dll

Personalização

Baixar ferramenta