|
一、工具介绍
Nimcrypt2 是另一个旨在绕过 AV/EDR 的 PE 打包程序/加载程序。这是对最初的 Nimcrypt 项目的改进,改进后可直接使用系统调用和加载常规 PE 文件以及原始 shellcode 的能力。
在继续之前,必须感谢那些完成了这个项目所依赖的大部分工作和研究的人。首先,必须感谢 @byt3bl33d3r 的 Offensive Nim repo,以及 @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]
- 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
复制代码
二、工具特性
- NtQueueApcThread 执行带有 PPID 欺骗和第 3 方 DLL 阻塞的 Shellcode
- NimlineWhispers2 和 GetSyscallStub 用于系统调用
- 系统调用名称随机化
- 能够加载 .NET 和常规 PE 文件
- 具有动态密钥生成的 AES 加密
- LLVM 混淆器兼容性
- 字符串加密
- 沙盒规避
在以下操作系统中测试通过:
- Windows 11 (10.0.22000)
- Windows 10 21H2 (10.0.19044)
- Windows 10 21H1 (10.0.19043)
- Windows 10 20H2 (10.0.19042)
- Windows 10 19H2 (10.0.18363)
- Windows Server 2019 (10.0.17763)
三、关于 Nim
Nim 是一个新型的静态类型、命令式编程语言,支持过程式、函数式、面向对象和泛型编程风格而保持简单和高效。Nim 从 Lisp 继承来的一个特殊特性 -- 抽象语法树 (AST) 作为语言规范的一部分,可以用作创建领域特定语言的强大宏系统。
Nim 是一个编译型的具有垃圾收集的系统编程语言,有着极其卓越的生产/性能比。Nim的设计集中在三个 E 上:即效率 (efficiency)、表达能力 (expressiveness) 和优雅 (elegance)。
注:恶意软件作者开始越来越多地使用相对来说比较冷门的编程语言,如 Go、Rust、Nim 和 DLang,以创建新工具并阻碍研究人员进行分析。这背后的原因则是恶意软件作者希望借助冷门的编程语言来规避安全社区的分析检测,以及解决开发过程中的部分痛点。
四、编译和安装
编译 Nimcrypt2 需要在安装 Nim 的系统上进行,在安装 Nim 之前,需要确保以下包已经安装好了:
如果没安装通过以下命令安装:
- sudo apt install gcc mingw-w64 xz-utils git
复制代码
我的环境已安装好 gcc 和 git,所以只安装剩下两个,如下所示:
完成后,接下来是安装 Nim,不过我更喜欢使用 choosenim,choosenim 是 Nim 的安装程序,允许你在 Nim 版本之间轻松切换,无论是最新的稳定版本还是最新的开发版本:
- curl https://nim-lang.org/choosenim/init.sh -sSf | sh
- echo "export PATH=$HOME/.nimble/bin:$PATH" >> ~/.bashrc
- export PATH=$HOME/.nimble/bin:$PATH
复制代码
脚本输出提示将可执行文件添加到 PATH 环境变量中,由于我默认使用的是 zsh shell,所以在上图中导入到了 ~/.zshrc
Nimcrypt2 需要依赖一些包,这些包可通过 Nimble 来安装
- winim
- nimcrypto
- docopt
- ptr_math
- strenc
- 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
复制代码
在本地运行测试:
对 Mimikatz.exe 进行处理:
如果没指定 -o 参数,默认生成 a.exe
五、测试效果
下面对其进行测试,数字,开启所有检测引擎:
miss
火绒 miss:
六、使用 LLVM
上面测试中并没使用到 -l 选项,也就是利用 Obfuscator-LLVM 来对其进行混淆,在工具文档对其说明中,作者谈到发现这有点痛苦,但你必须得坚持做下去。
要使用 Obfuscator-LLVM,系统必须安装 wclang,跟着作者步子走:
- 克隆所需版本的 Obfuscator-LLVM 并构建它
- 编译完成后,备份现有版本的 clang 并将新的 Obfuscator-LLVM 版本的 clang 移动到 /usr/bin/
- 安装 wclang 并将它的二进制文件添加到 PATH 环境变量中
- 备份现有的 clang 库文件,将新构建的 Obfuscator-LLVM 库 (lib 文件夹内的所有文件) 复制到 /usr/lib/clang/OLD_VERSION/
除此之外,还必须将以下添加到 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 会给你一个错误。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|