JerenzeLevi/levi-the-cracker
GitHub: JerenzeLevi/levi-the-cracker
一个 CTF/安全研究用的密码识别与自动破解工具,能识别并自动破解 XOR、经典密码和常见编码,支持递归多层解码和英文明文评分。
Stars: 0 | Forks: 0
# LeviTheCracker
一个用于 CTF 和安全研究的密码识别与自动破解工具——
这个项目堪称“dcode/CyberChef 的替代品,但它会真正帮你尝试破解 XOR”。
提供 CLI 和本地 Web UI,旨在解决促成本项目诞生的那个特定痛点:密钥
未知的 XOR 密文。
## 工作原理
1. **识别** (`core/identifier.py`) — 对原始输入进行结构化启发式分析(字符集、熵、填充),推测它可能是什么:
hex, base16/32/58/64/85, binary, morse,或者“偏向字节,可能是 XOR”。
2. **破解** (`core/xor_cracker.py`, `core/classical.py`,
`core/encodings_.py`) — 无论识别器的首要推测是什么,每个破解器都会运行(在短样本上误判很常见),并且结果会被汇总并排名:
- **XOR**: 单字节暴力破解;针对未知密钥的重复密钥 XOR,通过对每个候选密钥长度进行逐列频率分析,并通过全文爬山(hill-climb)过程进行优化;针对已知/疑似明文片段进行 crib dragging。
- **Classical**: Caesar/ROT(暴力尝试所有 26 种偏移),Vigenère(基于 IC 的密钥长度检测 + 逐列破解 + 优化),Atbash,ROT47,Rail Fence(暴力尝试栅栏数量)。
- **Encodings**: base16/32/58/64/85, hex, binary, Morse。
3. **评分** (`core/scorer.py`) — 没有内置语料库,因此明文的“英文符合度”是根据字母/空格比例、卡方字母频率(按样本标准化)、符号密度惩罚、整词词典命中情况,以及 flag 模式(`word{...}`)奖励来评分的。
4. **递归** (`core/solver.py`) — 如果得分最高的解码结果看起来还不是 flag,但很可能已经解码出了*某些内容*,则将其重新输入并继续处理(例如 XOR → base64 → Caesar → flag),直到达到深度限制。
## 环境要求
```
flask
flask-cors
```
除此之外仅需标准库(本项目不依赖 numpy/opencv)。
## 用法
### CLI
```
python cli.py "gur synt vf synt{lbh sbhaq vg}"
python cli.py --file ciphertext.txt --crib "flag{"
python cli.py "..." --identify-only
python cli.py "..." --json result.json
```
### Web UI
```
python api/app.py
```
然后打开 `http://127.0.0.1:5000`。粘贴密文,点击 **Identify** 查看结构化推测,或点击 **Crack** 运行完整的流水线。提供一个已知/疑似的明文片段(例如 `flag{`)以启用 XOR crib dragging。
### 作为库使用
```
from core import solver
result = solver.solve("VGhlIHF1aWNrIGZveCBzYXlzIGZsYWd7YmFzZTY0X2NoYWlufQ==")
print(result["best"]["plaintext_text"])
```
## 已知局限
- **带有短密文和长密钥的未知密钥重复 XOR** 通常是频率分析中的难点(每个密钥字节的样本太少)——真正的工具也会遇到同样的瓶颈。这正是 crib dragging(`--crib` 或 UI 中的 crib 字段)的用武之地:提供一个疑似的明文片段,它会直接恢复密钥字节,然后你可以将它们组合成一个完整的密钥。
- **在短密文上进行 Vigenère/Caesar 自动破解** 时,可能会将一个存在偏差的解码结果排在真实结果之上——启发式的英文符合度评分器并不是一个完整的语言模型。系统始终会展示前 5-8 个候选结果(而不仅仅是最佳推测),以便人类通常能找出正确的一个,因为 `flag{...}` 中的标点符号和大括号在替换密码中会保持不变地保留下来,即使在部分错误的解码中也能在视觉上被识别出来。
- 没有内置 quadgram/词典语料库——评分是启发式的(频率 + 词密度 + flag 模式),而不是训练好的语言模型。
- 替换密码(非 Vigenère 单字母替换)、AES/DES/RSA、JWT,以及超出内置递归解包范围的 CyberChef 风格“配方链接(recipe chaining)”均未实现。
## 项目布局
```
LeviTheCracker/
├── cli.py
├── core/
│ ├── identifier.py # structural detection
│ ├── scorer.py # English-plaintext heuristic scoring
│ ├── xor_cracker.py # single-byte / repeating-key XOR / crib dragging
│ ├── classical.py # Caesar, Vigenere, Atbash, ROT47, Rail Fence
│ ├── encodings_.py # base16/32/58/64/85, hex, binary, morse
│ └── solver.py # identify -> crack -> score -> recurse
├── api/
│ └── app.py # Flask API + static frontend server
├── web/
│ └── index.html # single-page UI
└── requirements.txt
```
## 免责声明
专为 CTF 比赛、授权的安全研究和密码学教育而构建。
标签:Flask, Python, TCP SYN 扫描, Web UI, 安全研究工具, 密码学, 手动系统调用, 无后门, 逆向工具