xchwarze/magic-extractor
GitHub: xchwarze/magic-extractor
一款 Windows 通用文件提取工具,通过多探测器自动识别 80 余种文件格式并路由至对应内置提取器完成解压或解包。
Stars: 22 | Forks: 3
# Magic Extractor
cd magic-extractor
pip install -r cli/requirements.txt
```
## 用法
Magic Extractor 使用子命令:
```
python cli/main.py extract [output_dir] [options] # detect and extract
python cli/main.py identify # report type + candidate handlers
python cli/main.py list # list archive contents
python cli/main.py carve [output_dir] [options] # carve embedded archives (binwalk offsets)
```
不带子命令的纯路径默认为 `extract`(向后兼容):
```
python cli/main.py [options]
```
`extract` 选项:
- `--password `:用于加密归档文件的密码。
- `-r`, `--recursive`:提取在输出结果中发现的归档文件(受 `--max-depth` 限制,默认为 5)。
- `-b`, `--bruteforce`:尝试每个检测到的处理程序,而不是在第一个处停止。
- `--open-output-folder `:完成后打开输出文件夹。
- `--check-free-space `:如果输出卷可能空间不足,则发出警告。
- `--check-unicode `:针对非 ASCII 的提取文件名发出警告。
- `--fix-file-extensions `:为无扩展名的提取文件提供基于内容的扩展名(绝不覆盖现有扩展名)。
- `--create-log-files `:将每次运行的日志写入输出目录。
(省略时,每个选项都会默认使用其 `config.ini` 中的值;结合
`--update-defaults` 可将给定的值持久化保存 —— 例如,`--open-output-folder false
--update-defaults` 会关闭之前保存的默认设置。)
- `--no-fast-check`:读取整个文件进行检测,而不是仅读取前 2048 个字节。
- `--update-defaults`:将给定的设置作为默认值持久化保存在 `config.ini` 中。
`carve` 选项:`--list`(打印 binwalk 片段表),`--fragment N`(按索引提取单个
片段),`--raw`(提取所有片段,而不仅仅是处理程序已知的片段)。
## 示例
**提取归档文件** —— 你不需要知道它的类型;系统会自动检测它:
```
magic-extractor extract mystery.bin
# 提取到文件旁边的 mystery_extracted/ 目录中
```
**识别** 文件而不修改它 —— 显示每个探测器看到的内容以及哪个
处理程序将会运行:
```
magic-extractor identify setup.exe
File: setup.exe
[DIE] detect inno setup installer
Candidate handlers (in order):
- FormatInnoSetupHandler
```
**列出** 归档文件的内容(不进行提取):
```
magic-extractor list backup.7z
```
**递归** —— 提取在输出结果中发现的归档文件(例如 .tar.gz,或者
包含更多归档文件的安装程序),最多到 `--max-depth` 层:
```
magic-extractor extract app-1.0.tar.gz --recursive
```
**暴力破解** —— 当检测不确定时,尝试每个匹配的处理程序,而
不是在第一个处停止:
```
magic-extractor extract weird-archive.dat --bruteforce
```
**提取** —— 提取嵌入在较大文件中某个偏移量处的归档文件
(固件映像的典型操作)。首先检查,然后进行提取:
```
magic-extractor carve router-firmware.bin --list
IDX OFFSET SIZE NAME DESCRIPTION
0 0x00000000 793,720 pe Windows PE binary
1 0x000c1c78 2,495,983 lzma LZMA compressed data
magic-extractor carve router-firmware.bin # carve + extract the known blobs
magic-extractor carve router-firmware.bin --fragment 1 # carve only fragment #1
```
## GUI
可选的 tkinter 前端(位于 `gui/` 中)封装了 CLI —— 这是一个 Universal-Extractor 风格的
窗口,支持拖放、批量队列、运行历史记录和首选项对话框。它
通过外部调用同一个 `main.py` 来执行,因此检测和提取的行为完全一致。
```
python gui/main.py # launch the window
python gui/main.py [outdir] # prefill the source (and destination)
python gui/main.py /scan # prefill and start in identify mode
```
拖放功能需要可选的 `tkinterdnd2` 包(`pip install -r gui/requirements.txt`);
如果没有它,窗口仍然可以工作,只是不支持拖放。它还可以从其首选项
对话框中注册一个资源管理器右键菜单项。
## 构建(Windows)
```
cd cli
pyinstaller --onefile main.py --name magic-extractor --collect-data puremagic
```
然后将 `bin/`、`data/` 和 `config.ini` 复制到 `dist/magic-extractor.exe` 旁边。
CI 会自动执行此操作 —— 参见 `.github/workflows/release.yml`。
## 许可证
MIT —— 参见 `LICENSE.txt`。注意:`cli/bin/` 下内置的第三方提取器/探测器
二进制文件保留了它们自己的许可证(部分为专有免费软件)
并且不受 MIT 许可涵盖;在分发前请验证其再分发条款。
## 作者
- 主要开发者:DSR! —— xchwarze@gmail.com
- 感谢所有贡献者。
标签:数字取证, 数据解析, 文件提取, 文件系统, 格式识别, 漏洞挖掘, 自动化脚本, 逆向工具