JerenzeLevi/QRPheonix
GitHub: JerenzeLevi/QRPheonix
一个模块化的二维码取证与恢复框架,能够自动诊断并修复扭曲损坏的二维码图像,递归解包嵌套 payload 直至成功解码。
Stars: 1 | Forks: 0
# QRPhoenix
一个模块化的二维码取证与恢复框架,专为 CTF、OSINT 和数字取证挑战而设计。它不仅能解码二维码——它还能假设图像已被故意扭曲(如旋转、反转、模糊、二值化等),并自动搜索使其能够再次被解码所需的转换方法。
## 工作原理
1. **诊断**图像 (`core/analyzer.py`) —— 包括亮度、对比度、模糊度、反转可能性、旋转倾斜度、探测图形置信度。这些信号决定了优先尝试哪些修复方法。
2. **搜索**转换流水线 (`core/search.py`, `core/transforms.py`) —— 首先尝试单一修复(反转、旋转、二值化、CLAHE、降噪等),然后是小规模的多步骤组合。每次转换后都会尝试解码,一旦成功便立即停止。
3. **解码** (`core/decoders.py`) —— 使用 OpenCV 内置的 `QRCodeDetector`(始终可用);如果已安装 `pyzbar`,则会自动使用。
4. **解包 payload** (`core/payload.py`) —— 如果解码后的文本看起来像是 base64/base32/hex 而不是 flag,它会对其进行递归解码,包括从嵌入的 zip 压缩包中提取图像,并将其重新输入到搜索过程中(二维码 → base64 → zip → 图像 → 二维码 → flag)。
5. **报告** (`core/report.py`) —— 生成 JSON/Markdown 输出,包含成功的流水线、使用的解码器、尝试次数、耗时以及完整的解包路径。
## 环境要求
```
opencv-python
numpy
```
可选(自动检测,缺失时系统会自动降级处理):
```
pyzbar # extra decoder backend
```
## 使用方法
```
cd qr_framework
python qrsolver.py path/to/challenge.png
```
参数选项:
```
python qrsolver.py challenge.png --max-attempts 300 --time-budget 30
python qrsolver.py challenge.png --json out.json --md out.md
```
你可以将挑战图像放在任意位置——它不需要存放在此代码库中;只需传入任意有效的路径即可。
## 项目结构
```
QRPhoenix/
├── instruction.txt # original spec this framework was built from
└── qr_framework/
├── qrsolver.py # CLI entry point
├── core/
│ ├── analyzer.py # image diagnostics
│ ├── transforms.py # composable image transforms
│ ├── search.py # prioritized pipeline search + scoring
│ ├── decoders.py # OpenCV / pyzbar decoder backends
│ ├── payload.py # recursive payload unwrapping
│ └── report.py # JSON / Markdown reporting
├── examples/ # sample challenge images (gitignored)
└── reports/ # generated report output (gitignored)
```
## 当前适用范围
已实现:旋转/镜像/反转/对比度/二值化/形态学/降噪转换、基于诊断的优先级排序、OpenCV + pyzbar 解码、递归 base64/base32/hex/ROT13 及 zip 嵌入图像的解包、JSON/MD 报告。
尚未实现:GUI、隐写术(LSB/位平面)提取、ML 超分辨率/去模糊、打乱图块拼图求解、PDF/SVG/动态 GIF 输入处理、以及超出 base64/hex/ROT13 范围的密码暴力破解。如果你想扩展功能,可以按照相同的插件式模式进行开发(在 `transforms.py` 中添加函数,或者在 `core/` 下添加新模块)。
## 免责声明
本工具专为 CTF 竞赛、授权的安全研究以及数字取证教育而构建。并非所有被故意破坏的二维码都能恢复——如果超出了纠错容量或关键结构被移除,仅靠自动化是无法将其还原的。
标签:ESC4, OpenCV, OSINT, Python, 二维码, 图像处理, 数字取证, 无后门, 自动化脚本, 逆向工具