ketanHub/MetaForensic-Toolkit

GitHub: ketanHub/MetaForensic-Toolkit

专为 CHFI 风格调查构建的自动化元数据取证工具,在单一流程中完成图像 EXIF 提取、文档篡改检测与反取证擦除识别,并附带哈希证据保管链报告。

Stars: 0 | Forks: 0

# MetaForensic Toolkit 一款专为 CHFI 风格数字调查构建的自动化元数据取证工具。 在单一 pipeline 中涵盖三个检查角度:图像 EXIF/GPS 提取、文档篡改检测以及反取证元数据擦除检测——附带基于 hash 的证据保管链和可在法庭上展示的 HTML 报告。 ## 为什么这个项目符合 CHFI 这直接对应 CHFI 考试大纲中的“元数据取证”领域,并在一个交付成果中展示了三个独立的学习目标: | 目标 | 模块 | |---|---| | 用于 OSINT 调查的 EXIF/地理定位提取 | `modules/image_meta.py` + `modules/exiftool_wrapper.py` | | 用于归属/时间线争议的文档元数据分析 | `modules/doc_meta.py` | | 反取证擦除检测(包括选择性/片段级别) | `modules/tamper_detect.py` | | 高级/行业标准的提取(180 多种格式、视频、RAW、序列号) | `modules/exiftool_wrapper.py``(封装了 Phil Harvey 的 ExifTool) | | 法律可采性/证据完整性 | `modules/hashing.py` + 报告证据保管链区块 | ### ExifTool 集成 `exiftool_wrapper.py` 直接调用真正的 ExifTool 二进制文件——这是真正的行业标准工具,而非重新实现——并增加了三个 Pillow/exifread 快速路径无法做到的功能: - **按片段分组输出**(`-G1`):每个标签都标有它来自的元数据容器(EXIF、XMP、IPTC、MakerNotes、File、QuickTime 等)。这正是使**选择性擦除检测**成为可能的原因——例如,EXIF 被清除干净,但 MakerNotes 或 XMP 未受影响,而单一库提取根本无法注意到这一点,因为它只读取一个容器。 - **视频和 RAW 支持**:MP4/MOV/AVI 和 CR2/NEF/ARW/DNG 等直接交由 ExifTool 处理,因为 Pillow 根本无法读取它们——将工具从“图像取证”扩展到真正涵盖手机和相机实际生成的格式。 - **设备序列号恢复**:跨每个片段搜寻 MakerNotes 级别的标签(SerialNumber、LensSerialNumber、BodySerialNumber 等),如果该设备随后被查获用于比对,这对于将文件归属于特定物理设备非常有用。 ## 功能 - **证据保管链优先**:在进行任何元数据提取之前,对每个文件进行 hash(MD5/SHA1/SHA256)处理,并对其文件系统时间戳进行快照。 - **图像分析**:EXIF(通过 Pillow + exifread 交叉验证)、GPS DMS→十进制转换(带有可直接点击的地图链接)、相机/软件签名检测。 - **文档分析**:PDF DocInfo *和* XMP 元数据流(独立检查——大多数擦除工具只清除其中之一),DOCX/XLSX 核心属性,以及 DOCX `rsid` 修订会话计数(一个鲜为人知的 artifact,暗示了构建一个文档经历了多少次编辑会话)。 - **篡改检测启发式算法**:内部时间戳逻辑检查(例如“修改”时间早于“创建”时间)、嵌入式时间戳与文件系统时间戳的偏移、编辑软件指纹、双重元数据流不对称性。 - **报告**:每个文件生成一个独立的 HTML 报告(可打印为 PDF 用于案件归档),外加用于脚本/SIEM 摄入的可选原始 JSON 导出。批处理模式可在整个证据文件夹中生成 `index.html` 摘要。 ## 设置 现代的 Debian/Ubuntu (PEP 668) 有意阻止了系统级的 `pip install`——请使用虚拟环境,而不是使用 `--break-system-packages`(该标志确实会破坏操作系统的 Python 工具,这也是默认阻止它的原因)。 ``` cd metaforensic python3 -m venv venv source venv/bin/activate # Windows: venv\Scripts\activate pip install -r requirements.txt # ExifTool (system dependency, not a pip package) — 深度扫描引擎 sudo apt-get install libimage-exiftool-perl # Debian/Ubuntu brew install exiftool # macOS # Windows: 从 https://exiftool.org 下载 ``` 每次打开新终端时,请先重新激活 venv: ``` cd metaforensic source venv/bin/activate ``` 该工具在没有安装 ExifTool 的情况下也能正常运行(它只会跳过深度扫描层并在报告中注明这一点),但您将失去视频/RAW 支持、序列号恢复和选择性擦除检测——下面的高级发现都依赖于它。 ## 仪表板(拖放式 Web UI) 如果您想使用点击式界面而不是 CLI: ``` source venv/bin/activate # if not already active python3 app.py ``` 然后在浏览器中打开 **http://127.0.0.1:5000**。拖动证据文件(或点击浏览),可选择填写案件 ID / 检查员,然后点击**运行取证分析**——将运行与 CLI 相同的 pipeline,报告将直接在浏览器中呈现。它是纯本地的(绑定到 127.0.0.1,不对外网络开放),并允许您在审查完成后从服务器删除上传的副本。 ## CLI 用法 ``` # 单个文件 python3 main.py evidence/photo.jpg --case CASE-2026-014 --examiner "Your Name" # 整个 evidence folder (递归) python3 main.py evidence_folder/ -o reports/ --json ``` 支持的类型:`.jpg .jpeg .png .tiff .tif .heic`(快速路径图像),`.pdf .docx .xlsx .xlsm`(文档),`.mp4 .mov .avi .mkv .3gp .m4v`(视频,通过 ExifTool),`.cr2 .cr3 .nef .arw .dng .raf .rw2 .orf`(RAW 相机格式,通过 ExifTool)。 比起输入路径更喜欢点击操作?请改用仪表板——见上文。 ## 设计说明/项目报告的讨论点 - **为什么在分析之前而不是之后进行 hash**:证明检查本身没有篡改证据——这是报告中证据可采性的核心。 - **为什么要检查两个 PDF 元数据流**:DocInfo 和 XMP 是分开存储的;一个常见的反取证错误是只擦除其中一个,该工具将其标记为独特的“擦除签名”,而不是简单的数据缺失。 - **为什么要对 DOCX 进行 rsid 计数**:这是一个大多数学生都不知道的 artifact——对于项目答辩/口试来说是一个很好的加分项。 - **需要诚实披露的局限性**(对您报告的“局限性”部分很有用):启发式方法是指标,而不是证明;无论是否篡改,社交媒体平台都会在上传时剥离 EXIF;Linux 上的文件系统 ctime 是 inode 更改时间,而不是创建时间,因此跨平台获取证据时应注明操作系统。 ## 进一步扩展(很好的“未来工作”部分) - 通过 `pillow-heif` 添加 HEIC/RAW 格式支持。 - 添加 ELA(错误级别分析)以进行像素级图像篡改检测。 - 使用离线地理编码数据集添加 `--reverse-geocode` 标志。 - 添加 PDF `/ID` 数组比较(第一个 ID 与第二个 ID 的对比可以揭示签名后的增量保存)。
标签:DNS 反向解析, EXIF提取, Python, 元数据分析, 域渗透, 子域名变形, 数字取证, 无后门, 电子数据取证, 自动化脚本, 逆向工具, 防篡改检测