DATALAB-PL/Statystyka-wzorcow-na-dysku
GitHub: DATALAB-PL/Statystyka-wzorcow-na-dysku
一款用于磁盘扇区内容统计分析的取证工具,通过扫描原始扇区识别填充模式与实际数据,快速评估磁盘数据分布及残留情况。
Stars: 0 | Forks: 0
# 磁盘扇区模式统计分析仪
这是一款用于对硬盘扇区内容进行统计分析的取证工具。它会扫描指定 LBA 范围内的原始扇区,并根据内容对其进行分类——让您能够快速评估在黑客攻击、擦除 或损坏后磁盘上剩余的数据量。
提供两个版本:
- **CLI** (`disk_sector_stats.py`) — 命令行版本,非常适合脚本编写和自动化
- **GUI** (`disk_sector_stats_gui.py`) — 图形界面版本,带有深色主题、进度条和实时统计预览
## 问题背景
在遭受黑客攻击或执行擦除操作后,磁盘可能看起来是“空的”,但在十六进制编辑器中手动滚动查看,会发现大片零值块之间分散着数据片段。我们需要自动化的统计数据来回答以下问题:
- 磁盘中有百分之多少包含实际数据?
- 填充为零 (0x00) 或一 (0xFF) 的扇区占用多少空间?
- 磁盘中最大的连续数据块位于何处?
- 数据与空白区域的比例是多少?
## 功能特性
- **直接从物理磁盘读取** (`\\.\PhysicalDriveN`) 或从磁盘镜像 (`.dd`, `.img`, `.raw`) 读取
- **扇区分类** — 检查每个扇区是否匹配特定模式(例如全 `0x00`、全 `0xFF`)或包含数据
- **可配置模式** — 默认为 `0x00` 和 `0xFF`,但可以添加任意模式(例如 `0xAA`、`0x55`、`0xDEADBEEF`)
- **连续区域分析** — 识别最大的数据块和空白区域
- **进度条** 显示预计剩余时间 (ETA) 和读取速度
- **读取错误处理** — 遇到坏道时切换为逐扇区读取
- **保存报告到文件** (`--output`)
- **无外部依赖** — 纯 Python 3,仅使用标准库
## GUI 版本
图形界面版本 (`disk_sector_stats_gui.py`) 提供:
- **深色界面** (dark theme),状态以颜色区分
- **实时统计预览** — 分析过程中实时更新扇区计数器
- **进度条** 显示速度和 ETA
- **停止按钮** — 随时安全中断分析
- **列出磁盘按钮** — 显示可用的物理磁盘 (Windows)
- **镜像浏览器** — `.dd`/`.img`/`.raw` 文件选择对话框
- **保存报告** — 分析结束后保存为文本文件
- **输入验证** — 开始前进行数据校验
```
python disk_sector_stats_gui.py
```
## 系统要求
- Python 3.6+ (含 tkinter — Windows 上默认包含)
- **管理员权限** (Windows) 或 root (Linux) 以读取物理磁盘
- 无需外部库
## 安装
```
git clone
cd "Statystyka wzorców na dysku"
```
无需安装 — 直接作为 Python 脚本运行。
## 用法
### 基本用法
```
# 分析磁盘前 1M 个扇区(默认模式:0x00, 0xFF)
python disk_sector_stats.py \\.\PhysicalDrive1 0 1000000
# 分析整个 500GB 磁盘(976 562 500 个 512B 扇区)
python disk_sector_stats.py \\.\PhysicalDrive1 0 976562499
```
### 添加额外模式
```
# 同时搜索填充了 0xAA, 0x55 的扇区(secure erase 后常见)
python disk_sector_stats.py \\.\PhysicalDrive1 0 1000000 --patterns 0x00 0xFF 0xAA 0x55
# 搜索扇区内重复的多字节模式
python disk_sector_stats.py \\.\PhysicalDrive1 0 1000000 --patterns 0x00 0xFF 0xDEADBEEF
```
### 分析磁盘镜像
```
python disk_sector_stats.py disk_image.dd 0 2048
python disk_sector_stats.py backup.raw 0 500000 --sector-size 4096
```
### 保存和性能选项
```
# 保存报告到文件
python disk_sector_stats.py \\.\PhysicalDrive1 0 1000000 --output raport.txt
# 跳过区域分析(更快,占用更少 RAM)
python disk_sector_stats.py \\.\PhysicalDrive1 0 1000000 --no-regions
# 更大的 chunk = 更快的读取速度(默认 2048 扇区 = 1MB)
python disk_sector_stats.py \\.\PhysicalDrive1 0 1000000 --chunk-size 8192
```
## 识别磁盘编号 (Windows)
```
wmic diskdrive list brief
wmic diskdrive get name,size,model
```
或在 PowerShell 中:
```
Get-PhysicalDisk | Format-Table DeviceId, FriendlyName, Size, MediaType
```
## 示例报告
```
==============================================================================
DISK SECTOR PATTERN ANALYSIS REPORT
==============================================================================
Source: \\.\PhysicalDrive1
LBA range: 0 — 999,999
Sector size: 512 bytes
Total: 1,000,000 sectors (488.28 MB)
Scan time: 45.3s
Avg speed: 10.78 MB/s
------------------------------------------------------------------------------
SECTOR CLASSIFICATION
------------------------------------------------------------------------------
Pattern Count Size Percentage
————————————————————— ——————————————— ———————————— ————————————
DATA 142,857 69.75 MB 14.29% <-- USEFUL DATA
0X00 714,286 348.77 MB 71.43%
0XFF 142,857 69.75 MB 14.29%
————————————————————— ——————————————— ———————————— ————————————
TOTAL 1,000,000 488.28 MB 100.00%
------------------------------------------------------------------------------
SUMMARY
------------------------------------------------------------------------------
Sectors with useful data: 142,857 (14.29%)
Empty/pattern sectors: 857,143 (85.71%)
Ratio data:empty: 1 : 6.0
------------------------------------------------------------------------------
TOP 30 LARGEST CONTIGUOUS REGIONS
------------------------------------------------------------------------------
# Type Start LBA End LBA Sectors Size
———— ——————————————— ——————————————— ——————————————— ———————————— ————————————
1 0X00 0 500,000 500,001 244.14 MB
2 DATA 500,001 642,857 142,857 69.75 MB
3 0XFF 642,858 785,714 142,857 69.75 MB
4 0X00 785,715 999,999 214,285 104.63 MB
```
## 参数说明
| 参数 | 默认值 | 描述 |
|---|---|---|
| `source` | (必填) | 磁盘路径 (`\\.\PhysicalDrive1`) 或镜像文件路径 |
| `start_lba` | (必填) | 要分析的起始 LBA 扇区(含) |
| `end_lba` | (必填) | 要分析的结束 LBA 扇区(含) |
| `--sector-size` | `512` | 扇区大小(字节) |
| `--patterns` | `0x00 0xFF` | 用于检测的十六进制模式列表 |
| `--chunk-size` | `2048` | 单次读取的扇区数 |
| `--output`, `-o` | 无 | 报告输出文件路径 |
| `--no-regions` | 禁用 | 跳过连续区域分析 |
| `--top-regions` | `30` | 显示的最大区域数量 |
## 工作原理
1. 以只读二进制模式打开磁盘/镜像
2. 定位到 `start_lba * sector_size` 位置
3. 分块读取数据(默认 1MB)以提高性能
4. 将每个 512 字节的扇区与模式进行比对:
- 如果整个扇区 = 重复的模式 → 归类为该模式
- 否则 → 归类为 `DATA`
5. 跟踪相同类型的连续区域
6. 生成包含统计信息和区域映射的报告
## 安全性
- 程序以**只读**模式 (`"rb"`) 打开磁盘 — 不会修改任何数据
- 无需安装额外的驱动程序
- 需要管理员权限运行仅是因为 Windows 对 raw disk access 有此要求
## 许可证
MIT
标签:GUI应用, HTTP工具, LBA寻址, Python, 十六进制分析, 原始镜像分析, 坏道处理, 子域名变形, 存储安全, 恶意擦除检测, 扇区统计, 数字取证, 数字取证, 数据恢复, 数据擦除验证, 数据残留分析, 文件系统底层, 无后门, 物理磁盘读取, 磁盘分析, 网络安全, 自动化脚本, 自动化脚本, 逆向工具, 隐私保护