HackingPain/steganography-tool
GitHub: HackingPain/steganography-tool
一款安全的PNG图像隐写工具,支持AES-256加密和HMAC完整性校验,提供LSB像素嵌入与元数据嵌入两种方式,同时具备GUI和CLI界面。
Stars: 0 | Forks: 0
# 隐写术工具
一个安全的图像隐写术工具,用于在 PNG 图像中嵌入和提取加密 payload。包括 GUI 和命令行界面。
## 功能特性
- **AES-256-CBC 加密**,使用 PBKDF2-HMAC-SHA256 密钥派生(60万次迭代)
- **HMAC-SHA256 完整性检查**,可检测错误密码和被篡改的数据
- 每次加密使用**随机盐和 IV**,因此没有两次加密会产生相同的输出
- 密钥材料使用后进行**尽力清除 (Best-effort memory wiping)**
- **两种嵌入方法:**
- **Pixel (LSB)** - 将数据隐藏在像素颜色通道的最低有效位中
- **Metadata** - 将数据存储在 PNG 文本块中
- **文件类型检测** - 在提取时建议正确的扩展名
- **容量指示器** - 在嵌入前显示 payload 大小与可用空间的对比
### GUI 功能
- 图像预览,显示尺寸和格式
- 深色/浅色主题切换
- 密码确认对话框,带显示/隐藏切换
- 线程化操作,在嵌入/提取期间保持 GUI 响应
- 通过 `tkinterdnd2` 实现可选的拖放功能
### CLI 功能
- 交互式密码提示(进程列表中不显示密码)
- `--password-stdin` 用于脚本编写
- `--verbose` 标志用于调试日志记录
- 正确的退出代码(0 成功,1 错误,2 用法错误)
## 安装
```
pip install -e .
```
用于开发(包含 pytest):
```
pip install -e ".[dev]"
```
## 使用方法
### GUI
```
stego-tool
```
或者:
```
python -m stego.gui.app
```
### CLI
```
# 嵌入(交互式密码提示)
stego-cli embed -i cover.png -p secret.txt -o output.png
# 使用 stdin 密码嵌入(用于脚本)
echo "MyPassword123!" | stego-cli embed -i cover.png -p secret.txt -o output.png --password-stdin
# 提取
stego-cli extract -i output.png -o recovered.txt
# 使用 metadata 方法代替 pixel LSB
stego-cli embed -i cover.png -p secret.txt -o output.png -m metadata
# 详细日志
stego-cli -v embed -i cover.png -p secret.txt -o output.png
# 版本
stego-cli --version
```
### 嵌入 Payload (GUI)
1. 选择一个 PNG 图像
2. 选择一个要嵌入的 payload 文件
3. 选择方法:Pixel (LSB) 或 Metadata
4. 输入并确认加密密码(至少 8 个字符)
5. 点击 **Embed Payload**。结果保存为 `_steg.png`
### 提取 Payload (GUI)
1. 选择一张包含隐藏 payload 的图像
2. 选择与嵌入时相同的方法
3. 输入解密密码
4. 点击 **Extract Payload**。保存对话框会自动检测文件类型
## 运行测试
```
pytest tests/ -v --cov=stego
```
## 项目结构
```
src/stego/
__init__.py Package version
__main__.py python -m stego entry point (launches CLI)
exceptions.py Custom exception hierarchy
crypto.py AES-256-CBC + PBKDF2 + HMAC wire format
lsb.py LSB pixel steganography engine (NumPy vectorized)
metadata.py PNG metadata embedding/extraction
capacity.py Image capacity calculation
filetype.py Magic-byte file type detection
cli.py argparse CLI interface
log.py Logging configuration
gui/
app.py Main application window
widgets.py File picker, preview, capacity bar, password dialog
theme.py Light/dark theming
tests/
test_crypto.py, test_lsb.py, test_metadata.py, test_integration.py
test_cli.py, test_filetype.py, test_capacity.py
legacy/
Zeroclick_coregraphics.py Original file (kept for reference)
```
## Wire 格式 (v1)
```
[4B magic "STG1"] [2B version=1] [16B salt] [16B IV]
[32B HMAC-SHA256] [4B ciphertext length] [N bytes ciphertext]
```
## 向后兼容性
v1 wire 格式故意与原始工具不兼容。原始协议存在严重的安全问题(硬编码盐、确定性 IV、无完整性检查)和错误(终止标记不匹配)。使用原始工具嵌入的图像无法使用 v1 提取。
## 许可证
MIT 许可证。详见 [LICENSE](LICENSE)。
## 作者
**Domenic Laurenzi**, DarkHorse Information Security
## 免责声明
本工具仅用于教育和道德用途。作者不对任何滥用行为负责。
标签:AES-256, DNS 反向解析, DNS 解析, GUI应用, HMAC完整性校验, LSB隐写, PBKDF2, PNG元数据, Python, Python安全工具, Steganography, 信息隐藏, 图像隐写, 安全存储, 安全规则引擎, 密码学, 手动系统调用, 操作系统检测, 数字载体, 数据加密, 数据渗漏, 文件嵌入, 无后门, 漏洞评估, 网络信息收集, 逆向工具, 隐写术, 隐私保护工具