
Упаковывает сборки C#, PE-файлы или shellcode в зашифрованные Nim-бинарные файлы с расширенными функциями обхода, включая обход AMSI/ETW, обнаружение песочницы и множественные техники внедрения для операций red team.
Этот инструмент был опубликован после выступления на x33fcon. Он был моим основным личным проектом по программированию с 2021 по 2024 год и теперь считается устаревшим и больше не поддерживается. Не ждите исправлений ошибок или обновлений функций с моей стороны. Вместо этого сейчас поддерживается RustPack — коммерческая и контролируемая версия для проверенных команд Red Team и пентестеров, которая обладает ещё большим функционалом, но при этом гораздо безопаснее с точки зрения OPSec.
Этот упаковщик можно использовать для упаковки любой C# сборки, PE-файла или shellcode в бинарный файл Nim. Он зашифрует целевой пэйлоад, сформирует соответствующий исходный код Nim в соответствии с заданными аргументами и скомпилирует его в бинарный файл Nim.
Видео — если вы предпочитаете такой формат — можно найти здесь: https://youtu.be/0PwIn3Nxmgo
Для корректной работы Nim/Nimble требуется установленный Git.
Протестировано с Nim 2.2.10 и набором MinGW-w64 GCC 11.1.0, ссылка на который есть на странице загрузки Nim для Windows. Новые версии Nim по умолчанию устанавливают высокий базовый адрес PE-образа в Windows, что ломает статические сборки с ошибкой relocation truncated to fit: R_X86_64_32S against .bss; теперь упаковщик принудительно использует -Wl,--image-base=0x10000, чтобы статические сборки работали, поэтому подойдёт любая сборка MinGW-w64 11.x. Поддерживается только x64 — x86/--x86/--wow64 не поддерживаются.
nim-2.2.10_x64.zipmingw64.7z (ссылка со страницы установки Nim для Windows)Expand-Archive Windows — он молча пропускает файл lib\system.nim из-за конфликта регистра в имени с папкой lib\system\). В архиве Nim есть bin\7zG.exe, с помощью которого можно распаковать MinGW.<nim>\bin и <mingw64>\bin в %PATH%. Выйдите из системы и войдите снова (или перезапустите оболочку), чтобы изменения вступили в силу.
Версии, заведомо работающие (по состоянию на Nim 2.2.10): nimcrypto 0.6.0, docopt 0.7.1, ptr_math 0.3.0, winim 3.9.4, nim-strenc (HEAD — у репозитория нет тегированных релизов).
Если вы хотите использовать LLVM-обфускатор в Windows, используйте встроенную модифицированную версию denim из denim. Установите её через denim\denim.exe setup.
Например, в Kali / Debian. Пакер исторически требовал nim 1.6.8 + mingw-64 8.0.0-1; с включённым теперь обходным путём статической компоновки --image-base=0x10000 должны работать и более новые цепочки инструментов. Сборка для Windows активно тестируется — Linux поддерживается по мере возможностей.```bash
apt-get install nim mingw-w64
nimble install [email protected] docopt ptr_math winim https://github.com/S3cur3Th1sSh1t/nim-strenc/
Если `--hellsgate` не собирается на более новой mingw-w64, откатитесь до `mingw-64=8.0.0-1`.
Установите donut через `pip3 install donut-shellcode`. `denim` нельзя использовать из Unix, поэтому обфускация через LLVM здесь невозможна. То же самое для Callobfuscator.
Скомпилируйте Packer через `nim c -d:noRES NimSyscallLoader.nim`. Готово к использованию. Если не использовать -d:noRES, может возникнуть следующая ошибка:```
/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.
Требуется собрать один раз (первый раз занимает некоторое время, последующие сборки будут кэшироваться).
sudo docker build . -t nimsyscallloader
Затем запустите упаковщик с помощью:
sudo docker run -v $(pwd):/shared nimsyscallloader <АРГУМЕНТЫ> --output=/shared/packed.exe
где $(pwd) — это каталог на хост-системе, который предоставляется контейнеру, т.е. каталог, где должны находиться файлы для шифрования и куда будет сохранён результат.
Если вы хотите использовать сертификаты подписи кода через LimeLighter, вам также потребуется установить следующие компоненты и добавить их в %PATH%: openssl - (для Windows), например, отсюда osslsigncode - например, отсюда
Я не буду оказывать поддержку по проблемам в сторонних инструментах, которые здесь используются. Пожалуйста, открывайте issue в соответствующих репозиториях, если у вас возникли проблемы с ними. Используемые сторонние инструменты:
Вы можете использовать мои предварительно скомпилированные бинарники или, конечно, скомпилировать их самостоятельно по ссылкам выше.
Видео — если вы предпочитаете его — можно найти здесь: https://youtu.be/UHaIgdzqHDA
Я также добавил короткие видео для некоторых функций, так как это было запрошено:
Caro-Kann:
Функция ThreadlessInject:
Функция Module Stomping:
Функция shellcodeURL:
Функция stegoFile:
Функция shellcodeFile:
Ruy Lopez для локальных процессов
Формат вывода shellcode
Функция вывода на ассемблере
И я сделал публичное видео, демонстрирующее, как настроить технику ThreadlessInject для других процессов, отличных от стандартного:
https://youtu.be/BYuAUYQcI-E``` NimSyscall_Loader v 2.2