
Impacchetta assembly C#, file PE o shellcode in binari Nim crittografati con funzionalità evasive avanzate, inclusi bypass di AMSI/ETW, rilevamento sandbox e multiple tecniche di iniezione per operazioni red team.
Questo strumento è stato reso pubblico dopo un intervento al x33fcon. È stato il mio principale progetto di programmazione personale dal 2021 al 2024 e ora è considerato obsoleto e non più mantenuto. Non aspettarti correzioni di bug o aggiornamenti delle funzionalità da parte mia. Invece, RustPack è ora mantenuto come una versione commerciale e controllata per Red Team e Pentester verificati, che è ancora più ricca di funzionalità ma anche molto più sicura dal punto di vista OPSec.
Questo packer può essere utilizzato per impacchettare qualsiasi assembly C#, file PE o shellcode in un binario Nim. Critterà il payload di destinazione, genererà il corrispondente codice sorgente Nim in base agli argomenti forniti e lo compilerà in un binario Nim.
Un video – se preferisci – può essere trovato qui: https://youtu.be/0PwIn3Nxmgo
Git deve essere installato affinché Nim/Nimble funzioni correttamente.
Testato con Nim 2.2.10 e il bundle MinGW-w64 GCC 11.1.0 collegato dalla pagina di download di Nim per Windows. Le versioni più recenti di Nim di default utilizzano un indirizzo di base PE elevato su Windows, il che rompe i collegamenti -static con relocation truncated to fit: R_X86_64_32S against .bss; il packer ora forza -Wl,--image-base=0x10000 per mantenere funzionanti le build statiche, quindi qualsiasi build MinGW-w64 11.x dovrebbe andare bene. Solo x64 è supportato qui — x86/--x86/--wow64 non è mantenuto.
nim-2.2.10_x64.zipmingw64.7z (collegato dalla pagina di installazione di Nim per Windows)Expand-Archive di Windows — scarta silenziosamente lib\system.nim a causa del conflitto di maiuscole/minuscole con la directory lib\system\). Il zip di Nim include bin\7zG.exe che puoi usare per estrarre MinGW.<nim>\bin e <mingw64>\bin al tuo %PATH%. Effettua il logout/login (o riavvia la shell) affinché la modifica abbia effetto.
Versions known to work (as of Nim 2.2.10): nimcrypto 0.6.0, docopt 0.7.1, ptr_math 0.3.0, winim 3.9.4, nim-strenc (HEAD — il repo non ha release con tag).
Se si vuole utilizzare l'obfuscatore LLVM su Windows, usare la versione denim modificata integrata da denim. Installarla tramite denim\denim.exe setup.
Ad esempio su Kali / Debian. Il packer storicamente richiedeva nim 1.6.8 + mingw-64 8.0.0-1; con il workaround del collegamento statico --image-base=0x10000 ora integrato, anche toolchain più recenti dovrebbero funzionare. La build Windows è quella testata attivamente — Linux è un impegno al meglio.```bash
apt-get install nim mingw-w64
nimble install [email protected] docopt ptr_math winim https://github.com/S3cur3Th1sSh1t/nim-strenc/
Se `--hellsgate` non riesce a compilare su una versione più recente di mingw-w64, esegui il downgrade a `mingw-64=8.0.0-1`.
Installa donut tramite `pip3 install donut-shellcode`. `denim` non può essere usato da Unix, quindi l'offuscamento tramite LLVM non è possibile qui. Lo stesso vale per Callobfuscator.
Compila il Packer con `nim c -d:noRES NimSyscallLoader.nim`. Pronto all'uso. Se non usi -d:noRES potresti ottenere il seguente errore:```
/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.
Deve essere costruito una volta (richiede un po' di tempo la prima volta, le build successive verranno memorizzate nella cache).
sudo docker build . -t nimsyscallloader
Quindi esegui il packer con:
sudo docker run -v $(pwd):/shared nimsyscallloader <ARGOMENTI> --output=/shared/packed.exe
dove $(pwd) è la directory sul sistema host condivisa con il container, ovvero la directory in cui devono trovarsi i file da crittografare e dove verrà salvato l'output.
Se vuoi utilizzare i certificati di Code Signing tramite LimeLighter, dovrai anche avere installati e nel tuo %PATH% i seguenti componenti: openssl - (per Windows) per esempio da qui osslsigncode - per esempio da qui
Non fornirò supporto per problemi negli strumenti di terze parti qui utilizzati. Quindi, per favore, apri un ticket nei repository corrispondenti se incontri problemi con essi. Strumenti di terze parti in uso:
Puoi usare i miei binari precompilati oppure, ovviamente, compilarli tu stesso dai link sopra.
Un video - se preferisci - può essere trovato qui: https://youtu.be/UHaIgdzqHDA
Ho anche aggiunto brevi video per alcune funzionalità, come richiesto:
Caro-Kann:
Funzionalità ThreadlessInject:
Funzionalità Module Stomping:
Funzionalità shellcodeURL:
Funzionalità stegoFile:
Funzionalità shellcodeFile:
Ruy Lopez per processi locali
Formato output Shellcode
Funzionalità output Assembly
E ho realizzato un video pubblico che mostra come personalizzare la tecnica ThreadlessInject per processi diversi da quello predefinito:
https://youtu.be/BYuAUYQcI-E``` NimSyscall_Loader v 2.2