marez8505/ForensicHarvester
GitHub: marez8505/ForensicHarvester
一款基于纯 Python 的轻量级数字取证工具,提供文件雕刻、哈希校验、元数据提取与反取证检测的一站式命令行解决方案。
Stars: 0 | Forks: 0
# ForensicHarvester
```
███████╗ ██████╗ ██████╗ ███████╗███╗ ██╗███████╗██╗ ██████╗
██╔════╝██╔═══██╗██╔══██╗██╔════╝████╗ ██║██╔════╝██║██╔════╝
█████╗ ██║ ██║██████╔╝█████╗ ██╔██╗ ██║███████╗██║██║
██╔══╝ ██║ ██║██╔══██╗██╔══╝ ██║╚██╗██║╚════██║██║██║
██║ ╚██████╔╝██║ ██║███████╗██║ ╚████║███████║██║╚██████╗
╚═╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═══╝╚══════╝╚═╝ ╚═════╝
██╗ ██╗ █████╗ ██████╗ ██╗ ██╗███████╗███████╗████████╗███████╗██████╗
██║ ██║██╔══██╗██╔══██╗██║ ██║██╔════╝██╔════╝╚══██╔══╝██╔════╝██╔══██╗
███████║███████║██████╔╝██║ ██║█████╗ ███████╗ ██║ █████╗ ██████╔╝
██╔══██║██╔══██║██╔══██╗╚██╗ ██╔╝██╔══╝ ╚════██║ ██║ ██╔══╝ ██╔══██╗
██║ ██║██║ ██║██║ ██║ ╚████╔╝ ███████╗███████║ ██║ ███████╗██║ ██║
╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝ ╚═══╝ ╚══════╝╚══════╝ ╚═╝ ╚══════╝╚═╝ ╚═╝
```
**数字证据获取与文件雕刻工具**



