
Empacota assemblies C#, arquivos PE ou shellcode em binários Nim criptografados com recursos avançados de evasão, incluindo bypass de AMSI/ETW, detecção de sandbox e múltiplas técnicas de injeção para operações de red team.
Esta ferramenta foi tornada pública após uma palestra no x33fcon. Foi meu projeto privado de codificação principal de 2021 a 2024 e agora é considerada obsoleta e não é mais mantida. Não espere correções de bugs ou atualizações de funcionalidades da minha parte. Em vez disso, o RustPack é mantido agora como uma versão comercial e controlada para Red Teams e Pentesters selecionados, que é ainda mais rica em funcionalidades, mas também muito mais segura em termos de OPSec.
Este Packer pode ser usado para empacotar qualquer Assembly C#, PE-File ou Shellcode em um binário Nim. Ele criptografará o payload alvo, construirá o código fonte Nim correspondente de acordo com os argumentos fornecidos e o compilará em um binário Nim.
Um Vídeo - se preferir - pode ser encontrado aqui: https://youtu.be/0PwIn3Nxmgo
O Git precisa estar instalado para que Nim/Nimble funcionem corretamente.
Testado com Nim 2.2.10 e o pacote MinGW-w64 GCC 11.1.0 vinculado à página de download do Nim para Windows. Versões mais recentes do Nim usam uma base de imagem PE alta no Windows por padrão, o que quebra links -static com relocation truncated to fit: R_X86_64_32S against .bss; o packer agora força -Wl,--image-base=0x10000 para manter builds estáticos funcionando, então qualquer build MinGW-w64 11.x deve funcionar. Apenas x64 é suportado aqui — x86/--x86/--wow64 não é mantido.
nim-2.2.10_x64.zipmingw64.7z (linked from the Nim Windows install page)Expand-Archive embutido do Windows — ele descarta silenciosamente lib\system.nim devido à colisão de maiúsculas/minúsculas com o diretório lib\system\). O zip do Nim inclui bin\7zG.exe que você pode usar para extrair o MinGW.<nim>\bin e <mingw64>\bin ao seu %PATH%. Faça logoff/logon (ou reinicie seu shell) para que a alteração tenha efeito.
Versões conhecidas por funcionar (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 — o repositório não tem lançamentos com tags).
Se quiser usar o ofuscador LLVM no Windows, use a versão modificada do denim incorporada do denim. Instale-a através de denim\denim.exe setup.
Ex. no Kali/Debian. O packer historicamente exigia nim 1.6.8 + mingw-64 8.0.0-1; com a solução alternativa de link estático --image-base=0x10000 agora incorporada, toolchains mais novos também devem funcionar. A build do Windows é a que é ativamente testada — Linux é best-effort.```bash
apt-get install nim mingw-w64
nimble install [email protected] docopt ptr_math winim https://github.com/S3cur3Th1sSh1t/nim-strenc/
Se `--hellsgate` falhar ao compilar em um mingw-w64 mais recente, faça o downgrade para `mingw-64=8.0.0-1`.
Instale o donut via `pip3 install donut-shellcode`. `denim` não pode ser usado a partir do Unix, portanto a ofuscação via LLVM não é possível aqui. O mesmo vale para o Callobfuscator.
Compile o Packer via `nim c -d:noRES NimSyscallLoader.nim`. Pronto para usar. Se você não usar -d:noRES, poderá obter o seguinte erro:```
/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.
Precisa ser construído uma vez (leva algum tempo na primeira vez, construções subsequentes serão armazenadas em cache).
sudo docker build . -t nimsyscallloader
Então execute o packer com:
sudo docker run -v $(pwd):/shared nimsyscallloader <ARGUMENTS> --output=/shared/packed.exe
onde $(pwd) é o diretório no sistema host que é compartilhado com o contêiner, ou seja, o diretório onde os arquivos a serem criptografados devem estar e onde a saída será salva.
Se você quiser usar certificados de assinatura de código via LimeLighter, também precisará das seguintes coisas instaladas e no seu %PATH%: openssl - (para Windows) por exemplo de aqui osslsigncode - por exemplo de aqui
Não darei suporte para problemas nas ferramentas de terceiros que são usadas aqui. Portanto, por favor, abra uma issue nos repositórios correspondentes se estiver enfrentando problemas com elas. Ferramentas de terceiros em uso:
Você pode usar meus binários pré-compilados ou, claro, compilá-los você mesmo a partir dos links acima.
Um vídeo - se preferir - pode ser encontrado aqui: https://youtu.be/UHaIgdzqHDA
Também adicionei vídeos curtos para alguns recursos, conforme solicitado:
Caro-Kann:
Recurso ThreadlessInject:
Recurso Module Stomping:
Recurso shellcodeURL:
Recurso stegoFile:
Recurso shellcodeFile:
Ruy Lopez para processos locais
Formato de saída shellcode
Recurso de saída Assembly
E fiz um vídeo público mostrando como personalizar a técnica ThreadlessInject para outros processos além do padrão:
https://youtu.be/BYuAUYQcI-E``` NimSyscall_Loader v 2.2