
.NET, PE 및 Raw Shellcode Packer/Loader (Nim으로 작성됨)
Nimcrypt2는 또 다른 PE 패커/로더로, AV/EDR 우회를 목적으로 설계되었습니다. 이는 원래 Nimcrypt 프로젝트의 개선판이며, 주요 개선점으로는 직접 시스템 콜(direct syscalls) 사용과 일반 PE 파일 및 원시 셸코드(raw shellcode)를 모두 로드할 수 있는 기능이 있습니다.
더 나아가기 전에, 이 프로젝트가 의존하는 연구와 작업의 대부분을 수행한 분들에게 감사를 표해야 합니다. 먼저, @byt3bl33d3r님의 Offensive Nim 저장소와 @ShitSecure님이 공개적으로 제공한 여러 코드 조각들에 감사드립니다. 이 도구의 원래 버전이 이들로부터 만들어졌으며, 현재 버전도 마찬가지입니다. 특히, 이 도구에 사용된 새로운 PE 로딩 기능은 ShitSecure님이 최근 공개한 Nim-RunPE 코드의 구현체입니다. 2022년 3월 14일 기준으로, 이 코드는 동적 시스템 콜 사용을 위해 그의 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 Show this screen.
--version Show version.
-f --file filename File to load
-t --type filetype Type of file (csharp, raw, or pe)
-p --process process Name of process for shellcode injection
-o --output filename Filename for compiled exe
-u --unhook Unhook ntdll.dll
-v --verbose Enable verbose messages during execution
-e --encrypt-strings Encrypt strings using the strenc module
-g --get-syscallstub Use GetSyscallStub instead of NimlineWhispers2
-l --llvm-obfuscator Use Obfuscator-LLVM to compile binary
-n --no-randomization Disable syscall name randomization
-s --no-sandbox Disable sandbox checks
--no-ppid-spoof Disable PPID Spoofing
Nimcrypt2는 Nim이 설치된 Linux 시스템에서 사용하도록 설계되었습니다. 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 플래그를 사용하려면 시스템에 Obfuscator-LLVM과 wclang이 모두 설치되어 있어야 합니다. 약간 번거롭지만 조금만 인내심을 가지면 가능할 것입니다. 제 Kali Linux 시스템에서 작동했던 빠른 단계별 가이드는 다음과 같습니다:
또한, nim을 wclang 바이너리로 연결하기 위해 nim.cfg 파일에 다음 줄을 추가해야 합니다:
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이 오류를 발생시킵니다.