michspenz/MetaData-Analyzer

GitHub: michspenz/MetaData-Analyzer

一款基于 Python 的数字取证工具,用于从图像和文档中提取隐藏的元数据并生成结构化的调查报告。

Stars: 1 | Forks: 0

# Metadata Analyzer ![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/3c39aa81d7141453.svg) ## 项目概述 在数字取证中,**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, 元数据分析, 数字取证, 无后门, 自动化报告, 自动化脚本, 逆向工具