
.NET, PE и сырой шеллкод — упаковщик/загрузчик, написанный на Nim
Nimcrypt2 — это очередной PE-упаковщик/загрузчик, предназначенный для обхода AV/EDR. Это улучшение моего оригинального проекта Nimcrypt, основные улучшения включают использование прямых системных вызовов и возможность загружать обычные PE-файлы, а также сырой шелл-код.
Прежде чем продолжить, я должен отметить тех, кто проделал ОГРОМНУЮ часть работы и исследований, от которых зависит этот проект. Прежде всего, я благодарю @byt3bl33d3r за его репозиторий Offensive Nim и @ShitSecure за все фрагменты кода, которые он опубликовал. Именно из этого была создана оригинальная версия этого инструмента, и текущая версия не отличается. В частности, новая функциональность загрузки PE, используемая в этом инструменте, является просто реализацией недавно выпущенного кода ShitSecure Nim-RunPE. По состоянию на 14.03.22 этот код также использует его GetSyscallStub для динамического использования системных вызовов. Я настоятельно рекомендую спонсировать его для доступа к его собственному Nim PE Packer, который, несомненно, является гораздо лучшей и более функциональной версией этого.
Кроме того, я хотел бы поблагодарить @ajpc500 за его проект NimlineWhispers2, который этот инструмент использует для прямых системных вызовов. Не могу не подчеркнуть, что этот проект — просто объединение публичных работ вышеупомянутых авторов, поэтому вся заслуга принадлежит им.
___
.-' `'.
/ \
| ;
| | ___.--,
_.._ |0) ~ (0) | _.---'`__.-( (_.
__.--'`_.. '.__.\ '--. \_.-' ,.--'` `""`
( ,.--'` ',__ /./; ;, '.__.'` __
_`) ) .---.__.' / | |\ \__..--"" ""'--.,_
`---' .'.''-._.-'`_./ /\ '. \ _.-~~~````~~~-._`-.__.'
| | .' _.-' | | \ \ '. `~---`
\ \/ .' \ \ '. '-._)
\/ / \ \ `=.__`~-. Nimcrypt v2
jgs / /\ `) ) / / `"".`\
, _.-'.'\ \ / / ( ( / / 3-in-1 C#, PE, & Raw Shellcode Loader
`--~` ) ) .-'.' '.'. | (
(/` ( (` ) ) '-;
` '-; (-'
Nimcrypt v 2.0
Usage:
nimcrypt -f file_to_load -t csharp/raw/pe [-o <output>] [-p <process>] [-n] [-u] [-s] [-e] [-g] [-l] [-v] [--no-ppid-spoof]
nimcrypt (-h | --help)
Options:
-h --help Показать этот экран.
--version Показать версию.
-f --file filename Файл для загрузки
-t --type filetype Тип файла (csharp, raw или pe)
-p --process process Имя процесса для внедрения шелл-кода
-o --output filename Имя файла для скомпилированного exe
-u --unhook Снять хуки с ntdll.dll
-v --verbose Включить подробные сообщения во время выполнения
-e --encrypt-strings Шифровать строки с помощью модуля strenc
-g --get-syscallstub Использовать GetSyscallStub вместо NimlineWhispers2
-l --llvm-obfuscator Использовать Obfuscator-LLVM для компиляции бинарного файла
-n --no-randomization Отключить рандомизацию имен системных вызовов
-s --no-sandbox Отключить проверки песочницы
--no-ppid-spoof Отключить подмену PPID
Nimcrypt2 предназначен для использования на Linux-системах с установленным Nim. Перед установкой Nim убедитесь, что у вас установлены следующие пакеты через ваш менеджер пакетов:
sudo apt install gcc mingw-w64 xz-utils git
Для установки Nim я предпочитаю использовать choosenim следующим образом:
curl https://nim-lang.org/choosenim/init.sh -sSf | sh
echo "export PATH=$HOME/.nimble/bin:$PATH" >> ~/.bashrc
export PATH=$HOME/.nimble/bin:$PATH
Nimcrypt2 также зависит от нескольких пакетов, которые можно установить через Nimble. Это можно сделать так:
nimble install winim nimcrypto docopt ptr_math strenc
После установки всех зависимостей Nimcrypt2 можно скомпилировать следующим образом:
nim c -d=release --cc:gcc --embedsrc=on --hints=on --app=console --cpu=amd64 --out=nimcrypt nimcrypt.nim
ОПЦИОНАЛЬНО: Чтобы использовать флаг Obfuscator-LLVM, он должен быть установлен в вашей системе вместе с wclang. Это оказалось немного сложным, но с небольшим упорством вы сможете это сделать. Вот краткая пошаговая инструкция, которая сработала на моей системе Kali Linux:
Кроме того, вы должны добавить следующие строки в ваш файл nim.cfg, чтобы указать nim на ваши бинарные файлы wclang:
amd64.windows.clang.exe = "x86_64-w64-mingw32-clang"
amd64.windows.clang.linkerexe = "x86_64-w64-mingw32-clang"
amd64.windows.clang.cpp.exe = "x86_64-w64-mingw32-clang++"
amd64.windows.clang.cpp.linkerexe = "x86_64-w64-mingw32-clang++"
Вероятно, есть лучший способ сделать это, но это сработало у меня. Если возникнут проблемы, просто продолжайте попытки и убедитесь, что при запуске x86_64-w64-mingw32-clang -v в выводе отображается "Obfuscator-LLVM". Также убедитесь, что MinGW использует библиотечные файлы Obfuscator-LLVM: в противном случае Nim выдаст ошибку.