Nimcrypt2は、AV/EDRをバイパスするために設計された別のPEパッカー/ローダーです。これは私のオリジナルのNimcryptプロジェクトを改良したもので、主な改善点はダイレクトシステムコールの使用と、通常のPEファイルとロウシェルコードの両方をロードできる機能です。
その前に、このプロジェクトが依存している膨大な作業と研究を行った方々に謝辞を述べなければなりません。まず、@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フラグを使用するには、システムにインストールされている必要があり、さらに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がエラーを表示します。