
Conditionne des assemblages C#, des fichiers PE ou du shellcode en binaires Nim chiffrés avec des fonctionnalités avancées d'évasion incluant le contournement d'AMSI/ETW, la détection de sandbox et de multiples techniques d'injection pour des opérations d'équipe rouge.
Cet outil a été rendu public après une conférence à x33fcon. C'était mon projet de codage principal privé de 2021 à 2024 et il est maintenant considéré comme déprécié et n'est plus maintenu. N'attendez pas de corrections de bugs ou de nouvelles fonctionnalités de ma part. À la place, RustPack est maintenant maintenu en tant que version commerciale et contrôlée pour les Red Teams et Pentesteurs vérifiés, encore plus riche en fonctionnalités mais aussi bien plus sûr pour l'OPSec.
Ce packer peut être utilisé pour empaqueter n'importe quel assembly C#, fichier PE ou shellcode dans un binaire Nim. Il chiffre la charge utile cible, génère le code source Nim correspondant selon les arguments donnés et le compile en un binaire Nim.
Une vidéo – si vous préférez – est disponible ici : https://youtu.be/0PwIn3Nxmgo
Git doit être installé pour que Nim/Nimble fonctionne correctement.
Testé avec Nim 2.2.10 et le bundle MinGW-w64 GCC 11.1.0 lié depuis la page de téléchargement Windows de Nim. Les versions plus récentes de Nim utilisent par défaut une image base PE élevée sous Windows, ce qui casse les liens -static avec relocation truncated to fit: R_X86_64_32S against .bss ; le packer force désormais -Wl,--image-base=0x10000 pour que les builds statiques restent fonctionnels, donc toute version de MinGW-w64 11.x devrait convenir. Seul le x64 est pris en charge ici — x86/--x86/--wow64 n'est pas maintenu.
Expand-Archive intégré de Windows — il supprime silencieusement lib\system.nim à cause d’un conflit de casse avec le dossier lib\system\). L'archive zip de Nim contient bin\7zG.exe que vous pouvez utiliser pour extraire MinGW.<nim>\bin et <mingw64>\bin à votre %PATH%. Déconnectez-vous/reconnectez-vous (ou redémarrez votre terminal) pour que le changement soit pris en compte.
Versions connues pour fonctionner (en date 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 — le dépôt n'a pas de versions marquées).
If you want to use the LLVM obfuscator on Windows, use the embedded modified denim version from denim. Install it via denim\denim.exe setup.
E.g. on Kali / Debian. The packer historically required nim 1.6.8 + mingw-64 8.0.0-1; with the static-link --image-base=0x10000 workaround now baked in, newer toolchains should work too. The Windows build is what's actively tested — Linux is best-effort.```bash
apt-get install nim mingw-w64
nimble install [email protected] docopt ptr_math winim https://github.com/S3cur3Th1sSh1t/nim-strenc/
Si `--hellsgate` échoue à l'assemblage sur un mingw-w64 plus récent, rétrogradez vers `mingw-64=8.0.0-1`.
Installez donut via `pip3 install donut-shellcode`. `denim` ne peut pas être utilisé depuis Unix, donc l'obfuscation via LLVM n'est pas possible ici. Idem pour Callobfuscator.
Compilez le Packer via `nim c -d:noRES NimSyscallLoader.nim`. Prêt à l'emploi. Si vous n'utilisez pas -d:noRES, vous pourriez obtenir l'erreur suivante :```
/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.
Doit être construit une fois (prend du temps la première fois, les builds suivants seront mis en cache).
sudo docker build . -t nimsyscallloader
Puis exécutez le packer avec :
sudo docker run -v $(pwd):/shared nimsyscallloader <ARGUMENTS> --output=/shared/packed.exe
où $(pwd) est le répertoire sur le système hôte qui est partagé avec le conteneur, c'est-à-dire le répertoire où se trouvent les fichiers à chiffrer et où la sortie sera sauvegardée.
Si vous souhaitez utiliser des certificats de signature de code via LimeLighter, vous aurez également besoin des éléments suivants installés et dans votre %PATH% : openssl - (pour Windows) par exemple depuis ici osslsigncode - par exemple depuis ici
Je ne fournirai pas de support pour les problèmes rencontrés avec les outils tiers utilisés ici. Veuillez donc ouvrir un ticket dans les dépôts correspondants si vous rencontrez des problèmes avec eux. Outils tiers utilisés :
Vous pouvez utiliser mes binaires précompilés ou bien sûr les compiler vous-même à partir des liens ci-dessus.
Une vidéo - si vous préférez - est disponible ici : https://youtu.be/UHaIgdzqHDA
J'ai également ajouté de courtes vidéos pour certaines fonctionnalités, comme cela a été demandé :
Caro-Kann :
Fonctionnalité ThreadlessInject :
Fonctionnalité Module Stomping :
Fonctionnalité shellcodeURL :
Fonctionnalité stegoFile :
Fonctionnalité shellcodeFile :
Ruy Lopez pour les processus locaux
Format de sortie Shellcode
Fonctionnalité de sortie Assembly
Et j'ai réalisé une vidéo publique montrant comment personnaliser la technique ThreadlessInject pour d'autres processus que celui par défaut :
https://youtu.be/BYuAUYQcI-E``` NimSyscall_Loader v 2.2