Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
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
ReflectivePluginLoader — Mapeador PE reflexivo e mecanismo de module stomping reforçado contra evasão para Windows x64 | Kitploit
Ferramentas/GitHubGitHub/racoten/reflectivepluginloader
Ferramentas DefensivasMecanismos de PersistênciaEngenharia ReversaShellcodePós-ExploraçãoAnálise de MalwareAprendizado e EducaçãoRed TeamingDesenvolvimento de PayloadsExploração de Binários
GitHubracoten/reflectivepluginloader
82116há 1 diaAinda não revisado

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 →

ReflectivePluginLoader

Mapeador PE reflexivo e mecanismo de module stomping reforçado contra evasão para Windows x64

Ver Repositório
Compartilhar

ReflectivePluginLoader

License: MIT

Um mapeador PE reflexivo minimalista e mecanismo de module stomping para Windows x64, construído em torno de uma ABI IPlugin limpa. Mapeia uma DLL a partir de um buffer de bytes na memória, resolve exports e chama funções do plugin — seja a partir de memória anônima (carregamento reflexivo clássico) ou de dentro de uma DLL sacrificial carregada legitimamente (module stomping).

O caminho de module stomping é reforçado contra evasão: proteções por secção (sem RWX), limpeza de mapeamento privado, restauração de bytes originais e limpeza de heap. Análises pós-limpeza com pe-sieve, Moneta, hollows_hunter, BeaconEye e YARA não retornam quaisquer deteções no módulo alvo de stomping.

Início Rápido

Requer CMake 3.15+ e MSVC, Clang ou MinGW no Windows.

# Configure (defaults to Release)
cmake -B build -G Ninja

# Build
cmake --build build

# The build produces:
#   build/Modules/CmdPlugin/cmdplugin.dll   (example plugin)
#   build/Testing/harness.exe               (test harness)

Para uma compilação Debug com saída de diagnóstico completa:

cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
cmake --build build

Uso

Carregamento Reflexivo Clássico

.\harness.exe cmdplugin.dll whoami

Mapeia o plugin para memória alocada com VirtualAlloc. Sem entrada no PEB, sem notificação do loader.

Module Stomping

.\harness.exe cmdplugin.dll whoami --stomp xpsservices.dll
.\harness.exe cmdplugin.dll "dir C:\" --stomp mscms.dll

Carrega a DLL sacrificial legitimamente via LoadLibrary, depois sobrescreve seu .text com o plugin como uma imagem contígua. A execução ocorre a partir do espaço de endereçamento da DLL sacrificial — call stacks e listas de módulos atribuem o código ao módulo sacrificial.

O harness pausa após a limpeza para que você possa executar scanners de memória contra o processo.

Como Funciona o Module Stomping

1. MapImage(plugin)               private reflective mapping
2. LoadLibrary(sacrificial)       legitimate load, PEB entry
3. Save original .text bytes      for later restoration
4. Copy plugin image -> .text     contiguous image preserves RIP-relative offsets
5. Relocate stomped code          fix addresses for new base
6. Patch entry point              mov eax,1; ret (safe FreeLibrary)
7. Per-section protections        RX / R / RW per section (never RWX)
8. Resolve exports                from private mapping, return stomped addresses
9. Free private mapping           eliminates floating PE artifact
10. Execute plugin                code runs inside "sacrificial.dll"

Limpeza (Evasão)

11. Restore original .text bytes  sacrificial code back in place
12. FreeLibrary(sacrificial)      unloads the module
13. LoadLibrary(sacrificial)      fresh load = clean file-backed pages
14. Scrub heap buffers            zero saved bytes + raw DLL data

Após a limpeza, a DLL sacrificial é indistinguível de um módulo carregado normalmente. As páginas são respaldadas por arquivo (não privadas), o conteúdo corresponde ao arquivo em disco e nenhum artefato PE permanece no heap.

Técnicas de Evasão

