sudhantechie/recover

GitHub: sudhantechie/recover

基于 The Sleuth Kit 的命令行取证工具,用于从原始磁盘镜像中扫描并提取已删除的文件。

Stars: 0 | Forks: 0

``` ██████╗ ███████╗ ██████╗ ██████╗ ██╗ ██╗███████╗██████╗ ██╔══██╗██╔════╝██╔════╝██╔═══██╗██║ ██║██╔════╝██╔══██╗ ██████╔╝█████╗ ██║ ██║ ██║██║ ██║█████╗ ██████╔╝ ██╔══██╗██╔══╝ ██║ ██║ ██║╚██╗ ██╔╝██╔══╝ ██╔══██╗ ██║ ██║███████╗╚██████╗╚██████╔╝ ╚████╔╝ ███████╗██║ ██║ ╚═╝ ╚═╝╚══════╝ ╚═════╝ ╚═════╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝ ```

通过 SleuthKit 从原始磁盘镜像中恢复已删除的文件。
无需 Python 包。无需 GUI。只需 flsicat 和一个清爽的终端。

## 概述 `recover.py` 是一款命令行取证工具,用于扫描原始磁盘镜像(`.dd`、`.img`)中的已删除文件,并使用 [The Sleuth Kit](https://www.sleuthkit.org/) 提取它们。它为 `fls` 和 `icat` 封装了一个精美的界面 —— 彩色输出、智能过滤器、dry-run 模式、类型不匹配检测、MD5 校验和以及完整的 JSON 报告。 ## 快速开始 ``` # 1. 安装依赖 sudo apt install sleuthkit # Debian / Ubuntu brew install sleuthkit # macOS # 2. 克隆并运行 git clone https://github.com/sudhantechie/recover python recover.py disk.dd ``` ## 用法示例 ``` # 基础恢复 — 所有内容都存入 ./recovered/ python recover.py disk.dd # 将输出发送到特定位置并显示每个步骤 python recover.py disk.dd -o /tmp/found -v # 仅抓取图像和 PDF,并使用 checksum 验证每个文件 python recover.py disk.dd --ext jpg jpeg png pdf --checksum # 预览将要恢复的内容而不触碰磁盘 python recover.py disk.dd --dry-run # 跳过微小的 scratch 文件并保存完整的 JSON 报告 python recover.py disk.dd --min-size 4096 --report results.json # 完整运行 python recover.py disk.dd -o ./out -v --ext jpg png pdf --min-size 1024 --checksum --report run.json --log run.log ``` ## 所有参数 | 参数 | 描述 | 默认值 | |------|-------------|---------| | `IMAGE` | 原始磁盘镜像的路径(例如 `disk.dd`) | 必填 | | `-o, --output DIR` | 保存已恢复文件的目录 | `./recovered/` | | `--ext EXT [EXT ...]` | 仅恢复带有这些扩展名的文件 | 全部 | | `--min-size BYTES` | 跳过小于 N 字节的文件 | `0` | | `--max-size BYTES` | 跳过大于 N 字节的文件 | 无 | | `--types CODE [...]` | 按文件名类型代码过滤 | `r d` | | `--meta-types CODE [...]` | 按元数据类型代码过滤 | `r d` | | `--checksum` | 为每个恢复的文件计算 MD5 哈希值 | 关 | | `--dry-run` | 预览而不向磁盘写入任何内容 | 关 | | `--report FILE` | 将完整的 JSON 摘要写入此文件 | 无 | | `--log FILE` | 将所有日志输出写入文件 | 无 | | `-v, --verbose` | 打印所有跳过和调试信息 | 关 | | `-h, --help` | 显示帮助并退出 | — | ## 类型代码 与 `--types` 和 `--meta-types` 配合使用: | 代码 | 含义 | |------|---------| | `r` | 常规文件 | | `d` | 已删除文件 | | `b` | 块设备 | | `l` | 符号链接 | | `p` | 命名 FIFO | | `s` | 影子文件 | | `w` | whiteout 文件 | | `v` | TSK 虚拟文件 | ## JSON 报告格式 传入 `--report results.json` 以获取每个文件的结构化摘要: ``` { "image": "disk.dd", "output": "./recovered", "timestamp": "2025-06-10T14:22:03.441", "elapsed_seconds": 4.21, "dry_run": false, "summary": { "recovered": 47, "skipped": 12, "failed": 1 }, "recovered": { "documents/report.pdf": { "inode": "1024", "size_bytes": 145731, "md5": "a3f9b2c1d4e5f6a7b8c9d0e1f2a3b4c5" } }, "failed": { "cache/tmp0.bin": { "inode": "1099" } }, "skipped": { "thumbs.db": { "reason": "too small (128 B)" } } } ``` ## 工作原理 1. **`fls -r`** 递归遍历镜像并返回每个条目(包括已删除的条目)及其 inode、文件名类型和元数据类型。 2. 每个已删除的条目都会与当前活动的过滤器(类型代码、扩展名、大小限制)进行匹配。 3. **`icat`** 提取每个匹配 inode 处的原始字节到输出目录,并保留原始的相对路径。 4. 类型不匹配(文件名类型 ≠ 元数据类型)会被标记出来 —— 这可能表明某个 inode 在删除后已被重新分配。 ## 依赖项 **无需 Python 包。** 唯一的外部依赖是 The Sleuth Kit。 | 依赖项 | 提供 | 安装 | |------------|----------|---------| | [sleuthkit](https://www.sleuthkit.org/) | `fls`, `icat` | `apt install sleuthkit` / `brew install sleuthkit` | | Python 3.6+ | runtime | 仅需标准库 |
标签:Python, The Sleuth Kit, 数字取证, 数据恢复, 无后门, 磁盘镜像分析, 自动化脚本, 逆向工具