一款专业的命令行数字取证工具,用于证据获取、文件雕刻、元数据提取和反取证检测。专为需要可靠、可脚本化工具包来分析数字证据的法医调查员、事件响应者和网络安全学生而构建,无需依赖商业软件。
## 功能特性
| 功能 | 描述 |
|---|---|
| **文件雕刻** | 扫描原始二进制数据(磁盘映像、取证转储)以查找文件签名(JPEG、PNG、PDF、ZIP、EXE、ELF、SQLite、MP3、MP4 等),从而恢复被删除或隐藏的文件 |
| **取证哈希** | 在单次流式处理中计算 MD5 和 SHA-256 —— 对大型磁盘映像具有内存安全性 —— 支持清单的保存/加载以进行证据保管链验证 |
| **元数据提取** | 从图像中提取 EXIF 数据(相机制造商/型号、GPS 坐标、拍摄时间戳),以及文件系统元数据(权限、所有者/组、inode、三个时间戳) |
| **反取证检测** | 通过比较声明的扩展名与魔术字节签名来检测文件扩展名伪造 —— 以高/中置信度标记伪装成图像的可执行文件 |
| **HTML 报告** | 生成具有专业暗色主题的 HTML 报告,包含摘要卡片、哈希清单、GPS 表格和不匹配警报 —— 适合直接纳入案件档案 |
| **CSV 报告** | 生成机器可读的 CSV 输出,以便由 SIEM 平台、电子表格或下游分析脚本进行整合 |
| **哈希验证** | 根据先前保存的清单验证目录,报告每个文件的状态(匹配 / 不匹配 / 缺失 / 新增) |
| **纯 Python 后备方案** | 所有核心功能在未安装 libmagic 的情况下也能正常工作;python-magic 是可选的增强组件 |
## 安装说明
### 前置条件
- Python 3.8 或更高版本
- pip
### 快速开始
```
# 克隆仓库
git clone https://github.com/yourusername/ForensicHarvester.git
cd ForensicHarvester
# 安装依赖项
pip install -r requirements.txt
# 可选:作为 package 安装以获取 CLI entry points
pip install -e .
```
### 可选:增强 MIME 检测
要通过 libmagic 获得更准确的文件类型检测:
```
# Ubuntu / Debian
sudo apt install libmagic1
pip install python-magic
# macOS (Homebrew)
brew install libmagic
pip install python-magic
```
## 用法
ForensicHarvester 提供了四个子命令:`scan`、`carve`、`hash` 和 `report`。
### 全面取证扫描
执行所有三个分析阶段(哈希计算、元数据提取、不匹配检测),并生成 HTML、CSV 和 JSON 报告。
```
python -m forensic_harvester scan \
--target ./evidence_dir \
--output ./case_001_report \
--investigator "J. Smith" \
--case-number "CASE-2026-001"
```
**示例输出:**
```
────────────────────────────────────────────────────────────
PHASE 1/3 — Hash Computation
────────────────────────────────────────────────────────────
Hashing [████████████████████████████████████████] 100.0%
✓ Hashed 42 file(s)
────────────────────────────────────────────────────────────
PHASE 2/3 — Metadata Extraction
────────────────────────────────────────────────────────────
Metadata [████████████████████████████████████████] 100.0%
✓ Extracted metadata from 42 file(s) (18 with EXIF, 3 with GPS)
────────────────────────────────────────────────────────────
PHASE 3/3 — Anti-Forensics Detection
────────────────────────────────────────────────────────────
Mismatch [████████████████████████████████████████] 100.0%
⚠ Found 2 mismatch(es) — 1 HIGH confidence
────────────────────────────────────────────────────────────
SCAN SUMMARY
────────────────────────────────────────────────────────────
Files Scanned 42
Total Size 128.4 MB
Hashes Computed 42
Mismatches Found 2
High-Risk Flags 1
Files with EXIF 18
Files with GPS 3
Output Directory ./case_001_report
```
### 文件雕刻
从原始磁盘映像或二进制数据源恢复嵌入或已删除的文件:
```
# 提取单个磁盘映像
python -m forensic_harvester carve \
--target ./disk_image.dd \
--output ./carved_files
# 提取目录中的所有文件(适用于查找文件中包含的文件)
python -m forensic_harvester carve \
--target ./suspect_drive \
--output ./carved_output
```
恢复的文件将被保存为 `carved_0001_offset12345.jpg` 等形式,并附带一个 `carved_manifest.csv`。
### 哈希计算
```
# 对目录中的所有文件计算 SHA-256 哈希,保存清单
python -m forensic_harvester hash \
--target ./evidence_dir \
--algorithm sha256 \
--output ./hashes
# 单次计算 MD5 和 SHA-256
python -m forensic_harvester hash \
--target ./evidence_dir \
--algorithm dual
# 根据先前保存的清单验证文件
python -m forensic_harvester hash \
--target ./evidence_dir \
--verify ./hashes/hash_manifest.json
```
**示例哈希输出:**
```
✓ 2.3 KB e3b0c44298fc1c14… documents/contract.pdf
✓ 84.1 KB a9993e364706816a… images/scene_photo.jpg
✗ 0B ERROR locked_file.bin
```
### 报告生成
无需重新扫描,直接从先前保存的扫描 JSON 重新生成报告:
```
python -m forensic_harvester report \
--input ./case_001_report/scan_results.json \
--output ./refreshed_reports \
--format html
```
### 全局选项
```
python -m forensic_harvester --help # Show all commands
python -m forensic_harvester scan --help # Detailed help for scan
python -m forensic_harvester --verbose scan ... # Enable debug logging
python -m forensic_harvester --log-file ./fh.log scan ... # Log to file
```
## 工作原理
### 文件雕刻
文件雕刻在不依赖文件系统元数据的情况下,从原始二进制数据中重建文件。ForensicHarvester 以可配置的块大小(默认:8 MB)读取源文件,扫描每个块以查找已知的**文件签名**——即标识文件类型的魔术字节序列。当找到签名时,该工具会从该偏移量向前雕刻,直到遇到可选的文件尾标记(例如,JPEG 的 `\xFF\xD9`)或达到配置的最大大小。
**支持的签名:**
| 类型 | 魔术字节 | 文件尾 |
|---|---|---|
| JPEG | `FF D8 FF E0/E1` | `FF D9` |
| PNG | `89 50 4E 47 0D 0A 1A 0A` | `IEND` 块 |
| PDF | `25 50 44 46` (%PDF) | `%%EOF` |
| ZIP / DOCX / XLSX | `50 4B 03 04` (PK..) | Central directory |
| Windows PE (EXE/DLL) | `4D 5A` (MZ) | — |
| ELF (Linux binary) | `7F 45 4C 46` | — |
| SQLite | `53 51 4C 69 74 65` | — |
| MP3 | `FF FB` / `ID3` | — |
| MP4 | `66 74 79 70` (ftyp) | — |
| GIF | `47 49 46 38` (GIF8) | `00 3B` |
| RAR | `52 61 72 21 1A 07` | — |
| 7-Zip | `37 7A BC AF 27 1C` | — |
### 取证哈希计算
ForensicHarvester 在流式循环中读取每个文件,同时更新 **MD5** 和 **SHA-256** 哈希计算器。这避免了对大型磁盘映像的重复读取。生成的摘要可作为防篡改指纹,用于证据保管链的记录。
### EXIF 提取
图像文件(JPEG、TIFF、PNG)可能包含由拍摄设备嵌入的 **EXIF 元数据**。ForensicHarvester 使用 Pillow 解码所有 EXIF IFD 条目,包括:
- **GPS IFD** → 转换为十进制的纬度/经度坐标
- **DateTimeOriginal** / **DateTimeDigitized** → 精确的拍摄时间戳
- **Make** / **Model** → 相机或设备制造商信息
- **Software** → 处理软件(可能会暴露编辑工具)
嵌入在图像中的 GPS 坐标可以将设备与物理位置及时间戳关联起来,使其成为高度相关的证据。
### 反取证检测(扩展名不匹配)
一种常见的规避技术是使用无害的扩展名(`.jpg`、`.txt`)重命名恶意文件(例如可执行文件),以绕过文件类型过滤器。ForensicHarvester 通过以下方式检测此行为:
1. 读取每个文件的前 512 个字节
2. 与所有已知的魔术字节模式进行匹配
3. 将检测到的类型与声明的扩展名进行比较
4. 根据类别差异程度分配**置信度**(高 / 中 / 低)
伪装成 JPG 的 EXE 是一个**高**置信度标记。而名为 `.docx` 的 ZIP 文件**不会被标记**,因为 DOCX 在设计上就使用了 ZIP 容器格式。
## 使用场景
**事件响应**
- 在获取证据后迅速对整个证据目录进行哈希处理,以建立防篡改基线
- 检测攻击者用于隐藏恶意文件的反取证技术
**证据保全**
- 在证据处理前后生成证据保管链哈希清单
- 验证证据文件在收集和分析之间未被修改
**反取证检测**
- 识别已被重命名以伪装其真实类型的文件
- 标记隐藏在图像目录或文档文件夹中的可执行文件
**文件恢复**
- 从原始磁盘映像或内存转储中雕刻已删除或孤立的文件
- 即使在文件系统结构损坏时,也能恢复照片、PDF 和压缩包
**EXIF 与 GPS 情报**
- 从图像证据中提取相机元数据和 GPS 坐标
- 根据 EXIF 时间戳构建设备活动的地理时间线
## 取证概念
### 证据保管链
证据保管链是关于谁在何时收集、处理和转移证据的书面记录。在数字取证中,**加密哈希**是证据保管链的基础:在获取证据后立即计算的哈希会创建一个指纹,可以在任何时候重新计算以验证数据是否被更改。ForensicHarvester 的 `hash` 子命令和清单系统直接支持此工作流程。
### 文件雕刻
传统的文件恢复依赖于文件系统结构(目录项、FAT/inode 表)来定位文件。当这些结构被删除或损坏时,**文件雕刻**会完全绕过文件系统,扫描原始字节流以查找已知的文件头模式。这使得在目录项被覆盖很久之后仍能恢复已删除的文件——这是数据恢复和已删除证据调查中的一项关键能力。
### 哈希验证
**MD5**(128 位)和 **SHA-256**(256 位)是数字取证中应用最广泛的两种哈希算法。MD5 速度快,在传统工具中得到广泛支持;SHA-256 在加密强度上被认为更高,是新建工作流程的首选。ForensicHarvester 在一次处理中即可完成两者的计算。只有当文件新计算的哈希值与原始清单中记录的值相匹配时,该文件才被视为**未被更改**。
### 魔术字节
每个二进制文件格式都以一个标识其类型的特征字节序列开头——这些被称为**魔术字节**或**文件签名**。操作系统和安全工具使用这些签名(而不是文件扩展名)来确定文件的真实类型。Linux 的 `file` 命令和 Windows 的文件类型嗅探都依赖于魔术字节。文件扩展名伪造正是利用了可见扩展名与实际魔术字节之间的这种脱节。
## 项目结构
```
ForensicHarvester/
├── forensic_harvester/
│ ├── __init__.py # Public API exports
│ ├── __main__.py # python -m forensic_harvester entry point
│ ├── main.py # CLI (argparse subcommands)
│ ├── file_carver.py # Magic byte scanning + file carving engine
│ ├── hash_engine.py # MD5/SHA-256 streaming hashes + verification
│ ├── metadata_extractor.py # EXIF, filesystem metadata, GPS decoding
│ ├── mismatch_detector.py # Extension vs. magic byte comparison
│ ├── report_generator.py # HTML (Jinja2) + CSV report generation
│ └── utils.py # Logging, color output, progress bars, constants
├── tests/
│ ├── test_hash_engine.py # Hash correctness + manifest verification
│ ├── test_file_carver.py # Signature detection + carving integration
│ └── test_mismatch_detector.py # Mismatch detection accuracy
├── sample_data/
│ └── README.md # How to generate test data
├── requirements.txt
├── setup.py
├── LICENSE
└── README.md
```
## 运行测试
```
# 运行所有测试
python -m unittest discover tests -v
# 运行单个测试模块
python -m unittest tests.test_hash_engine -v
python -m unittest tests.test_file_carver -v
python -m unittest tests.test_mismatch_detector -v
# 使用 pytest(如果已安装)
pytest tests/ -v
```
### 贡献建议
- 添加更多文件签名(HEIC、WebP、PST、SQLite WAL 等)
- 增加 NTFS/FAT 文件系统感知能力,以实现更有针对性的雕刻
- 实现跨目录从 EXIF 时间戳生成时间线
- 增加 YARA 规则集成以进行基于签名的内容扫描
- 使用 `rich` 或 `textual` 构建 TUI 界面
## 免责声明
ForensicHarvester 专为**授权的取证调查、学术研究和教育目的**而设计。在分析任何系统或数据之前,请务必获得适当的授权。作者不对滥用行为承担责任。
## 许可证
本项目基于 [MIT 许可证](LICENSE) 授权。
*使用 Python 3 · Pillow · Jinja2 构建 · 无需商业依赖*
标签:ForensicHarvester, Python, 反取证检测, 哈希校验, 域渗透, 子域名变形, 完整性验证, 库, 应急响应, 开源安全工具, 数字取证, 数据恢复, 文件恢复, 文件雕刻, 无后门, 电子数据取证, 端点安全, 网络安全, 自动化脚本, 补丁管理, 证据获取, 逆向工具, 逆向工程平台, 隐私保护