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取证, 扇区偏移, 数字取证, 数据恢复, 文件系统解析, 无后门, 日志关联, 磁盘映像分析, 磁盘结构, 网络信息收集, 自动化脚本, 证据提取, 逆向工具