
.NET, PE e Shellcode Grezzo Packer/Loader scritto in Nim
Nimcrypt2 è un altro packer/loader di PE progettato per bypassare AV/EDR. È un miglioramento del mio originale progetto Nimcrypt, con i principali miglioramenti che sono l'uso di syscall dirette e la capacità di caricare file PE normali oltre a shellcode grezzi.
Prima di proseguire, devo riconoscere coloro che hanno svolto la stragrande maggioranza del lavoro e della ricerca da cui questo progetto dipende. Innanzitutto, devo ringraziare @byt3bl33d3r per il suo repository Offensive Nim, e @ShitSecure per tutti i frammenti di codice che ha rilasciato pubblicamente. Da lì è stata creata la versione originale di questo strumento, e la versione attuale non fa eccezione. In particolare, la nuova funzionalità di caricamento PE utilizzata in questo strumento è solo un'implementazione del codice Nim-RunPE recentemente rilasciato da ShitSecure. A partire dal 14/3/22, questo codice utilizza anche il suo codice GetSyscallStub per l'uso dinamico delle syscall. Consiglio vivamente di sponsorizzarlo per avere accesso al suo Nim PE Packer, che è senza dubbio una versione molto migliore e più ricca di funzionalità di questo.
Inoltre, vorrei ringraziare @ajpc500 per il suo progetto NimlineWhispers2 che questo strumento utilizza per le syscall dirette. Non posso sottolineare abbastanza come questo progetto sia semplicemente un amalgama del lavoro pubblico di coloro menzionati in precedenza, quindi tutto il merito va a loro.
___
.-' `'.
/ \
| ;
| | ___.--,
_.._ |0) ~ (0) | _.---'`__.-( (_.
__.--'`_.. '.__.\ '--. \_.-' ,.--'` `""`
( ,.--'` ',__ /./; ;, '.__.'` __
_`) ) .---.__.' / | |\ \__..--"" ""'--.,_
`---' .'.''-._.-'`_./ /\ '. \ _.-~~~````~~~-._`-.__.'
| | .' _.-' | | \ \ '. `~---`
\ \/ .' \ \ '. '-._)
\/ / \ \ `=.__`~-. Nimcrypt v2
jgs / /\ `) ) / / `"".`\
, _.-'.'\ \ / / ( ( / / 3-in-1 C#, PE, & Raw Shellcode Loader
`--~` ) ) .-'.' '.'. | (
(/` ( (` ) ) '-;
` '-; (-'
Nimcrypt v 2.0
Usage:
nimcrypt -f file_to_load -t csharp/raw/pe [-o <output>] [-p <process>] [-n] [-u] [-s] [-e] [-g] [-l] [-v] [--no-ppid-spoof]
nimcrypt (-h | --help)
Options:
-h --help Show this screen.
--version Show version.
-f --file filename File to load
-t --type filetype Type of file (csharp, raw, or pe)
-p --process process Name of process for shellcode injection
-o --output filename Filename for compiled exe
-u --unhook Unhook ntdll.dll
-v --verbose Enable verbose messages during execution
-e --encrypt-strings Encrypt strings using the strenc module
-g --get-syscallstub Use GetSyscallStub instead of NimlineWhispers2
-l --llvm-obfuscator Use Obfuscator-LLVM to compile binary
-n --no-randomization Disable syscall name randomization
-s --no-sandbox Disable sandbox checks
--no-ppid-spoof Disable PPID Spoofing
Nimcrypt2 è progettato per essere utilizzato su sistemi Linux con Nim installato. Prima di installare Nim, devi assicurarti di avere i seguenti pacchetti installati tramite il tuo gestore di pacchetti:
sudo apt install gcc mingw-w64 xz-utils git
Per installare Nim, preferisco usare choosenim come segue:
curl https://nim-lang.org/choosenim/init.sh -sSf | sh
echo "export PATH=$HOME/.nimble/bin:$PATH" >> ~/.bashrc
export PATH=$HOME/.nimble/bin:$PATH
Nimcrypt2 dipende anche da alcuni pacchetti che possono essere installati tramite Nimble. Questo può essere fatto così:
nimble install winim nimcrypto docopt ptr_math strenc
Con tutte le dipendenze ora installate, Nimcrypt2 può essere compilato così:
nim c -d=release --cc:gcc --embedsrc=on --hints=on --app=console --cpu=amd64 --out=nimcrypt nimcrypt.nim
OPZIONALE: Per usare il flag Obfuscator-LLVM, devi averlo installato sul tuo sistema insieme a wclang. Ho trovato questo un po' fastidioso ma dovresti essere in grado di farlo con un po' di perseveranza. Ecco una rapida guida passo-passo che ha funzionato sul mio sistema Kali Linux:
Inoltre, devi aggiungere le seguenti righe al tuo file nim.cfg per puntare nim ai tuoi binari wclang:
amd64.windows.clang.exe = "x86_64-w64-mingw32-clang"
amd64.windows.clang.linkerexe = "x86_64-w64-mingw32-clang"
amd64.windows.clang.cpp.exe = "x86_64-w64-mingw32-clang++"
amd64.windows.clang.cpp.linkerexe = "x86_64-w64-mingw32-clang++"
Probabilmente c'è un modo migliore per farlo ma questo è ciò che ha funzionato per me. Se hai problemi, continua a provare e assicurati di poter eseguire x86_64-w64-mingw32-clang -v e che mostri "Obfuscator-LLVM" nell'output. Assicurati anche che MinGW stia usando i file di libreria Obfuscator-LLVM: Nim ti darà un errore altrimenti.