S3cur3Th1sSh1t/NimSyscallPacker
GitHub: S3cur3Th1sSh1t/NimSyscallPacker
一个已弃用的红队 payload 打包工具,可将 C#、PE 或 Shellcode 加密封装为 Nim 二进制文件,提供丰富的注入与规避技术。
Stars: 200 | Forks: 33
# NimSyscallPacker / Loader
该工具在 [x33fcon](https://x33fcon.com/#!s/FabianMosch.md) 的一次演讲后公开。这是我在 2021 - 2024 年间的私人核心编码项目,目前已被视为弃用且不再维护。不要指望我会在这里修复 Bug 或更新功能。相反,[RustPack](https://msecops.de/products) 现在作为商业受控版本,提供给经过审查的 Red Teams 和 Pentesters 进行维护,它不仅功能更丰富,而且在 OPSec 上也更加安全。
这个 Packer 可用于将任何 C# Assembly、PE 文件或 Shellcode 打包进一个 Nim 二进制文件。它会加密目标 payload,根据给定的参数构建相应的 Nim 源代码,并将其编译为 Nim 二进制文件。
### 设置说明
如果你喜欢看视频,可以在这里找到:
[https://youtu.be/0PwIn3Nxmgo](https://youtu.be/0PwIn3Nxmgo)
#### Windows
必须安装 Git,Nim/Nimble 才能正常工作。
已使用 **Nim 2.2.10** 以及从 Nim Windows 下载页面链接的 **MinGW-w64 GCC 11.1.0** 包进行过测试。较新的 Nim 版本在 Windows 上默认使用较高的 PE 映像基址,这会破坏 `-static` 链接,导致 `relocation truncated to fit: R_X86_64_32S against .bss` 错误;Packer 现在会强制使用 `-Wl,--image-base=0x10000` 以保持静态构建正常工作,因此任何 MinGW-w64 11.x 版本应该都没问题。此处仅支持 **x64** —— x86/`--x86`/`--wow64` 不再维护。
1. 下载 Nim 和 MinGW (x86_64):
- [`nim-2.2.10_x64.zip`](https://nim-lang.org/download/nim-2.2.10_x64.zip)
- [`mingw64.7z`](https://nim-lang.org/download/mingw64.7z)(从 Nim Windows 安装页面链接)
2. 使用 **7-Zip** 解压 Nim(不要使用 Windows 内置的 `Expand-Archive` —— 因为 `lib\system\` 目录的大小写冲突,它会静默丢弃 `lib\system.nim`)。Nim 的 zip 包中自带了 `bin\7zG.exe`,你可以用它来解压 MinGW。
3. 将 `
\bin` 和 `\bin` 添加到你的 `%PATH%` 中。注销/登录(或重启你的 shell)以使更改生效。
4. 安装 nimble 依赖:
nimble install nimcrypto@0.6.0 docopt ptr_math winim https://github.com/S3cur3Th1sSh1t/nim-strenc/
已知可正常工作的版本(截至 Nim 2.2.10):`nimcrypto 0.6.0`、`docopt 0.7.1`、`ptr_math 0.3.0`、`winim 3.9.4`、`nim-strenc`(HEAD —— 该仓库没有打标签的发布版本)。
5. 禁用 Windows Defender 样本提交(否则 Packer 拒绝运行):
Set-MpPreference -SubmitSamplesConsent 2
6. 编译 Packer:
nim c NimSyscallLoader.nim
如果你想在 Windows 上使用 LLVM 混淆器,请使用 [denim](https://github.com/S3cur3Th1sSh1t/denim) 中包含的修改版。通过 `denim\denim.exe setup` 进行安装。
#### Linux
例如在 Kali / Debian 上。Packer 历史上要求使用 `nim 1.6.8` + `mingw-64 8.0.0-1`;由于现在内置了静态链接的 `--image-base=0x10000` 变通方案,较新的工具链应该也能工作。Windows 构建是经过积极测试的版本 —— Linux 仅尽最大努力支持。
```
apt-get install nim mingw-w64
nimble install nimcrypto@0.6.0 docopt ptr_math winim https://github.com/S3cur3Th1sSh1t/nim-strenc/
```
如果 `--hellsgate` 在较新的 mingw-w64 上汇编失败,请降级至 `mingw-64=8.0.0-1`。
通过 `pip3 install donut-shellcode` 安装 donut。`denim` 无法在 Unix 上使用,因此此处无法通过 LLVM 进行混淆。Callobfuscator 同理。
通过 `nim c -d:noRES NimSyscallLoader.nim` 编译 Packer。准备就绪。如果不使用 -d:noRES,可能会遇到以下错误:
```
/username/.nimble/pkgs/winim-3.7.1/winim/lib/winim64.res:(.rsrc+0x48): dangerous relocation: collect2: fatal error: ld terminated with signal 11 [Speicherzugriffsfehler]
compilation terminated.
```
#### Docker 设置
需要构建一次(第一次会花费一些时间,随后的构建将被缓存)。
`sudo docker build . -t nimsyscallloader`
然后使用以下命令运行 Packer:
`sudo docker run -v $(pwd):/shared nimsyscallloader --output=/shared/packed.exe`
其中 `$(pwd)` 是宿主系统上与容器共享的目录,即存放需要加密的文件以及输出文件保存位置的目录。
#### 第三方依赖
如果你想通过 LimeLighter 使用代码签名证书,你还需要安装以下内容并将其添加到你的 %PATH% 中:
openssl - (对于 Windows) 例如可以从[这里](https://slproweb.com/products/Win32OpenSSL.html)获取
osslsigncode - 例如可以从[这里](https://github.com/mtrojnar/osslsigncode/releases/tag/2.3)获取
### 使用说明
如果你喜欢看视频,可以在这里找到:
[https://youtu.be/UHaIgdzqHDA](https://youtu.be/UHaIgdzqHDA)
应大家要求,我还为一些功能添加了简短的视频演示:
**Caro-Kann:**
https://youtu.be/etAFZrIyb44
**ThreadlessInject 功能:**
https://youtu.be/eRS-4AywrHI
**Module Stomping 功能:**
https://youtu.be/l-TmqqQ49UI
**shellcodeURL 功能:**
https://youtu.be/OYxcL4D7K0c
**stegoFile 功能:**
https://youtu.be/Vr58_R4rYDA
**shellcodeFile 功能:**
https://youtu.be/Oj55uilxEF4
**Ruy Lopez 用于本地进程**
https://youtu.be/8fBkRo1zlIM
**Shellcode 输出格式**
https://youtu.be/ZTiZA2fg3WM
**Assembly 输出功能**
https://youtu.be/TDEJ-U18UIk
**此外,我发布了一个公开视频,展示如何将 ThreadlessInject 技术自定义应用于默认进程之外的其他进程:**
https://youtu.be/BYuAUYQcI-E
```
NimSyscall_Loader v 2.2
Usage:
NimSyscall_Loader [--file=file_to_encrypt --key= --keyfile= --dnsKey --dnsdomain= --environmentalKey= --output=