SnakeFirts/Specter

GitHub: SnakeFirts/Specter

Specter 是一款用 Python 编写的数字取证工具,通过整合文件元数据、EXIF 信息和哈希值构建统一的证据时间线,并检测时间篡改和视觉重复图像。

Stars: 0 | Forks: 0

``` ⠀⠀⠀⠀⠀⠀⢀⣤⣶⣶⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⢀⣾⣿⣿⠟⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⢰⣿⣿⣿⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⣠⣾⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⢀⣾⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⠶⠋⠉⠙⠻⣶⣦⣄⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⢸⡿⠟⠁⠀⢸⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠞⠁⠀⠀⠀⠀⢠⣿⣿⣿⣿⣷⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⢈⡇⠀⠀⠀⠈⣇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡴⠋⠁⠀⠀⠀⠀⠀⢀⣸⣿⣿⣿⣿⣿⡿⠿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⣼⠀⠀⠀⠀⠀⠸⣆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⠋⠀⠀⠀⠀⠀⠀⠀⣤⠞⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⣧⠀⠀⠀⠀⠀⠀⠹⣆⠀⠀⠀⠀⢀⣀⣠⣤⣤⣤⣞⠁⠀⠀⠀⠀⠀⠀⠀⣰⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⢻⠀⠀⠀⠀⠀⠀⠀⠹⣦⣠⠶⠛⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠸⡇⠀⠀⠀⠀⠀⠀⠐⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣀⠀⠀⠐⢦⣰⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⢷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⣯⣽⣽⢦⡀⠀⠙⣦⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠈⣧⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸⡇⣿⡆⣿⣘⡇⠀⠀⠈⢳⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠘⣆⠀⠀⠀⠀⣴⠒⣆⠀⠀⠀⠀⠀⠀⠀⠘⣧⣏⢻⣾⣛⠇⢀⢠⢄⡀⢻⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⣿⠀⠀⠀⢰⢿⡟⣿⣇⠀⠀⠀⠀⠀⠀⠀⠈⠿⠟⠋⠁⣔⣙⣳⢿⣿⡀⢻⡄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⣿⠀⠀⣀⢸⡘⣿⢛⡏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣗⣴⡢⣵⡀⡄⢸⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⣿⢀⣾⠄⠵⡷⠯⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⣠⣤⣀⢀⣾⣟⢈⡡⢶⠃⡾⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⢸⣼⣋⣑⣚⡾⣷⣄⡀⠀⢀⣴⡿⢿⣶⣤⣴⡿⠉⠛⠿⠋⠈⠚⠐⠋⣼⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠘⣧⢷⡡⢴⠋⠈⠻⢿⣶⡿⠋⠀⠀⠀⠉⠉⠀⠀⠀⠀⠀⠀⠀⠀⡼⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣠⣤⠴⣶⡄ ⠀⠀⠀⠀⠘⢷⣉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢺⡁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⣤⠶⠛⠉⠁⠀⢸⠃⢻ ⠀⠀⠀⠀⠀⠀⠙⠳⢧⣄⣀⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢧⠀⠀⠀⠀⠀⠀⠀⠀⣠⡴⠚⠉⠀⣀⣠⠄⠀⠀⢰⠀⢸ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⠉⠉⣛⠶⠒⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⣇⠀⠀⠀⠀⢀⣴⠞⠁⣠⡴⠞⣋⣥⠤⠀⠀⠀⠈⢃⣼ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠈⢣⠄⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢹⡄⠀⠀⠀⠸⡇⠀⠀⠀⠀⠉⢁⣀⣠⡤⠴⠶⠒⠛⠃ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣴⠋⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣧⠀⠀⠀⢀⣿⠀⠀⠀⡖⠛⠉⠉⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⡼⠃⠀⠀⠀⠀⢰⣿⠀⠀⠀⣰⣷⠀⠀⠀⠀⠀⠀⢸⡄⢠⡞⠋⠀⠀⠀⣀⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⡾⠁⠀⠀⠀⠀⠀⣿⡟⠀⠀⠀⣿⡟⠀⠀⠀⠀⠀⠀⠈⣇⠘⣧⠀⢰⡞⠛⠉⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⡾⠁⠀⠀⠀⠀⠀⠀⠈⠀⠀⠀⠀⠙⠁⠀⠀⠀⠀⠀⠀⠀⢻⢀⣼⠃⣸⠇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⣀⣤⠴⠞⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠘⠿⣵⡞⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⣀⡴⠞⠋⠁⠀⠀⢀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠙⠳⣤⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠙⣳⠶⠒⠒⠒⢲⡞⠀⠀⠀⠀⠀⣀⠀⠀⠀⠀⠀⠀⢀⣠⡀⠀⠀⠀⢀⡟⠉⠙⠒⠶⡶⠦⠤⠤⠽⠆⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠓⠒⠒⠚⠛⣟⣠⣤⠴⠖⡞⠋⡩⠷⣤⡀⣀⡤⢾⡋⠀⣀⣵⡄⠀⣼⠉⠉⠉⠑⠒⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠉⠀⠀⠈⠙⠉⠀⠀⠉⠚⠁⠀⠙⠳⠏⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀ ``` ![Python](https://img.shields.io/badge/Python-3.11+-3776AB?logo=python&logoColor=white) ![License](https://img.shields.io/badge/License-MIT-green.svg) ![Platform](https://img.shields.io/badge/Platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey) ![Status](https://img.shields.io/badge/Status-Active%20Development-orange) # Specter **Specter** 是一款用 Python 编写的数字取证分析工具,它将文件系统元数据、EXIF 和加密哈希统一到一个按时间顺序排列的时间线中,以方便进行证据分析。 目前它支持分析单个图像和文件或整个目录,检测时间不一致性,提取相关元数据,并通过感知哈希将视觉上相似的图像进行分组。 ## 功能 - 加密哈希(MD5 和 SHA256) - 统一的时间线 - 提取 EXIF 元数据 - 可用时提取 GPS 坐标 - 感知哈希(dHash) - 自动检测时间不一致性 - 以 JSON 格式导出结果 - 递归扫描目录 - 使用 Pytest 的自动化测试套件 ## 安装 ``` pip install -r requirements.txt ``` ## 用法 ``` # 分析整个文件夹(默认递归) python -m specter.cli scan ./evidencia # 不递归 python -m specter.cli scan ./evidencia --no-recursive # 将结果导出为 JSON python -m specter.cli scan ./evidencia --export resultado.json # 分析单个文件 python -m specter.cli scan ./foto.jpg ``` ## 每个文件提取的信息 - **哈希**:MD5 和 SHA256 - **文件系统时间戳**:创建(见下文注释)、 修改、最后访问 - **EXIF**(仅限图像):拍摄日期、设备(品牌/型号)、 可用的 GPS 坐标 - **感知哈希**:用于将视觉上相似的图像分组, 即使它们的 SHA256 不同(同一张照片经过编辑、重新压缩或缩放——这在原始 EXIF 在 Pixelmator、Photoshop 等编辑器导出时丢失的情况下很常见) - **自动警报**:EXIF 日期晚于文件修改日期, 超出了时钟/时区偏差的预期范围(可能存在篡改),或者“修改时间”早于 “创建时间”(通常是从其他设备/磁盘导入的文件) ## 重复项和编辑(感知哈希) ``` # 默认激活 python -m specter.cli scan ./fotos # 调整两张图像需要多“相似”才能被分组 # (0 = 完全相同,64 = 毫无关联;default 8,经验校准) python -m specter.cli scan ./fotos --dupe-threshold 15 # 禁用 python -m specter.cli scan ./fotos --no-dupes ``` 这可以识别“同一张照片,不同的编辑/压缩”的候选文件—— 这非常有用,因为加密哈希(SHA256)在定义上无法 进行关联,因为任何单字节的改变都会使它完全改变。 **重要提示——已知限制:** 感知哈希在真实照片中效果非常 好(每次拍摄的噪点/纹理都是唯一的),但在壁纸或风格化的艺术作品中,它可能会对那些仅仅是*构图相似* (居中的剪影、相似的调色板)但并非同一作品的照片进行分组。因此,每个匹配项都会标记有一个置信度级别: - **高置信度**(距离 ≤ 6):通过经过证实的真实案例进行了校准, 作为精确或近乎精确的匹配(相同的截图、相同照片的缩放/重新压缩)。 - **需手动检查**(距离 > 6,直至阈值):可能仅仅是视觉构图相似, 而非同一张图像。一个被确认为误报的真实案例(两张设计相似、CD不同的 电子游戏壁纸)落在了距离 10 的位置——因此默认设置中保留了安全余量。 ## 关于时间戳的重要说明 Linux 中的 `st_ctime` 是“元数据更改时间”(inode 的元数据何时发生更改),而**不是**真正的创建日期——后者仅在 macOS/BSD 的 `st_birthtime` 和 Windows NTFS 的 `$FILE_NAME`/`$STANDARD_INFORMATION` 中可靠存在。 在 macOS/BSD(APFS、HFS+)中,此工具**确实**会在 可用时使用 `st_birthtime`,它是该文件在该磁盘上真正的创建日期 (不要与原始拍摄日期混淆,如果文件是从其他地方复制、下载或同步的—— 在这种情况下,`st_birthtime` 反映的是它到达*当前*磁盘的时间,而不是照片最初拍摄的时间; 为此,单独设有 EXIF 字段 `DateTimeOriginal`)。 在不支持 `st_birthtime` 的 Linux 中,使用 `st_ctime` 作为 “创建时间”的近似值,并在此进行说明,以便在使用此工具生成的任何取证报告中保持清晰——在 没有此声明的情况下使用时间戳是一个常见的错误,如果将其用作真正的 证据,这将是一个严重的漏洞。 ## 测试 ``` pip install -r requirements-dev.txt pytest ``` 测试套件涵盖三个层面: - `tests/test_flags.py`:`compute_flags()` 的纯逻辑(时区阈值的 所有边缘情况,不触及文件系统)。 - `tests/test_extractor.py`:真正的集成测试——哈希计算、读取 文件系统时间戳、从测试中生成的合成 JPEG 图像中提取 EXIF,以及 `scan_directory`(递归、 非递归、处理 `PermissionError`)。 - `tests/test_dedup.py`:感知哈希和重复项/编辑的 分组——Hamming 距离的边缘情况、分组的传递性,以及模拟 “编辑器缩放/重新压缩照片”真实案例的合成图像。 ## 路线图 - [ ] 直接读取 NTFS 的 MFT 以获取真实时间戳。 - [ ] PDF 和 Office 文档的元数据。 - [ ] 时间线的可视化导出(HTML)。 - [ ] PDF 报告。 - [ ] 导出 CSV。 - [ ] 通过 EXIF 检测编辑软件。 - [ ] 浏览器工件分析器(历史记录、cookie 和 cache)。 ## License MIT
标签:元数据提取, 数字取证, 时间线重构, 自动化脚本, 证据关联, 进程保护, 逆向工具