Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/racoten/reflectivepluginloader
Strumenti DifensiviMeccanismi di PersistenzaReverse EngineeringShellcodePost-ExploitAnalisi MalwareApprendimento e FormazioneRed TeamingSviluppo PayloadBinary Exploitation
GitHubracoten/reflectivepluginloader
821161 giorno faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →

ReflectivePluginLoader

Mapper PE riflessivo e motore di module stomping rafforzato contro l'evasione per Windows x64

Vedi Repository
Condividi

ReflectivePluginLoader

License: MIT

Un mapper PE riflessivo minimale e un motore di module stomping per Windows x64, costruito attorno a un'ABI IPlugin pulita. Mappa una DLL da un buffer di byte in memoria, risolve le esportazioni e chiama le funzioni del plugin — sia dalla memoria anonima (caricamento riflessivo classico) sia dall'interno di una DLL sacrificale caricata legittimamente (module stomping).

Il percorso di module stomping è evasion-hardened: protezioni per sezione (niente RWX), pulizia della mappatura privata, ripristino dei byte originali e scrubbing dell'heap. Le scansioni post-pulizia con pe-sieve, Moneta, hollows_hunter, BeaconEye e YARA restituiscono zero rilevamenti sul modulo sottoposto a stomping.

Avvio Rapido

Richiede CMake 3.15+ e MSVC, Clang o MinGW su 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)

Per una build di debug con output diagnostico completo:

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

Utilizzo

Caricamento riflessivo classico

.\harness.exe cmdplugin.dll whoami

Mappa il plugin nella memoria allocata con VirtualAlloc. Nessuna voce nel PEB, nessuna notifica al loader.

Module Stomping

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

Carica la DLL sacrificale legittimamente tramite LoadLibrary, poi sovrascrive la sua .text con il plugin come immagine contigua. L'esecuzione avviene dallo spazio di indirizzi della DLL sacrificale — gli stack di chiamata e le liste dei moduli attribuiscono il codice al modulo sacrificale.

L'harness si mette in pausa dopo la pulizia così puoi eseguire scanner di memoria contro il processo.

Come funziona il 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"

Pulizia (Evasione)

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

Dopo la pulizia, la DLL sacrificale è indistinguibile da un modulo caricato normalmente. Le pagine sono file-backed (non private), il contenuto corrisponde al file su disco e nessun artefatto PE rimane sull'heap.

Tecniche di Evasione

IOCMitigazione
Regioni di memoria RWXProtezioni per sezione: .text RX, .rdata R, .data RW
Memoria eseguibile privata (PE fluttuante)VirtualFree della mappatura privata dopo la risoluzione degli export
Codice del modulo modificatoRipristino dei byte originali di .text, poi FreeLibrary + LoadLibrary per pagine file-backed pulite
Header PE sull'heapmemset(0) del buffer DLL grezzo e dei byte salvati prima di liberare
Crash di DllMain allo scaricamentoEntry point patchato a mov eax,1; ret prima dello stomping

Struttura del Progetto

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

Scrivere un Plugin

  1. Crea una directory sotto Modules/ e includi IPlugin.h.
  2. Implementa l'interfaccia 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. Esporta i cinque entry point (create_plugin, destroy_plugin, plugin_init, plugin_exec, plugin_cleanup). Usa HeapAlloc + placement new per un'allocazione sicura per il CRT.

  2. Aggiungi un CMakeLists.txt e registralo nella root con add_subdirectory().

Scegliere una DLL Sacrificale

La sezione .text della DLL sacrificale deve essere più grande della dimensione dell'immagine virtuale del plugin. Non dovrebbe essere attivamente utilizzata dal processo né sottoposta a controlli di integrità a runtime.

Buoni candidati: xpsservices.dll (1.8 MB .text), mscms.dll, colorui.dll, npmproxy.dll

Cattivi candidati: ntdll.dll, kernel32.dll (attivamente utilizzate), clr.dll (sottoposta a controllo di integrità)

Limitazioni

  • Supportato: Rilocazioni di base, risoluzione degli import, protezioni per sezione, stomping di immagini contigue, pulizia completa con ripristino delle pagine
  • Non supportato: Callback TLS, import delay-load, export inoltrati, CFG, registrazione della tabella SEH
  • Stomping: L'intera immagine virtuale del plugin deve rientrare nella sezione .text sacrificale

Cosa è Cambiato (v2.0 — Irrobustimento dell'Evasione)

Questa release è una riscrittura da zero del proof-of-concept originale:

  • Motore di module stomping (StompedLoaderEngine.h) — stomping di immagini contigue con pulizia completa per l'evasione
  • Protezioni di memoria per sezione — .text RX, .rdata R, .data RW; niente più regioni RWX
  • Eliminazione delle pagine private — il ciclo FreeLibrary + LoadLibrary sostituisce le pagine privatizzate con pagine pulite backed da file
  • Pulizia dell'heap — i byte grezzi della DLL e la .text originale salvata vengono azzerati prima della finestra di scansione
  • Patching dell'entry point — mov eax,1; ret previene il crash di DllMain durante FreeLibrary
  • Pulizia del mapping privato — VirtualFree del mapping riflessivo dopo la risoluzione degli export (elimina il PE fluttuante)
  • Riscrittura del reflective loader (ReflectiveLoaderEngine.h) — mapping diretto dal buffer di input, nessuna copia intermedia con VirtualAlloc
  • Pulizia dell'ABI del plugin (IPlugin.h) — rimossi helper morti (BeaconCout, CStrLenA, PluginAlloc, PluginFree)
  • Pulizia di CmdPlugin — rimossi tutti i marker string e gli artefatti di debug
  • Riscrittura del test harness (main.cpp) — compilazione condizionale tramite NDEBUG; le build Release mostrano solo l'output dei comandi e i comandi di scansione
  • Default di CMake — tipo di build Release per impostazione predefinita, -nostartfiles per le DLL dei plugin (nessun CRT nel codice caricato in modo riflessivo)

Risultati dello Scanner (post-pulizia)

image

Riferimenti

Scarica lo strumento