entropixlabs/ctf-lens
GitHub: entropixlabs/ctf-lens
一款零依赖的 CTF 静态分析工具,能够自动从各类挑战文件中检测 flag、解码编码、分析隐写并提取嵌入文件。
Stars: 1 | Forks: 0
# ctf-lens
一款用于 CTF 挑战的静态分析工具。输入一个文件——它会寻找 flag,解码编码,提取嵌入的文件,并检测隐写术。除了可选的 Python 包外,不需要任何外部二进制文件。
```
python ctf_lens.py challenge.png --deep --xor
```
## 功能
| 类别 | 功能描述 |
|---|---|
| **Flag 检测** | 正则表达式匹配 25 种以上的 CTF 格式:`flag{}`, `HTB{}`, `picoCTF{}`, `THM{}`, `DUCTF{}` 等 |
| **编码** | Base64、hex、ROT13、URL 编码、HTML 实体、二进制、摩斯密码 |
| **隐写术** | LSB 提取(PNG/BMP,按通道)、位平面分析、空白字符隐写、JPEG DCT 注释扫描 |
| **文件提取** | 在任意文件中通过魔法字节(Magic byte)搜索嵌入的 JPEG、PNG、ZIP、GZIP、ELF、PDF |
| **压缩包** | ZIP 内容列表、加密条目检测、嵌套 ZIP 检测、注释提取 |
| **音频** | WAV/MP3/FLAC 元数据扫描、ID3v2 标签解析、LSB 音频分析 |
| **图像** | EXIF 元数据、PNG 数据块检查(tEXt、zTXt、iTXt)、JPEG APP/COM 段扫描 |
| **可执行文件** | ELF 节头和字符串、PE 导入表、可疑字符串提取 |
| **网络** | PCAP 魔法字节检测、基本帧检查 |
| **熵** | 带有上下文感知解释的单文件 Shannon 熵 |
| **XOR 暴力破解** | 带有英文文本评分的单字节 XOR 0x01–0xFF(`--xor` 标志) |
| **Caesar / Atbash / Vigenère** | 带有词频评分的密码检测 |
## 环境要求
Python 3.10+。没有强制性依赖——该工具无需任何额外组件即可运行。
可选(以获得更好的输出效果):
```
pip install rich pillow numpy
```
- `rich` — 带有面板和表格的彩色终端输出
- `pillow` + `numpy` — 从图像中提取 LSB 隐写
## 使用方法
```
# 基础扫描
python ctf_lens.py challenge.png
# 深度扫描:更广泛的字符串覆盖 + 更多编码检查
python ctf_lens.py challenge.wav --deep
# 深度扫描 + XOR brute-force
python ctf_lens.py unknown.bin --deep --xor
```
### 选项
| 标志 | 描述 |
|---|---|
| `--deep` | 提高 ROT13 和额外编码的扫描限制(速度较慢) |
| `--xor` | 暴力破解单字节 XOR 密钥 0x01–0xFF |
| `--version` | 打印版本并退出 |
| `-h` / `--help` | 打印帮助信息 |
## 支持的文件类型
PNG · JPEG · BMP · GIF · WAV · MP3 · FLAC · ZIP · GZIP · BZ2 · ELF · PE (EXE/DLL) · PDF · PCAP · 纯文本
未知文件类型将回退到通用分析(字符串、熵、提取、编码)。
## 示例输出
```
─────────────────────────────────── ctf-lens v0.3.0 ───────────────────────────────────
File challenge.png
Type PNG (image)
Size 325,983 bytes (318.3 KB)
Entropy 7.986 / 8.0
MD5 9b2a3884547d0fc65418243cba308373
╭──────────────────────────────────────────────────╮
│ 🔴 Critical: 3 🟡 Medium: 0 ⚪ Info: 4 │
╰──────────────────────────────────────────────────╯
🔴 🚩 Flag found!
flag{example_flag_hidden_in_lsb}
Source: LSB extraction, channel R
🔴 ⚠️ LSB stego suspected — channel R
LSB entropy: 0.030 (normal ≈1.0). Bits are non-random.
🔴 ⚠️ LSB stego suspected — channel G
LSB entropy: 0.028
```
## 示例
`examples/` 文件夹包含六个演示不同隐藏技术的文件。对它们运行该工具,看看它能找到什么:
```
python ctf_lens.py examples/example_text.txt
python ctf_lens.py examples/example_base64.txt
python ctf_lens.py examples/example_hex.txt
python ctf_lens.py examples/example_archive.zip
python ctf_lens.py examples/example_lsb.png --deep
python ctf_lens.py examples/example_polyglot.png
```
| 文件 | 使用的技术 |
|---|---|
| `example_text.txt` | 明文 flag |
| `example_base64.txt` | Base64 编码的 flag |
| `example_hex.txt` | hex 编码的 flag |
| `example_archive.zip` | 嵌套 ZIP 条目中的 flag |
| `example_lsb.png` | LSB 隐写,通道 R |
| `example_polyglot.png` | 附加在 PNG EOF 标记之后的 flag |
## Windows 注意事项
cp1251 编码的 PowerShell 终端在通过管道输出时(例如使用 `Tee-Object`)可能会产生 `UnicodeEncodeError`。在运行前请设置 UTF-8 模式:
```
$env:PYTHONUTF8 = "1"
python ctf_lens.py challenge.png
```
或者直接在 Windows Terminal 中运行,不进行重定向。
## 局限性
- 仅支持单字节 XOR。多字节密钥需要手动处理。
- LSB 提取按 `R→G→B` 顺序、每个像素从 MSB 开始读取位。使用不同位顺序的工具(例如某些在线隐写网站)将产生无法读取的输出——在这种情况下请使用 `zsteg`。
- 可以检测到加密的压缩包,但无法进行破解。
- 没有递归解压压缩包的功能。
## 许可证
MIT
标签:Python, 云安全监控, 文件分析, 无后门, 逆向工具, 隐写术, 静态分析