Nimcrypt2

Nimcrypt2 是一个旨在绕过 AV/EDR 的 PE 打包程序/加载程序。这是对我最初的Nimcrypt项目的改进,主要改进是使用直接系统调用和加载常规 PE 文件以及原始 shellcode 的能力。
在继续之前,我必须感谢那些完成了这个项目所依赖的大部分工作和研究的人。
首先,我必须感谢@byt3bl33d3rOffensive Nim repo@ShitSecure他公开发布的所有代码片段。这就是创建此工具的原始版本的基础,当前版本也不例外。特别是,该工具中使用的新 PE 加载功能只是 ShitSecure 最近发布的Nim-RunPE代码的一个实现。截至 22 年 3 月 14 日,此代码还使用他的GetSyscallStub代码进行动态系统调用使用。我强烈鼓励赞助他使用他自己的Nim PE Packer,这无疑是一个更好、更有特色的版本。
此外,我要感谢@ajpc500NimlineWhispers2项目,该工具用于直接系统调用。我怎么强调这个项目只是前面提到的那些公共工作的合并,所以所有的功劳都归于他们。

  1. ___
  2. .-' `'.
  3. / \
  4. | ;
  5. | | ___.--,
  6. _.._ |0) ~ (0) | _.---'`__.-( (_.
  7. __.--'`_.. '.__.\ '--. \_.-' ,.--'` `""`
  8. ( ,.--'` ',__ /./; ;, '.__.'` __
  9. _`) ) .---.__.' / | |\ \__..--"" ""'--.,_
  10. `---' .'.''-._.-'`_./ /\ '. \ _.-~~~````~~~-._`-.__.'
  11. | | .' _.-' | | \ \ '. `~---`
  12. \ \/ .' \ \ '. '-._)
  13. \/ / \ \ `=.__`~-. Nimcrypt v2
  14. jgs / /\ `) ) / / `"".`\
  15. , _.-'.'\ \ / / ( ( / / 3-in-1 C#, PE, & Raw Shellcode Loader
  16. `--~` ) ) .-'.' '.'. | (
  17. (/` ( (` ) ) '-;
  18. ` '-; (-'
  19. Nimcrypt v 2.0
  20. Usage:
  21. nimcrypt -f file_to_load -t csharp/raw/pe [-o <output>] [-p <process>] [-n] [-u] [-s] [-e] [-g] [-l] [-v]
  22. nimcrypt (-h | --help)
  23. Options:
  24. -h --help Show this screen.
  25. --version Show version.
  26. -f --file filename File to load
  27. -t --type filetype Type of file (csharp, raw, or pe)
  28. -p --process process Name of process for shellcode injection
  29. -o --output filename Filename for compiled exe
  30. -u --unhook Unhook ntdll.dll
  31. -v --verbose Enable verbose messages during execution
  32. -e --encrypt-strings Encrypt strings using the strenc module
  33. -g --get-syscallstub Use GetSyscallStub instead of NimlineWhispers2
  34. -l --llvm-obfuscator Use Obfuscator-LLVM to compile binary
  35. -n --no-randomization Disable syscall name randomization
  36. -s --no-sandbox Disable sandbox checks

参数(中文翻译)

  1. 选项:
  2. -h --help 显示此屏幕。
  3. --version 显示版本。
  4. -f --file 文件名 要加载的文件
  5. -t --type filetype 文件类型(csharpraw pe
  6. -p --process process 注入shellcode的进程名
  7. -o --output filename 已编译 exe 的文件名
  8. -u --unhook 解开 ntdll.dll
  9. -v --verbose 在执行期间启用详细消息
  10. -e --encrypt-strings 使用 strenc 模块加密字符串
  11. -g --get-syscallstub 使用 GetSyscallStub 代替 NimlineWhispers2
  12. -l --llvm-obfuscator 使用 Obfuscator-LLVM 编译二进制
  13. -n --no-randomization 禁用系统调用名称随机化
  14. -s --no-sandbox 禁用沙盒检查

特征

  • NtQueueApcThread 执行带有 PPID 欺骗和第 3 方 DLL 阻塞的 Shellcode
  • NimlineWhispers2 和 GetSyscallStub 用于系统调用
  • 系统调用名称随机化
  • 能够加载 .NET 和常规 PE 文件
  • 具有动态密钥生成的 AES 加密
  • LLVM 混淆器兼容性
  • 字符串加密
  • 沙盒规避

    安装/依赖

    Nimcrypt2 设计用于安装了 Nim 的 Linux 系统。在安装 Nim 之前,您必须确保通过包管理器安装了以下包:
    1. sudo apt install gcc mingw-w64 xz-utils git
    要安装 Nim,我更喜欢使用choosenim,如下所示:
    1. curl https://nim-lang.org/choosenim/init.sh -sSf | sh
    2. echo "export PATH=$HOME/.nimble/bin:$PATH" >> ~/.bashrc
    3. export PATH=$HOME/.nimble/bin:$PATH
    Nimcrypt2 还依赖于一些可以通过 Nimble 安装的包。这可以这样做:
    1. nimble install winim nimcrypto docopt ptr_math strenc
    现在安装了所有依赖项,Nimcrypt2 可以像这样编译:
    1. nim c -d=release --cc:gcc --embedsrc=on --hints=on --app=console --cpu=amd64 --out=nimcrypt nimcrypt.nim
    可选:要使用Obfuscator-LLVM标志,您必须将它与wclang一起安装在系统上。我发现这有点痛苦,但你应该能够坚持不懈地做到这一点。这是在我的 Kali Linux 系统上运行的快速分步:
  1. 克隆所需版本的 Obfuscator-LLVM 并构建它
  2. 编译完成后,备份现有版本的 clang 并将新的 Obfuscator-LLVM 版本的 clang 移动到 /usr/bin/
  3. 安装 wclang 并将它的二进制文件添加到您的 PATH
  4. 备份现有的 clang 库文件,将新构建的 Obfuscator-LLVM 库包括复制到 /usr/lib/clang/OLD_VERSION/

此外,您必须在文件中添加以下行以将nim.cfgnim 指向您的 wclang 二进制文件:

  1. 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 版本可修复此问题。