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, 十六进制分析, 原始镜像分析, 坏道处理, 子域名变形, 存储安全, 恶意擦除检测, 扇区统计, 数字取证, 数字取证, 数据恢复, 数据擦除验证, 数据残留分析, 文件系统底层, 无后门, 物理磁盘读取, 磁盘分析, 网络安全, 自动化脚本, 自动化脚本, 逆向工具, 隐私保护