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, 云安全监控, 文件分析, 无后门, 逆向工具, 隐写术, 静态分析