
Empaqueta ensamblados de C#, archivos PE o shellcode en binarios de Nim cifrados con funciones avanzadas de evasión, incluyendo bypass de AMSI/ETW, detección de sandbox y múltiples técnicas de inyección para operaciones de red team.
Esta herramienta se hizo pública tras una charla en x33fcon. Fue mi proyecto principal de codificación privado de 2021 a 2024 y ahora se considera obsoleto y ya no se mantiene. No esperes correcciones de errores ni nuevas funciones aquí por mi parte. En su lugar, RustPack se mantiene ahora como una versión comercial y controlada para Red Teams y Pentesters verificados, que tiene aún más funciones, pero también es mucho más seguro en términos de OPSec.
Este packer se puede usar para empaquetar cualquier ensamblado de C#, archivo PE o shellcode en un binario de Nim. Cifrará el payload objetivo, generará el código fuente de Nim correspondiente según los argumentos proporcionados y lo compilará en un binario de Nim.
Un video, si lo prefieres, se puede encontrar aquí: https://youtu.be/0PwIn3Nxmgo
Git debe estar instalado para que Nim/Nimble funcione correctamente.
Probado con Nim 2.2.10 y el paquete de MinGW-w64 GCC 11.1.0 enlazado desde la página de descarga de Windows de Nim. Las versiones más recientes de Nim usan por defecto una base de imagen PE alta en Windows, lo que rompe los enlaces -static con relocation truncated to fit: R_X86_64_32S against .bss; el packer ahora fuerza -Wl,--image-base=0x10000 para mantener las compilaciones estáticas funcionando, por lo que cualquier compilación MinGW-w64 11.x debería ser correcta. Aquí solo se admite x64 — x86/--x86/--wow64 no se mantiene.
nim-2.2.10_x64.zipmingw64.7z (enlazado desde la página de instalación de Nim para Windows)Expand-Archive integrado de Windows; elimina silenciosamente lib\system.nim debido a la colisión de mayúsculas/minúsculas con el directorio lib\system\). El zip de Nim incluye bin\7zG.exe, que puedes usar para extraer MinGW.<nim>\bin y <mingw64>\bin a tu %PATH%. Cierra sesión/vuelve a iniciarla (o reinicia tu shell) para que el cambio surta efecto.
Versiones conocidas que funcionan (a partir de Nim 2.2.10): nimcrypto 0.6.0, docopt 0.7.1, ptr_math 0.3.0, winim 3.9.4, nim-strenc (HEAD — el repositorio no tiene versiones etiquetadas).
Si quieres usar el ofuscador de LLVM en Windows, usa la versión modificada de denim incluida desde denim. Instálala mediante denim\denim.exe setup.
P. ej. en Kali / Debian. El empaquetador históricamente requería nim 1.6.8 + mingw-64 8.0.0-1; con el workaround de enlace estático --image-base=0x10000 ahora integrado, las cadenas de herramientas más nuevas deberían funcionar también. La compilación de Windows es la que se prueba activamente — Linux es de mejor esfuerzo.```bash
apt-get install nim mingw-w64
nimble install [email protected] docopt ptr_math winim https://github.com/S3cur3Th1sSh1t/nim-strenc/
Si `--hellsgate` falla al ensamblar en un mingw-w64 más nuevo, degrada a `mingw-64=8.0.0-1`.
Instala donut mediante `pip3 install donut-shellcode`. `denim` no puede usarse desde Unix, por lo que la ofuscación mediante LLVM no es posible aquí. Lo mismo para Callobfuscator.
Compila el Packer mediante `nim c -d:noRES NimSyscallLoader.nim`. Listo para usar. Si no usas -d:noRES, podrías obtener el siguiente error:```
/username/.nimble/pkgs/winim-3.7.1/winim/lib/winim64.res:(.rsrc+0x48): dangerous relocation: collect2: fatal error: ld terminated with signal 11 [Speicherzugriffsfehler]
compilation terminated.
Debe compilarse una vez (la primera vez lleva algo de tiempo, las compilaciones posteriores se almacenarán en caché).
sudo docker build . -t nimsyscallloader
Luego ejecute el packer con:
sudo docker run -v $(pwd):/shared nimsyscallloader <ARGUMENTS> --output=/shared/packed.exe
donde $(pwd) es el directorio del sistema host que se comparte con el contenedor, es decir, el directorio donde deben estar los archivos a cifrar y donde se guardará la salida.
Si quieres hacer uso de certificados de firma de código a través de LimeLighter, también necesitarás tener instaladas las siguientes cosas y en tu %PATH%: openssl - (para Windows) por ejemplo desde aquí osslsigncode - por ejemplo desde aquí
No daré soporte para problemas en las herramientas de terceros que se utilizan aquí. Por favor, abre un issue en los repositorios correspondientes si tienes problemas con ellas. Herramientas de terceros en uso:
Puedes usar mis binarios precompilados o, por supuesto, compilarlos tú mismo desde los enlaces anteriores.
Un video - si lo prefieres - se puede encontrar aquí: https://youtu.be/UHaIgdzqHDA
También añadí videos cortos para algunas funciones, ya que fue solicitado:
Caro-Kann:
Función ThreadlessInject:
Función Module Stomping:
Función shellcodeURL:
Función stegoFile:
Función shellcodeFile:
Ruy Lopez para procesos locales
Formato de salida de shellcode
Función de salida en ensamblador
Y hice un video público mostrando cómo personalizar la técnica ThreadlessInject para otros procesos distintos del predeterminado:
https://youtu.be/BYuAUYQcI-E``` NimSyscall_Loader v 2.2