z0rhack/xcarver

GitHub: z0rhack/xcarver

一款结合文件系统感知恢复与原始雕刻的双引擎取证文件恢复工具,在文件系统部分损坏时仍能保留原始文件名完成高效恢复。

Stars: 0 | Forks: 0

# xCarver v4 **双引擎取证文件雕刻工具 — 感知文件系统的恢复 + 高性能原始雕刻** ## 为什么选择 xCarver? 大多数文件雕刻工具只做一件事:扫描原始字节以查找文件签名(Photorec、Foremost、Scalpel)。xCarver 同时执行两项操作并合并结果: | 功能 | Photorec | Foremost | Scalpel | **xCarver v4** | |---------|----------|----------|---------|----------------| | 原始雕刻 | 是 | 是 | 是 | **是** | | 感知文件系统的恢复(原始文件名) | 否 | 否 | 否 | **是** | | 熵分析(跳过加密区域) | 否 | 否 | 否 | **是** | | CTF 模式 + 熵热力图 | 否 | 否 | 否 | **是** | | 会话恢复 | 否 | 否 | 否 | **是** | | SHA256 交叉去重 FS↔Raw | 否 | 否 | 否 | **是** | | 递归归档提取 | 否 | 否 | 否 | **是** | | 结构验证器(不仅是魔数) | 部分 | 否 | 否 | **是** | | 外部 JSON 签名 | 否 | 配置文件 | 配置文件 | **是** | | 零强制依赖 | 是 | 是 | 是 | **是** | | 持久化 C 扫描器(单次自动机构建) | — | — | — | **是** | **核心区别**:当文件系统(FAT32、NTFS、ext4、HFS+...)部分完好时,xCarver 会利用其元数据恢复文件并保留原始名称、路径和时间戳 —— 而不仅仅是 `file_00001.jpg`。原始雕刻则填补了其他所有内容。 ## 支持的文件系统(感知 FS 模式) | 文件系统 | 已删除条目恢复 | 原始名称 | 时间戳 | |-----------|----------------------|----------------|-----------| | FAT12 / FAT16 / FAT32 | 是 | 是 | 是 | | exFAT | 是 | 是 | 是 | | NTFS | 是 (MFT + $LogFile + $UsnJrnl) | 是 | 是 | | ext2 / ext3 / ext4 | 是 | 是 | 是 | | HFS+ | 是 | 是 | 是 | | APFS | 是 | 是 | 是 | | F2FS | 是 | 是 | 是 | | Btrfs | 是 | 是 | 是 | | YAFFS2 | 是 | 是 | 是 | ## 支持的文件类型(119 种签名)
图像 (22) JPEG, PNG, GIF, BMP, TIFF, WebP, PSD, ICO, RAW 格式 (CR2, CR3, NEF, ARW, DNG), HEIC, AVIF, JXL
视频 (12) MP4, MOV, MKV, WebM, AVI, 3GP, FLV, WMV, MPEG-1/2, MPEG-TS
音频 (13) MP3, OGG, FLAC, WAV, AAC, M4A, WMA, AIFF, APE, Opus, DSD
文档 (18) PDF, DOC/DOCX, XLS/XLSX, PPT/PPTX, ODT/ODS/ODP, RTF, LaTeX, MOBI, EPUB, CHM, EML
归档 (13) ZIP, RAR4/5, 7Z, GZIP, BZIP2, XZ, ZSTD, LZ4, LZMA, TAR, CAB, ISO, DMG
数据库 (8) SQLite3, MySQL dump, PostgreSQL dump, MS Access MDB/ACCDB
可执行文件 (9) PE (Windows EXE/DLL), ELF (Linux/Unix), Mach-O (macOS), Java .class
加密 (7) PEM 证书, SSH 私钥/公钥, GPG 密钥环
电子邮件 (4) PST, OST, EML (RFC 2822)
取证 (4) dd/raw 镜像, EWF (EnCase), 内存转储
移动端 (6) APK (Android), IPA (iOS), DEX (Dalvik bytecode)
## 安装说明 ### 前置条件 - Python 3.8+ - GCC(可选,但强烈推荐,可带来 10-50 倍的性能提升) ### 快速入门 ``` git clone https://github.com/z0rhack/xcarver.git cd xcarver python3 carver.py --help ``` 如果 GCC 可用,C 扫描器会在首次运行时自动编译。无需 pip install。 ### 可选:EnCase E01 支持 ``` pip install pyewf ``` ### Kali Linux / Debian ``` # 即将通过 apt 提供 — 请参阅下方的打包部分 # 目前: git clone https://github.com/z0rhack/xcarver.git /opt/xcarver echo 'alias xcarver="python3 /opt/xcarver/carver.py"' >> ~/.zshrc ``` ## 用法 ### 列出可用设备 ``` sudo python3 carver.py --list-devices ``` ### 列出所有支持的文件类型 ``` python3 carver.py --list-types ``` ## 场景 ### 场景 1 — 从 USB 闪存盘恢复已删除文件 最常见的用例:有人删除了 USB 闪存盘上的文件并希望将其恢复。 ``` sudo python3 carver.py /dev/sdb --output ./usb_recovered/ ``` xCarver 将: 1. 检测文件系统(FAT32、exFAT、NTFS...) 2. 恢复已删除的条目并保留原始文件名和文件夹结构 3. 对未分配的空间进行原始雕刻,以查找 FS 解析器未找到的任何内容 4. 在两个引擎之间对结果进行去重 5. 生成 JSON 报告 输出结构: ``` usb_recovered/ ├── fs_recovered/ ← files with original names & paths │ ├── Documents/ │ │ └── rapport.pdf │ └── Photos/ │ └── vacances.jpg ├── raw/ ← files found by raw carving │ ├── jpeg/ │ ├── pdf/ │ └── ... └── carving_report.json ``` ### 场景 2 — 雕刻磁盘镜像(取证调查) ``` python3 carver.py disk_image.dd --output ./evidence/ --threads 8 ``` 仅针对特定文件类型: ``` python3 carver.py disk_image.dd --types jpeg,pdf,sqlite --output ./evidence/ ``` 针对完整类别: ``` python3 carver.py disk_image.dd --types document,image --output ./evidence/ ``` ### 场景 3 — 大容量驱动器,中断的会话(恢复) 对于超大容量驱动器(1TB+),雕刻可能需要数小时。如果中断,可以从上次中断的地方恢复: ``` # 首次运行 sudo python3 carver.py /dev/sda --output ./carve_sda/ --resume # 如果中断,相同命令将自动恢复 sudo python3 carver.py /dev/sda --output ./carve_sda/ --resume ``` ### 场景 4 — 跳过加密分区(BitLocker、VeraCrypt...) 加密区域会产生大量误报。跳过它们: ``` python3 carver.py disk.dd --entropy-skip --output ./carve/ ``` xCarver 计算每 512 字节块的 Shannon 熵。高于阈值(通常 >7.8 bits/byte)的块将被跳过,从而大幅减少加密或压缩数据上的误报。 ### 场景 5 — CTF 挑战 / 隐写分析 CTF 模式会生成熵热力图(HTML)并检测多态文件和附加数据: ``` python3 carver.py challenge.bin --ctf --output ./ctf_analysis/ ``` 输出包括: - `entropy_heatmap.html` — 整个镜像的可视化熵图 - `polyglots.json` — 检测到具有多个有效头的文件 - `overlays.json` — 挂载在有效文件页脚之后的数据 ### 场景 6 — 仅限 FS 恢复(快速,保留名称) 当您只需要感知文件系统的恢复而不需要原始雕刻时: ``` python3 carver.py /dev/sdc --fs-only --output ./quick_recovery/ ``` 由于仅解析文件系统元数据,因此速度会快得多。 ### 场景 7 — 仅原始雕刻(严重损坏的文件系统) 当文件系统被破坏且感知 FS 的恢复无济于事时: ``` python3 carver.py disk.img --raw-only --output ./raw_carved/ ``` ### 场景 8 — EnCase/E01 取证镜像 ``` # 需要:pip install pyewf python3 carver.py evidence.E01 --output ./case_output/ ``` ### 场景 9 — 递归归档提取 递归提取在 ZIP、GZIP、BZIP2 归档文件中找到的文件: ``` python3 carver.py image.dd --recursive --output ./deep_carve/ ``` 找到的归档文件会自动解压缩,并雕刻其中的内容。 ### 场景 10 — 自定义签名(使用您自己的类型进行扩展) 创建一个包含自定义签名的 JSON 文件: ``` [ { "name": "myformat", "ext": "mfmt", "header": "4d59464d54", "footer": "454e44", "max_size": 10485760, "min_size": 64, "category": "custom", "description": "My custom file format" } ] ``` ``` python3 carver.py image.dd --sig-dir ./my_sigs/ --output ./carve/ ``` ### 场景 11 — SSD / 高级格式化驱动器(4K 扇区) ``` python3 carver.py /dev/nvme0n1 --sector-align --sector-size 4096 --output ./ssd_carve/ ``` ### 场景 12 — RAM 转储 / 内存取证 ``` python3 carver.py memory.mem --raw-only --types executable,document,image --output ./mem_carve/ ``` ### 场景 13 — 限制每种文件类型的输出(分诊) 当您只需要每种类型的样本,而不需要成千上万个文件时: ``` python3 carver.py disk.dd --max-per-type 100 --output ./triage/ ``` ### 场景 14 — 无 GCC 可用(纯 Python 回退) ``` python3 carver.py image.dd --no-compile --output ./carve/ ``` 警告:纯 Python 模式比 C 扫描器慢 10-50 倍。 ## 性能 | 模式 | 典型速度 | |------|--------------| | C 扫描器 (GCC, 8 线程) | 800 MB/s – 2 GB/s (I/O 密集) | | C 扫描器 (GCC, 1 线程) | 300 MB/s – 600 MB/s | | 纯 Python 回退 | 20 MB/s – 60 MB/s | C 扫描器使用持久化的 Aho-Corasick 自动机:它在启动时构建一次,并在每个数据块中重复使用 —— 每次扫描的复杂度为 O(data),而不是 O(patterns × data)。 ## 架构 ``` carver.py Main orchestrator, CLI, report engine └── SourceReader Opens images, raw devices, E01, RAM dumps └── PersistentScanner Wraps C handle (xc_create/xc_scan/xc_free) └── Session Session persistence for --resume └── carve_fs() Phase 1: FS-aware recovery └── carve_raw() Phase 2: Raw carving (multithreaded) fs_parser.py Filesystem parsers (FAT/NTFS/ext4/HFS+/APFS/...) └── parse_filesystem() Detects FS type, recovers deleted entries └── reconstruct_file() Follows cluster chains to rebuild files signatures.py 119 file type definitions + structural validators └── SigDef (name, ext, header, footer, min_size, max_size, validator) └── get_signatures() Filter by type/category scanner.c High-performance C scanning engine └── xc_create() Build Aho-Corasick automaton (once) └── xc_scan() Multi-threaded scan (O(n) per chunk) └── xc_free() Release handle ``` **数据流:** ``` Source (device/image/E01) → FS-aware parser → deleted entries with original names → Raw carver → files by byte signature (C/multithreaded) → SHA256 dedup → merge, remove duplicates → Output → organized by type + JSON report ``` ## 选项参考 ``` positional: source Image file, raw device, or E01 output: -o, --output DIR Output directory (default: ./carved) filtering: -t, --types TYPES Comma-separated types or categories Examples: jpeg,pdf | image | document,archive Use --list-types for all available values modes: --fs-only FS-aware recovery only (no raw carving) --raw-only Raw carving only (no FS parsing) --ctf CTF mode: entropy heatmap + polyglot detection --recursive Extract files inside recovered archives performance: --threads N Number of threads (default: auto, max 6) --chunk-size MB Chunk size in MB (default: 64) --no-compile Force pure Python mode (no C compilation) advanced: --resume Resume a previous session --entropy-skip Skip high-entropy zones (encrypted/compressed) --sector-align Align offsets to sector boundaries --sector-size N Sector size for --sector-align (default: 512) --max-per-type N Max files per type, 0=unlimited (default: 0) --sig-dir DIR Directory of additional JSON signatures info: --list-devices List available storage devices --list-types List all supported file types and categories ``` ## 输出格式 ### 目录结构 ``` output/ ├── fs_recovered/ FS-aware results (original names & paths) │ └── ├── raw/ Raw carving results │ ├── jpeg/ │ ├── pdf/ │ ├── sqlite/ │ └── ... ├── recursive/ Files extracted from recovered archives └── carving_report.json Full statistics report ``` ### carving_report.json ``` { "source": "/dev/sdb", "size": 32010928128, "elapsed_s": 47.3, "speed_bps": 676869120, "fs": { "fs_type": "FAT32", "found": 142, "recovered": 138, "failed": 4 }, "raw": { "jpeg": 87, "pdf": 12, "sqlite": 3, "hits_raw": 1243, "invalid": 156, "too_small": 34, "dedup": 41 } } ``` ## 构建独立可执行文件 ### Linux ``` gcc -O3 -march=native -shared -fPIC -pthread -o scanner.so scanner.c pip install pyinstaller pyinstaller --onefile --add-binary "scanner.so:." --add-data "scanner.c:." carver.py # → dist/carver ``` ### Windows (MinGW) ``` gcc -O3 -shared -o scanner.dll scanner.c pip install pyinstaller pyinstaller --onefile --add-binary "scanner.dll;." carver.py # → dist/carver.exe ``` ### macOS ``` gcc -O3 -shared -fPIC -o scanner.dylib scanner.c pip install pyinstaller pyinstaller --onefile --add-binary "scanner.dylib:." carver.py # → dist/carver ``` ## 贡献 欢迎贡献。欢迎提交 Issue、建议新签名或提交 Pull 请求。 在向 `signatures.py` 添加签名时: - 提供 `header`(字节序列),如果适用,提供 `footer` - 设置切合实际的 `min_size` 和 `max_size` - 如果格式具有可验证的字段(CRC、尺寸、魔术常量),请添加结构化的 `validator` 函数 - 针对真实文件进行测试,而不仅仅是手工构造的文件 ## 法律声明 xCarver 旨在用于授权的取证调查、您自己设备上的数据恢复、安全研究和 CTF 竞赛。请勿在您不拥有或未获得明确授权分析的设备上使用它。作者对滥用不承担任何责任。 ## 许可证 MIT — 详见 [LICENSE](LICENSE)
标签:APFS, ext4, FAT32, HTTP工具, NTFS, RAW恢复, 二进制分析, 云安全运维, 云资产清单, 元数据恢复, 哈希去重, 域渗透, 归档解压, 数字取证, 数据恢复, 数据雕刻, 文件签名, 文件系统识别, 文件雕刻, 熵分析, 电子数据取证, 碎片整理, 磁盘分析, 网络安全审计, 自动化脚本, 逆向工具, 逆向工程