Nimcrypt2
Nimcrypt2 是一个旨在绕过 AV/EDR 的 PE 打包程序/加载程序。这是对我最初的Nimcrypt项目的改进,主要改进是使用直接系统调用和加载常规 PE 文件以及原始 shellcode 的能力。
在继续之前,我必须感谢那些完成了这个项目所依赖的大部分工作和研究的人。
首先,我必须感谢@byt3bl33d3r的Offensive Nim repo和@ShitSecure他公开发布的所有代码片段。这就是创建此工具的原始版本的基础,当前版本也不例外。特别是,该工具中使用的新 PE 加载功能只是 ShitSecure 最近发布的Nim-RunPE代码的一个实现。截至 22 年 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]
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
参数(中文翻译)
选项:
-h --help 显示此屏幕。
--version 显示版本。
-f --file 文件名 要加载的文件
-t --type filetype 文件类型(csharp、raw 或 pe)
-p --process process 注入shellcode的进程名
-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 禁用沙盒检查
特征
- NtQueueApcThread 执行带有 PPID 欺骗和第 3 方 DLL 阻塞的 Shellcode
- NimlineWhispers2 和 GetSyscallStub 用于系统调用
- 系统调用名称随机化
- 能够加载 .NET 和常规 PE 文件
- 具有动态密钥生成的 AES 加密
- LLVM 混淆器兼容性
- 字符串加密
- 沙盒规避
安装/依赖
Nimcrypt2 设计用于安装了 Nim 的 Linux 系统。在安装 Nim 之前,您必须确保通过包管理器安装了以下包:
要安装 Nim,我更喜欢使用choosenim,如下所示:sudo apt install gcc mingw-w64 xz-utils git
Nimcrypt2 还依赖于一些可以通过 Nimble 安装的包。这可以这样做: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 install winim nimcrypto docopt ptr_math strenc
可选:要使用Obfuscator-LLVM标志,您必须将它与wclang一起安装在系统上。我发现这有点痛苦,但你应该能够坚持不懈地做到这一点。这是在我的 Kali Linux 系统上运行的快速分步:nim c -d=release --cc:gcc --embedsrc=on --hints=on --app=console --cpu=amd64 --out=nimcrypt nimcrypt.nim
- 克隆所需版本的 Obfuscator-LLVM 并构建它
- 编译完成后,备份现有版本的 clang 并将新的 Obfuscator-LLVM 版本的 clang 移动到 /usr/bin/
- 安装 wclang 并将它的二进制文件添加到您的 PATH
- 备份现有的 clang 库文件,将新构建的 Obfuscator-LLVM 库包括复制到 /usr/lib/clang/OLD_VERSION/
此外,您必须在文件中添加以下行以将nim.cfgnim 指向您的 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 会给你一个错误。
已知错误
- 如ShitSecure所述,如果 mimikatz 的发布版本是通过 PE 加载程序加载的,它会由于某种未知原因不接受命令。使用从源代码编译的 mimikatz 版本可修复此问题。