IOCMitigação
Regiões de memória RWXProteções por seção: .text RX, .rdata R, .data RW
Memória executável privada (PE flutuante)VirtualFree no mapeamento privado após a resolução de exportações
Código de módulo modificadoRestaurar os bytes originais de .text, depois FreeLibrary + LoadLibrary para páginas limpas respaldadas por arquivo
Cabeçalhos PE no heapmemset(0) no buffer bruto da DLL e nos bytes salvos antes de liberar
Crash do DllMain ao descarregarPonto de entrada corrigido para mov eax,1; ret antes da sobrescrita

Estrutura do Projeto

ReflectivePluginLoader/
├── CMakeLists.txt
├── Include/
│   ├── IPlugin.h                      Plugin ABI (TaskApi, IPlugin)
│   ├── ReflectiveLoaderEngine.h       PE mapper + export resolver
│   └── StompedLoaderEngine.h          Module stomping engine
├── Modules/
│   └── CmdPlugin/
│       ├── cmdplugin.cpp              Command execution plugin
│       └── CMakeLists.txt
├── Testing/
│   ├── main.cpp                       Test harness
│   └── CMakeLists.txt
└── Tools/
    └── file2hex.py                    DLL to C byte array converter

Escrevendo um Plugin

  1. Crie um diretório em Modules/ e inclua IPlugin.h.
  2. Implemente a interface IPlugin:
#include "IPlugin.h"

class MyPlugin : public IPlugin {
public:
    void init()                  const override { /* setup */ }
    void execute(TaskApi* task)  const override { /* work  */ }
    void cleanup()               const override { /* tear  */ }
};
  1. Exporte os cinco pontos de entrada (create_plugin, destroy_plugin, plugin_init, plugin_exec, plugin_cleanup). Use HeapAlloc + placement new para alocação segura em relação ao CRT.

  2. Adicione um CMakeLists.txt e registre-o na raiz com add_subdirectory().

Escolhendo uma DLL Sacrificial

A seção .text da DLL sacrificial deve ser maior que o tamanho da imagem virtual do plugin. Ela não deve estar sendo usada ativamente pelo processo nem ter verificação de integridade em tempo de execução.

Bons candidatos: xpsservices.dll (1,8 MB de .text), mscms.dll, colorui.dll, npmproxy.dll

Maus candidatos: ntdll.dll, kernel32.dll (usadas ativamente), clr.dll (verificada quanto à integridade)

Limitações

  • Suportado: realocações de base, resolução de importações, proteções por seção, stomping de imagem contígua, limpeza completa com restauração de páginas
  • Não suportado: callbacks TLS, importações de delay-load, exportações encaminhadas, CFG, registro de tabela SEH
  • Stomping: toda a imagem virtual do plugin deve caber na seção .text sacrificial

O que Mudou (v2.0 — Reforço de Evasão)

Esta versão é uma reescrita completa da prova de conceito original:

  • Motor de module stomping (StompedLoaderEngine.h) — stomping de imagem contígua com limpeza completa de evasão
  • Proteções de memória por seção — .text RX, .rdata R, .data RW; sem mais regiões RWX
  • Eliminação de páginas privadas — o ciclo FreeLibrary + LoadLibrary substitui páginas privatizadas por páginas limpas respaldadas por arquivo
  • Limpeza de heap — bytes brutos da DLL e o .text original salvo são zerados antes da janela de varredura
  • Patch do ponto de entrada — mov eax,1; ret evita o crash do DllMain durante FreeLibrary
  • Limpeza de mapeamento privado — VirtualFree no mapeamento reflexivo após a resolução de exportações (elimina o PE flutuante)
  • Reescrita do reflective loader (ReflectiveLoaderEngine.h) — mapeamento direto a partir do buffer de entrada, sem cópia intermediária via VirtualAlloc
  • Limpeza da ABI do plugin (IPlugin.h) — removidos helpers mortos (BeaconCout, CStrLenA, PluginAlloc, PluginFree)
  • Limpeza do CmdPlugin — removidas todas as strings marcadoras e artefatos de depuração
  • Reescrita do harness de teste (main.cpp) — compilação condicional via NDEBUG; builds Release mostram apenas a saída de comandos e comandos de varredura
  • Padrões do CMake — tipo de build Release por padrão, -nostartfiles para DLLs de plugin (sem CRT no código carregado reflexivamente)

Resultados do Scanner (pós-limpeza)

image

Referências

Baixar ferramenta