BlackNinjaKR/Forensic-Acquisition-Toolkit
GitHub: BlackNinjaKR/Forensic-Acquisition-Toolkit
一款跨平台模块化数字取证工具,支持磁盘位流镜像和 Android 逻辑采集,具备完整的完整性验证与监管链日志功能。
Stars: 1 | Forks: 0
# 取证获取工具包
### 磁盘位流镜像 + Android 逻辑 (ADB) 采集
一个跨平台的取证获取框架,支持:
- **物理磁盘位流镜像 (.dd)**
- **通过 ADB 进行 Android 逻辑获取**
- **结构化日志、元数据捕获和 SHA-256 完整性验证**
**许可证:** MIT | **平台:** Windows, Linux, macOS | **目标用户**:数字取证学生、研究人员、事件响应人员
## 目录
- [概述](#overview)
- [主要功能](#key-features)
- [系统要求](#system-requirements)
- [安装](#installation)
- [使用说明](#usage)
- [工作原理](#how-it-works)
- [取证完整性](#forensic-integrity)
- [法律与合规](#legal--compliance)
- [架构](#architecture)
- [故障排除](#troubleshooting)
- [贡献指南](#contributing)
## 概述
**Forensic Acquisition Toolkit** 是一款教育性质的数字取证获取工具,专为以下人员设计:
- **执法人员** - 符合监管链要求的证据收集
- **事件响应人员** - 快速获取受损系统
- **数字调查员** - 法庭可采信的取证镜像
- **安全研究人员** - 低成本、便携式镜像解决方案
本项目提供了一个模块化的获取框架,专为数字取证领域的研究和教育用途而设计。
它支持两种获取模式:
- 物理磁盘镜像 (位流 Bitstream)
- Android 逻辑采集 (基于 ADB)
该框架强调:
- 透明的日志记录
- 加密完整性验证 (SHA-256)
- 可复现性
- 明确的获取模式文档
它不能替代经过验证的商业取证套件,而是作为一个研究级、低成本的获取平台。
### 为什么使用这个工具?
| 特性 | 优势 |
|---------|---------|
| **原始扇区级镜像** | 捕获已删除数据、松散空间 (Slack Space)、未分配扇区 |
| **SHA-256 哈希验证** | 证明镜像完整性并检测篡改 |
| **跨平台支持** | Windows, Linux, macOS 兼容 |
| **监管链日志** | 法庭可采信的审计追踪 |
| **设备元数据收集** | 用于证据文档的硬件识别 |
| **便携且低成本** | 可在 Raspberry Pi 或标准计算机上运行 |
| **支持写保护器** | 设计用于集成硬件写保护器 |
## 主要功能
### 1. **取证镜像获取**
- 对存储设备执行原始的、逐扇区镜像
- 读取整个设备,包括:
- 所有磁盘部分(已分配 + 未分配)
- 已删除文件和恢复残留物
- 分区表和隐藏分区
- 松散空间 (Slack Space) 和系统元数据
- 可配置的块大小(默认:1 MB)
- 实时进度报告
### 2. **加密哈希验证**
- 计算以下对象的 SHA-256 哈希:
- 源设备(镜像前)
- 镜像文件(镜像后)
- 自动哈希比对
- 检测损坏或篡改
- 法庭可采信的完整性证明
### 3. **监管链日志**
- 带有时间戳的获取日志
- 操作员身份追踪
- 设备识别
- 获取参数文档
- 自动日志隔离和归档
### 4. **设备元数据收集**
- **Linux**: `udevadm` + `lsblk` 集成
- **Windows**: WMI (Windows Management Instrumentation) 查询
- **macOS**: `system_profiler` 集成
- 捕获:
- 设备制造商和型号
- 序列号(唯一设备 ID)
- 固件版本
- 接口类型 (USB/SATA/NVMe)
- 存储容量
### 5. **跨平台兼容性**
- **Windows**: 使用原始设备路径 (`\\.\E:`)
- **Linux**: 使用 `/dev/` 设备节点
- **macOS**: 使用原始磁盘设备 (`/dev/rdiskX`)
- 自动 OS 检测和路径解析
### 6. **专业元数据存储**
- 主机信息(主机名、用户名、OS 详情)
- 获取时间线(开始、结束、持续时间)
- 设备信息(大小、挂载点)
- 系统能力(处理器、机器类型)
- 存储统计(前/后可用空间)
## 系统要求
### 最低要求
- **OS**: Windows 10+, Ubuntu 18.04+, macOS 10.14+
- **Python**: 3.7 或更高版本
- **RAM**: 2 GB
- **磁盘空间**: 最少 10 GB 可用空间(取决于设备大小 + 5 GB 缓冲)
- **权限**: 管理员 (Windows) 或 Root (Linux/macOS)
### 可选硬件
- **写保护器**: 硬件写保护器设备(建议用于取证可靠性)
- **外置 SSD**: 用于高速镜像存储
- **Raspberry Pi**: 用于便携式获取工作站
## 安装
### 步骤 1:克隆仓库
```
git clone https://github.com/BlackNinjaKR/Pi-Forensic-Imager.git
cd Pi-Forensic-Imager
```
### 步骤 2:安装依赖
```
pip install -r requirements.txt
```
### 步骤 3:验证安装
```
python -c "import psutil, hashlib, logging; print('Dependencies OK')"
```
### 步骤 4:验证平台工具
**Linux/macOS:**
```
which udevadm lsblk system_profiler # Check if tools exist
```
**Windows:**
```
wmic os get version # Check WMIC availability
```
## 使用说明
### 获取模式
#### 1. 物理磁盘位流镜像
对存储设备执行逐扇区获取。
**功能**
- 原始设备访问
- 顺序块读取(可配置块大小)
- SHA-256 哈希
- 元数据文件生成
- 带时间戳的监管链日志
- 跨平台设备处理
**捕获内容**
- 已分配和未分配扇区
- 已删除数据残留
- 分区表
- 松散空间 (Slack Space)
- 隐藏分区
**输出产物**
```
image_YYYYMMDD_HHMMSS.dd
image_YYYYMMDD_HHMMSS.dd.meta
Logs/YYYYMMDD_HHMMSS_forensic_imager.log
```
**完整性模型**
- 镜像文件的 SHA-256 哈希
- 可选设备哈希验证
- 记录获取持续时间和大小
- 完整的获取元数据
#### 2. Android 逻辑获取 (ADB 模式)
使用 Android Debug Bridge (ADB) 从 Android 设备执行逻辑数据收集。
除非具有 root 级别访问权限,否则这不是物理获取。
**要求**
- adb 已安装并在 PATH 中可用
- 设备上已启用 USB 调试
- 设备已授权
- 设备已解锁(对于大多数操作)
**Android 采集模块**
`extract.py` – 完整逻辑采集
执行扩展的基于 ADB 的获取。
**收集的产物**
| 类别 | 示例命令 |
|----------|------------------|
| 系统属性 | `adb shell getprop` |
| 电池 | `dumpsys battery` |
| CPU | `dumpsys cpuinfo` |
| 连接性 | `dumpsys connectivity, ip addr` |
| 使用统计 | `dumpsys usagestats` |
| 已安装应用 | `pm list packages -f` |
| 包详情 | `dumpsys package ` |
| 服务与活动 | `dumpsys activity` |
| 账户 | `dumpsys account` |
| 联系人 | `content query content://contacts/phones/` |
| 通话记录 | `content query content://call_log/calls` |
| 短信 | `content query content://sms/` |
| 日志 | `logcat -d -t 1000` |
| 完整 Bugreport | `bugreport` / `bugreportz` |
| 媒体文件 | `adb pull /sdcard/DCIM` |
**输出布局**
```
ADB_Report_YYYYMMDD_HHMMSS/
device_info.txt
dumpsys_battery.txt
packages.txt
logcat_snapshot.txt
pulled_files/
summary.txt
```
由于大小和运行时间原因,Bugreport 在后台线程中执行。
`dump_adb.py` – 快速取证采集
轻量级、快速的 Android 状态捕获。
专为快速取证 (Triage) 场景设计。
**收集的数据**
- `getprop`
- `dumpsys battery`
- `dumpsys cpuinfo`
- `pm list packages`
- 短 logcat 快照
- 选定的 content 查询(如果允许)
不会等待完整的 bugreport。
### 使用示例
**磁盘镜像**
```
python Notebook/Forensic_Imager.ipynb
# 或
jupyter notebook Notebook/Forensic_Imager.ipynb
```
**Android 完整提取**
```
python extract.py --device --output ./ADB_Report
```
**Android 快速取证模式**
```
python dump_adb.py --device --output ./ADB_Report
```
## 工作原理
### 获取流程
```
┌─────────────────────────────────────────────────────┐
│ 1. Device Detection (psutil.disk_partitions) │
│ - Enumerate all connected storage devices │
│ - Filter out system partitions (C:\\, /, etc.) │
└──────────────────┬──────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ 2. User Selection & Validation │
│ - User chooses target device │
│ - Verify sufficient free space │
│ - Check write permissions │
└──────────────────┬──────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ 3. Raw Device Path Resolution │
│ - Windows: \\\\.\\E: (raw device path) │
│ - Linux: /dev/sdb1 (via df command) │
│ - macOS: /dev/rdisk2s1 (raw disk) │
└──────────────────┬──────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ 4. Sector-by-Sector Reading (1 MB chunks) │
│ - Open raw device in binary mode │
│ - Read 1 MB blocks sequentially │
│ - Write each block to image file │
│ - Display live progress │
└──────────────────┬──────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ 5. Hash Computation (SHA-256) │
│ - Device hash (sector-by-sector read) │
│ - Image hash (file verification) │
│ - Compare for integrity proof │
└──────────────────┬──────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────┐
│ 6. Metadata & Logging │
│ - Device info (manufacturer, serial, model) │
│ - Acquisition metadata (.meta file) │
│ - Chain-of-custody logs │
│ - Timestamped audit trail │
└─────────────────────────────────────────────────────┘
```
### 文件输出
镜像完成后,将生成三个文件:
1. **`.dd` 镜像文件** (取证镜像)
- 设备的原始逐扇区副本
- 无压缩,无修改
- 可使用取证工具(EnCase, FTK 等)进行分析
2. **`.dd.meta` 元数据文件** (获取记录)
Acquisition Tool: PyForensic Imager v1.0
Hostname: investigator-pc
Username: admin
Device Name: /dev/sdb
Device Size (Bytes): 15728640000
SHA256: a3f7e9d2c4b1e8f6...
Acquisition Start: 20251129_143022
Acquisition Duration (secs): 450.5
...
3. **`.log` 文件** (监管链)
- 带时间戳的操作日志
- 法庭可采信
- 示例:`Logs/20251129_143022_forensic_imager.log`
## 取证完整性
### 哈希验证流程
```
# 设备 hash (逐扇区读取)
Device SHA-256: a3f7e9d2c4b1e8f6...
# 镜像文件 hash
Image SHA-256: a3f7e9d2c4b1e8f6...
# 比较
Match? ✓ YES → Image is an exact copy of the source device
✗ NO → Image is corrupted or incompletely acquired
```
### 哈希验证证明了什么
| 场景 | 哈希匹配 | 结论 |
|----------|-----------|------------|
| 成功镜像 | ✓ 是 | 镜像是设备的精确副本 |
| 数据损坏 | ✗ 否 | 检测到镜像错误 |
| 篡改 | ✗ 否 | 检测到证据污染 |
| 获取不完整 | ✗ 否 | 设备读取中断 |
### 为什么这很重要
根据 **Daubert 标准**:
1. **哈希验证在数字取证中被科学接受**
2. **它是可复现的** - 同一设备 + 同一过程 = 同一哈希
3. **法庭将其认可为完整性证明** - 法庭广泛接受加密哈希验证作为标准的取证实践,但其可靠性仍可在证词中接受审查。哈希支持完整性主张,但并不能使证据免受法律审查。
4. **在许多司法管辖区,这是法律要求** 用于证据的可采性
## 法律与合规
### 监管链要求
此工具通过以下方式维护取证完整性:
| 要求 | 实现 |
|-------------|-----------------|
| **时间戳日志** | 每个操作都记录有精确的时间戳 |
| **操作员身份** | 用户名、主机名和用户信息 |
| **设备识别** | 序列号、型号、制造商 |
| **完整性证明** | SHA-256 哈希验证 |
| **审计追踪** | `.log` 文件中的完整操作历史 |
| **元数据存储** | 包含所有获取详细信息的独立 `.meta` 文件 |
### 法律原则
此工具遵守以下取证标准:
1. **真实性与完整性** - 哈希验证证明无修改
2. **可复现性** - 同一设备/程序 = 同一结果
3. **证据处理** - 在副本上分析,而非原件
4. **文档记录** - 用于法庭展示的完整日志
5. **监管链** - 可追溯的所有权和处理过程
6. **写保护器支持** - 兼容硬件写保护器
### 适用标准
- **SWGDE** (数字证据科学工作组)
- **NIST SP 800-86** (整合取证技术指南)
- **ISO/IEC 27037** (数字证据)
- **Daubert 标准** (美国法庭证据的可采性)
## 架构
### 系统组件
```
┌────────────────────────────────────────────────────────┐
│ Forensic_Imager.ipynb (Main) │
│ - Device detection & listing │
│ - User interface & validation │
│ - Imaging orchestration │
└────────────────────────────────────────────────────────┘
↓ ↓ ↓
┌────────┐ ┌─────────┐ ┌─────────────┐
│ image_ │ │ sha256_ │ │ write_ │
│ device │ │ file() │ │ metadata() │
└────────┘ └─────────┘ └─────────────┘
↓ ↓ ↓
┌─────────────────────────────────────────────────┐
│ Cross-Platform OS Abstraction Layer │
│ - Windows: Raw device paths (\\.\\E:) │
│ - Linux: /dev/ nodes + df command │
│ - macOS: /dev/rdisk + system_profiler │
└─────────────────────────────────────────────────┘
↓
┌──────────────────────────────────────┐
│ Logging & Audit Trail │
│ - Timestamped operation logs │
│ - Chain-of-custody records │
│ - Error handling & reporting │
└──────────────────────────────────────┘
```
### 模块细分
| 模块 | 用途 |
|--------|---------|
| `Forensic_Imager.ipynb` | 主镜像工作流 |
| `device_metadata.py` | 特定于 OS 的元数据收集 |
| `Logs/` | 监管链审计追踪 |
### 关键函数
```
# 设备发现
list_all_devices() # Enumerate connected storage
# 设备信息
get_raw_device_path(mount) # Resolve hardware device path
get_device_size(device) # Calculate device capacity
get_device_metadata(device) # Collect hardware info
# 成像 & Hashing
image_device(mount, output) # Perform sector imaging
sha256_file(path) # Hash file
sha256_device(path) # Hash device
# 验证 & 日志记录
verify_image_integrity(mount, image) # Compare hashes
write_metadata(path, info) # Store acquisition metadata
```
## 故障排除
### 问题:Linux/macOS 上 "Permission denied" (权限被拒绝)
**原因:** 访问原始设备需要 root/管理员权限
**解决方案:**
```
sudo python Notebook/Forensic_Imager.ipynb
```
或者为特定命令配置 `sudoers`:
```
sudo visudo
# 添加: %forensics ALL=(ALL) NOPASSWD: /usr/bin/python3
```
### 问题:找不到可移动设备
**原因:** 设备未挂载或未被检测到
**解决方案:**
```
# Linux: 检查已连接设备
lsblk
df -h
# Windows: 在磁盘管理中检查
diskpart
> list disk
# macOS: 在系统信息中检查
system_profiler SPUSBDataType
```
### 问题:磁盘空间不足
**原因:** 可用空间不足(需要 device_size + 5GB 缓冲)
**解决方案:**
1. 释放输出目录的空间
2. 使用具有更大容量的外置 SSD
3. 减少并发操作的数量
### 问题:哈希验证失败 (不匹配)
**原因:** 镜像错误、设备断开连接或损坏
**解决方案:**
1. 查设备连接
2. 验证在镜像期间未对设备进行写入操作
3. 使用硬件写保护器
4. 在不同的 USB 端口上重试镜像
5. 使用 `SMART` 诊断测试设备
```
# Linux: 检查设备健康状况
sudo smartctl -a /dev/sdb
# Windows: 检查磁盘状态
wmic logicaldisk get name,size,freespace
```
### 问题:镜像速度慢
**原因:** USB 2.0 设备、系统负载或存储缓慢
**解决方案:**
1. 使用 USB 3.0/3.1 设备和端口
2. 关闭不必要的应用程序
3. 减少系统后台进程
4. 使用外置 SSD 进行输出
5. 检查设备是否有坏道
## 贡献指南
### 指引
1. **Fork** 本仓库
2. **创建** 一个特性分支 (`git checkout -b feature/improvement`)
3. **进行更改** 并附上清晰的提交信息
4. 在 Windows, Linux 和 macOS 上**测试**
5. **提交** Pull Request
### 开发设置
```
# 克隆并以开发模式安装
git clone https://github.com/BlackNinjaKR/Pi-Forensic-Imager.git
cd Pi-Forensic-Imager
pip install -r requirements.txt
```
### 测试
```
# 使用测试设备运行 (需要 setup)
python Notebook/Forensic_Imager.ipynb
```
### 报告问题
报告 Bug 时,请包含:
- OS 和版本
- Python 版本
- 设备类型(USB 驱动器、外置 SSD 等)
- 错误信息和日志
- 重现步骤
## 许可证
MIT 许可证 - 详见 LICENSE 文件
## 免责声明
此工具专为授权人员进行合法的数字取证调查而设计。用户必须遵守其所在司法管辖区适用的所有法律和法规。未经授权访问设备是非法的。
**监管链合规性:** 此工具提供日志记录和元数据收集。但是,用户有责任根据法律要求维护适当的监管链程序和文档。
## 参考资料
- [NIST SP 800-86: 将取证技术整合到事件响应中的指南](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-86.pdf)
- [ISO/IEC 27037:2012 数字证据识别、收集、获取和保存指南](https://www.iso.org/standard/44381.html)
- [Daubert 标准 - 证据可采性](https://en.wikipedia.org/wiki/Daubert_standard)
**有问题?发现问题?** 创建一个 GitHub issue。
标签:ADB提取, Android取证, DD镜像, HTTP工具, Python, Python安全工具, SHA-256, 取证完整性, 取证工具箱, 司法鉴定, 哈希校验, 域渗透, 库, 应急响应, 数字取证, 数据固定, 数据获取, 无后门, 比特流成像, 电子数据取证, 磁盘镜像, 网络信息收集, 网络犯罪调查, 自动化脚本, 逆向工具, 逻辑取证, 链式保管