michspenz/MetaData-Analyzer
GitHub: michspenz/MetaData-Analyzer
一款基于 Python 的数字取证工具,用于从图像和文档中提取隐藏的元数据并生成结构化的调查报告。
Stars: 1 | Forks: 0
# Metadata Analyzer

## 项目概述
在数字取证中,**metadata** 是关于数据的数据。每个文件在创建时都携带隐藏的嵌入信息:是谁创建的、何时创建的、使用了什么设备或软件,有时甚至包括其在地球上的确切位置。这些信息在日常使用中是不可见的,但在调查中却具有极高的价值。
**Metadata Analyzer** 是一个基于 Python 的取证工具,能够从常见文件类型中提取这层隐藏信息,并将其编译成结构化、适合调查人员使用的报告。用例包括:
- **事件响应** — 确定文件的创建或最后修改时间
- **证据归因** — 识别文档作者或相机的品牌/型号
- **OSINT / 地理定位** — 提取嵌入在图像中的 GPS 坐标
- **证据保管链** — 记录时间戳和文件来源
- **恶意软件分析** — 从文档 metadata 中识别编译工具链
## 功能
| 格式 | 提取字段 |
|--------|-----------------|
| **JPG / JPEG / PNG / TIFF** | 文件名、大小、分辨率、格式、创建/修改日期、相机品牌与型号、镜头、软件、GPS 坐标(纬度/经度/海拔)、曝光、ISO、焦距、闪光灯 |
| **PDF** | 标题、作者、创建者、生成器、主题、关键词、创建/修改日期、页数、PDF 版本、加密状态 |
| **DOCX** | 标题、作者、最后修改人、描述、关键词、类别、创建/修改/打印日期、修订号、字数/段落数/字符数、应用程序名称 |
**报告格式:**
- **JSON** — 针对每个文件的结构化报告
- **CSV** — 汇总所有分析文件的扁平摘要
## 项目结构
```
metadata-analyzer/
│
├── analyzer.py # CLI entry point and dispatcher
├── image_analyzer.py # Image (JPG, PNG, TIFF) metadata extraction
├── pdf_analyzer.py # PDF metadata extraction
├── docx_analyzer.py # DOCX metadata extraction
├── report_generator.py # JSON and CSV report generation
├── generate_samples.py # Sample file generator for testing
│
├── reports/ # Auto-generated reports land here
├── sample_files/ # Test files (generated by generate_samples.py)
├── screenshots/ # Add tool screenshots here for GitHub display
│
├── requirements.txt
└── README.md
```
## 安装说明
### 前置条件
- Python 3.10 或更高版本
- pip
### 步骤
```
# 1. Clone the repository
git clone https://github.com/michspenz/metadata-analyzer.git
cd metadata-analyzer
# 2. (可选但推荐) 创建一个虚拟环境
python -m venv venv
source venv/bin/activate # Linux / macOS
venv\Scripts\activate # Windows
# 3. Install dependencies
pip install -r requirements.txt
# 4. (可选) 生成测试样本文件
python generate_samples.py
```
## 使用说明
### 分析单个文件
```
python analyzer.py image.jpg
python analyzer.py document.pdf
python analyzer.py report.docx
```
### 分析文件夹(所有支持的文件)
```
python analyzer.py sample_files/
```
文件夹模式会自动在 `reports/` 目录下生成批量 JSON 报告和 CSV 摘要。
### 保存单个 JSON 报告
```
python analyzer.py image.jpg --json
```
### 为单个文件保存 CSV 摘要
```
python analyzer.py image.jpg --csv
```
### 禁止终端输出(仅报告模式)
```
python analyzer.py sample_files/ --no-print
```
### 完整选项参考
```
positional arguments:
target File or folder to analyze.
options:
--json Save JSON report(s) to the reports/ directory.
--csv Save a CSV summary to the reports/ directory.
--no-print Suppress pretty-print output to stdout.
--help Show help message and exit.
```
## 示例输出
### 终端输出(单张图像)
```
============================================================
FORENSIC METADATA — photo.jpg
============================================================
file_name photo.jpg
file_size_kb 2847.34
format JPEG
width_px 4032
height_px 3024
creation_date 2024:03:15 14:22:07
modification_date 2024-03-15T14:22:07
camera_make Apple
camera_model iPhone 15 Pro
software 17.3.1
f_number f/1.78
iso_speed 50
focal_length_mm 6.765mm
flash Did not fire
gps.latitude 6.524379
gps.longitude 3.379206
gps.altitude_m 38.0
============================================================
```
### JSON 报告
```
{
"file_name": "photo.jpg",
"file_path": "/home/user/evidence/photo.jpg",
"file_size_bytes": 2915675,
"file_size_kb": 2847.34,
"type": "image",
"format": "JPEG",
"width_px": 4032,
"height_px": 3024,
"camera_make": "Apple",
"camera_model": "iPhone 15 Pro",
"gps": {
"latitude": 6.524379,
"longitude": 3.379206,
"altitude_m": 38.0
},
"errors": []
}
```
### CSV 摘要(多文件文件夹分析)
```
file_name,type,file_size_kb,author,camera_model,creation_date,gps.latitude,gps.longitude
photo.jpg,image,2847.34,,iPhone 15 Pro,2024:03:15 14:22:07,6.524379,3.379206
report.docx,docx,48.21,Jane Investigator,,2024-03-14T09:11:00,,
brief.pdf,pdf,220.80,John Analyst,,2024-03-10T08:00:00,,
```
## 截图
| 终端输出 | JSON 报告 | CSV 摘要 |
|----------------|-------------|-------------|
| `screenshots/terminal.png` | `screenshots/json_report.png` | `screenshots/csv_report.png` |
## 在 VS Code 中运行
1. 在 VS Code 中打开项目文件夹:`File → Open Folder`
2. 打开集成终端:`` Ctrl+` ``
3. 安装依赖项:`pip install -r requirements.txt`
4. 运行工具:
python analyzer.py sample_files/
5. 报告将生成在 `reports/` 目录中 — 可在左侧的 Explorer 面板中查看。
**推荐的 VS Code 扩展:**
- Python (Microsoft)
- Pylance
- GitLens
## 未来改进
- [ ] **HTML 报告** — 带有渲染 GPS 地图的交互式证据报告
- [ ] **Hash 计算** — 针对每个文件的 MD5 和 SHA-256 完整性校验
- [ ] **时间线生成** — 根据时间戳按时间顺序重建事件
- [ ] **批量取证处理** — 带有深度控制的递归目录扫描
- [ ] **隐写术检测** — 检测图像文件中的 LSB 异常
- [ ] **EXIF 擦除检测** — 标记 EXIF 数据疑似被清除的图像
- [ ] **GUI 版本** — 基于 Tkinter 或 Web 的界面
- [ ] **基于 Hash 的去重** — 识别文件夹中的相同文件
- [ ] **证据保管链日志** — 为所有分析会话提供仅追加的审计跟踪
## 依赖项
| 库 | 用途 |
|---------|---------|
| `Pillow` | 图像加载和 EXIF 提取 |
| `PyPDF2` | PDF 解析和 metadata 访问 |
| `python-docx` | DOCX Open XML 解析 |
| `pandas` | (保留用于未来的时间线/数据透视功能) |
## 免责声明
此工具专为**防御和取证用途**构建。请仅在您拥有或获得明确授权进行分析的文件上使用。从图像中提取的 GPS 坐标是由拍摄照片的设备嵌入的 — 此工具仅读取并报告它们;它不会跟踪或传输任何数据。
## 作者
**Michael Oscar** — 渗透测试员与安全研究员
GitHub: [michspenz](https://github.com/michspenz)
专长:Web 应用程序安全 · 数字取证 · Bug Bounty
标签:Python, 元数据分析, 数字取证, 无后门, 自动化报告, 自动化脚本, 逆向工具