
Un'implementazione in Nim del caricamento riflessivo di PE dalla memoria
Un'implementazione in Nim di reflective PE-Loading dalla memoria. La base di questo codice è stata presa da RunPE-In-Memory - che ho portato in Nim.
Dovrai installare le seguenti dipendenze:
nimble install ptr_math winim
Ho testato questo solo con Nim versione 1.6.2, quindi usa quella versione per i test, altrimenti non posso garantire assenza di errori con altre versioni.
Se vuoi passare argomenti a runtime o non vuoi passare argomenti, compila con:
nim c NimRunPE.nim
Se vuoi hardcodare argomenti personalizzati, modifica const exeArgs secondo le tue esigenze e compila con:
nim c -d:args NimRunPE.nim - questo è stato contribuito da @glynx, grazie! 😎
Se vuoi il supporto completo per i callback Thread Local Storage (TLS), che consente l'esecuzione di PE Rust ecc., compila con:
nim c -d:full_tls NimRunPE.nim
Crediti a BlackBone & blog di lander/solstice-loader per l'implementazione dell'opzione full_tls.
La tecnica in sé è piuttosto vecchia, ma non ho ancora trovato un'implementazione in Nim. Quindi questo è cambiato ora. :)
Se prevedi di caricare ad esempio Mimikatz con questa tecnica - assicurati di compilare una versione dal sorgente da solo, poiché i binari rilasciati non accettano argomenti dopo essere stati caricati riflessivamente da questo loader. Perché? Non lo so davvero, è strano ma è un dato di fatto. Se compili da solo funzionerà comunque:
Il mio Packer privato è anche armato con questa tecnica - ma tutte le funzioni Win32 sono sostituite con Syscalls lì. Questo rende la tecnica più furtiva.