
.NET, PE y Raw Shellcode Empaquetador/Cargador Escrito en Nim
Nimcrypt2 es otro empaquetador/cargador de PE diseñado para evadir AV/EDR. Es una mejora de mi proyecto original Nimcrypt, siendo las principales mejoras el uso de llamadas directas al sistema y la capacidad de cargar archivos PE normales además de shellcode sin procesar.
Antes de continuar, debo reconocer a quienes hicieron la GRAN mayoría del trabajo e investigación de los que depende este proyecto. En primer lugar, agradezco a @byt3bl33d3r por su repositorio Offensive Nim, y a @ShitSecure por todos los fragmentos de código que ha publicado públicamente. De ahí se creó la versión original de esta herramienta, y la versión actual no es diferente. En particular, la nueva funcionalidad de carga de PE utilizada en esta herramienta es simplemente una implementación del código Nim-RunPE de ShitSecure, lanzado recientemente. A partir del 14/3/22, este código también utiliza su código GetSyscallStub para el uso dinámico de syscalls. Recomiendo encarecidamente patrocinarlo para acceder a su propio Nim PE Packer, que sin duda es una versión mucho mejor y con más funciones que esta.
Además, me gustaría agradecer a @ajpc500 por su proyecto NimlineWhispers2 que esta herramienta utiliza para las llamadas directas al sistema. No puedo enfatizar lo suficiente cómo este proyecto es simplemente una amalgama del trabajo público de los mencionados anteriormente, por lo que todo el crédito debe ir para ellos.
___
.-' `'.
/ \
| ;
| | ___.--,
_.._ |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 está diseñado para usarse en sistemas Linux con Nim instalado. Antes de instalar Nim, debes asegurarte de tener los siguientes paquetes instalados a través de tu gestor de paquetes:
sudo apt install gcc mingw-w64 xz-utils git
Para instalar Nim, prefiero usar choosenim de la siguiente manera:
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 también depende de algunos paquetes que se pueden instalar a través de Nimble. Esto se puede hacer así:
nimble install winim nimcrypto docopt ptr_math strenc
Con todas las dependencias ahora instaladas, Nimcrypt2 se puede compilar así:
nim c -d=release --cc:gcc --embedsrc=on --hints=on --app=console --cpu=amd64 --out=nimcrypt nimcrypt.nim
OPCIONAL: Para usar la bandera Obfuscator-LLVM, debes tenerlo instalado en tu sistema junto con wclang. He encontrado que esto es un poco molesto, pero deberías poder hacerlo con un poco de perseverancia. Aquí hay una guía rápida paso a paso que funcionó en mi sistema Kali Linux:
Además, debes agregar las siguientes líneas a tu archivo nim.cfg para que nim apunte a tus binarios de 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++"
Probablemente haya una mejor manera de hacer esto, pero esto es lo que funcionó para mí. Si tienes problemas, sigue intentando y asegúrate de poder ejecutar x86_64-w64-mingw32-clang -v y que muestre "Obfuscator-LLVM" en la salida. También asegúrate de que MinGW esté usando los archivos de librería de Obfuscator-LLVM: Nim te dará un error si no es así.