NTFSparse/ntfs_parse

GitHub: NTFSparse/ntfs_parse

NTFS文件系统解析工具,核心能力是关联MFT、LogFile和UsnJrnl三大元数据源,用于数字取证和事件时间线重建。

Stars: 38 | Forks: 9

# ntfs_parse NTFS 解析器,具备 MFT LogFile 和 UsnJrnl 之间的关联功能。 该项目是一项研究的一部分,旨在探索结合 MFT、LogFile 和 UsnJrnl 的可能性。代码从头开始编写,并根据 MIT 许可证开源。 此概念验证并非商业就绪项目。 ## 用法 有一个基本的 shell 脚本可以执行所有基本的解析工作。这让用户无需了解所有单独的命令即可快速获取文件输出。 **注意:** 某些子命令/程序有 raw、parsed、csv、transactions 选项。这指定了输出类型。在 *logfileparse.py* 中选择 transaction 选项时,它将把单独的 LSN 连接在一起。 ### full_run.sh 不带参数运行将打印帮助信息。 用法: ```./full_run.sh image_name sector_offset directory``` | 变量 | 描述 | | -------- | ----------- | | `image_name` | 原始磁盘镜像 | | `sector_offset` | 到分区的扇区偏移量(可使用 mmls 获取) | | `directory` | 文件输出的相对目录 | **注意:** 此脚本需要 The Sleuth Kit (TSK) 的 'fls' 程序 ### mftparse.py MFT 解析器 该程序包含多个子命令,使其能够导出特定的 inums,或提取属于特定 inum 的数据。 用法: ```mftparse.py [-h] {export,extractdata,statistics} ...``` | 位置参数 | 描述 | | -------------------- | ----------- | | `export` | 将特定 inums 导出为某种类型 | | `extractdata` | 提取单个条目的数据,本质上是返回该文件 | | `statistics` | 显示有关此 NTFS 的统计信息 | | 可选参数 | 描述 | | ------------------ | ----------- | | `-h`, `--help` | 显示此帮助信息并退出 | #### 导出 将特定 inums 导出为某种类型 用法: ```mftparse.py export [-h] [-o OFFSET_SECTORS | -O OFFSET_BYTES] [-s SECTOR_SIZE] [-i IMAGE | -f FILE] [-t {raw,parsed,csv}] [-e EXPORT_FILE] [-q INUMS]``` | 可选参数 | 选项 | 描述 | | ------------------ | ------ | ----------- | | `-h`, `--help` | None | 显示此帮助信息并退出 | | `-o` | OFFSET_SECTORS | 镜像中文件系统的偏移量(以扇区为单位) | | `-O` | OFFSET_BYTES | 镜像中文件系统的偏移量(以字节为单位) | | `-s` | SECTOR_SIZE | 扇区大小 (默认值=512) | | `-i` | IMAGE | 原始镜像文件 | | `-f` | FILE | 提取的 $MFT 文件 | | `-t` | raw,parsed,csv | 导出类型。默认值=parsed | | `-e` | EXPORT_FILE | 目标文件名。如果省略,则使用 stdout。现有文件将被覆盖。 | | `-q` | INUMS | 单个 inum 或 inum 范围。范围包含边界。例如:0-11,24-34,40。也可以使用:all。默认值=all | #### extractdata 提取单个条目的数据,本质上是返回该文件 用法: ```mftparse.py extractdata [-h] [-o OFFSET_SECTORS | -O OFFSET_BYTES] [-s SECTOR_SIZE] [-i IMAGE | -f FILE] [-q INUM] [-a DATA_STREAM] [-e OUTPUT_FILE]``` | 可选参数 | 选项 | 描述 | | ------------------ | ------ | ----------- | | `-h`, `--help` | None | 显示此帮助信息并退出 | | `-o` | OFFSET_SECTORS | 镜像中文件系统的偏移量(以扇区为单位) | | `-O` | OFFSET_BYTES | 镜像中文件系统的偏移量(以字节为单位) | | `-s` | SECTOR_SIZE | 扇区大小 (默认值=512) | | `-i` | IMAGE | 原始镜像文件 | | `-f` | FILE | 提取的 $MFT 文件 | | `-q` | INUM | 要提取数据的条目的 Inode 编号 | | `-a` | DATA_STREAM | (备用) 数据流。默认值=0 | | `-e` | OUTPUT_FILE | 将包含数据的文件名 | #### 统计 显示有关此 NTFS 的统计信息 用法: ```mftparse.py statistics [-h] [-o OFFSET_SECTORS | -O OFFSET_BYTES] [-s SECTOR_SIZE] [-i IMAGE | -f FILE]``` | 可选参数 | 选项 | 描述 | | ------------------ | ------ | ----------- | | `-h`, `--help` | None | 显示此帮助信息并退出 | | `-o` | OFFSET_SECTORS | 镜像中文件系统的偏移量(以扇区为单位) | | `-O` | OFFSET_BYTES | 镜像中文件系统的偏移量(以字节为单位) | | `-s` | SECTOR_SIZE | 扇区大小 (默认值=512) | | `-i` | IMAGE | 原始镜像文件 | | `-f` | FILE | 提取的 $MFT 文件 | ### logfileparse.py 用法:./logfileparse.py [-h] [-f FILE_NAME] [-e EXPORT_FILE] [-t {parsed,csv,transaction,parsedlsns}] [-d DUMP_DIR] [-n NUM] [-q LSNS] [-p] | 可选参数 | 选项 | 描述 | | ------------------ | ------ | ----------- | | `-h`, `--help` | None | 显示此帮助信息并退出 | | `-f` | FILE_NAME | 提取的 $MFT $LogFile 条目的 $DATA 属性 | | `-e` | EXPORT_FILE | 目标文件名。如果省略,则使用 stdout。现有文件将被覆盖。 | | `-t` | parsed,csv,transaction,parsedlsns | 导出类型。默认值=parsed | | `-d` | DUMP_DIR | 用于转储未完整解析页面的目录。目录中的输出为 4096 字节的完整二进制 RCRD 页面。默认值='./errorpages' | | `-n` | NUM | 要解析的页面数。如果省略,则解析所有页面 | | `-q` | LSNS | 选择要输出的 LSN(已解析)。以逗号分隔。 | | `-p` | None | 将程序置于性能测量模式 | ### usnjrnlparse.py 用法: ```usnjrnlparse.py [-h] [-f FILE] [-e OUTPUT] [-n NUMBER]``` | 可选参数 | 选项 | 描述 | | ------------------ | ------ | ----------- | | `-h`, `--help` | None | 显示此帮助信息并退出 | | `-f` | FILE | 包含 UsnJrnl 的文件 | | `-e` | OUTPUT | 输出文件 | | `-n` | NUMBER | 要解析的记录数。如果省略,将解析所有记录。 | ### proof-of-concept.py 该程序结合了单独的解析器并生成一个简单的概述, 说明了结合不同输出时可以达到的可能性。 用法: ```proof-of-concept.py [-h] [-o OFFSET_SECTORS | -O OFFSET_BYTES] [-s SECTOR_SIZE] -i IMAGE [-d DUMP_DIR] [-q INUM] [--deleted]``` | 可选参数 | 选项 | 描述 | | ------------------ | ------ | ----------- | | `-h`, `--help` | None | 显示此帮助信息并退出 | | `-o` | OFFSET_SECTORS | 镜像中文件系统的偏移量(以扇区为单位) | | `-O` | OFFSET_BYTES | 镜像中文件系统的偏移量(以字节为单位) | | `-s` | SECTOR_SIZE | 扇区大小 (默认值=512) | | `-i` | IMAGE | 原始镜像文件 | | `-d` | DUMP_DIR | 用于转储未完整解析页面的目录。目录中的输出为 4096 字节的完整二进制 RCRD 页面。默认值='./errorpages' | | `-q` | INUM | 要显示数据的 MFT 条目编号 (inum) | | `--deleted` | 仅显示 MFT 条目的已删除数据 | ## 使用示例 使用示例磁盘进行完整运行: ```./full_run.sh disk_image/disk.raw 128 output``` 生成 MFT 的人类可读解析输出: ```./mftparse.py export -i disk_image/disk.raw -o 128 -t parsed -e output/mft.parsed``` 从 MFT 中提取 LogFile: ```./mftparse.py extractdata -i disk_image/disk.raw -o 128 -q 2 -e output/logfile.raw``` 将原始 LogFile 数据解析为 .csv 文件: ```./logfileparse.py -f output/logfile.raw -t csv -e output/logfile.csv``` 将 proof-of-concept 程序的输出通过管道传输到 *less*: ```./proof-of-concept.py -o 128 -i disk_image/disk.raw | less ``` 对于特定的 inum: ```./proof-of-concept.py -o 128 -i disk_image/disk.raw -q 40 | less``` 对于特定的 inum,仅显示历史信息: ```./proof-of-concept.py -o 128 -i disk_image/disk.raw -q 40 --deleted | less``` ## 项目结构 仓库中目录的简要说明。 * **disk_image** 包含一个 10.5 MB 的示例 NTFS 磁盘,包括 MBR。 * **errorpages** 将包含 LogFile 解析器运行期间所有无效和错误页面的目录。 * **ntfs_parse** 包含框架结构的目录。 * **output** 示例目录,包含 *disk_image* 目录中示例磁盘的提取文件。 ## 创建代码图表 要自动从 Python3 代码创建类图,请执行以下操作: 1. ```apt-get install pylint3``` 2. ```pyreverse3 ntfs_parse/``` 3. ```dot -Tsvg classes_No_Name.dot -o classes.svg``` 或者对于 Debian Jessie, 8.2 1. ```apt-get install python3-pip``` 2. ```pip3 install pylint``` 3. ```pyreverse ntfs_parse/``` 4. ```dot -Tsvg classes_No_Name.dot -o classes.svg``` 该 svg 文件可以在 Firefox 中打开
标签:Cutter, HTTPS请求, HTTP工具, LogFile, MFT, MFT解析器, NTFS, Python, The Sleuth Kit, UsnJrnl, USN日志, Windows取证, 扇区偏移, 数字取证, 数据恢复, 文件系统解析, 无后门, 日志关联, 磁盘映像分析, 磁盘结构, 网络信息收集, 自动化脚本, 证据提取, 逆向工具