mushiDiam/file-monitor
GitHub: mushiDiam/file-monitor
基于 Python 的实时文件系统监控工具,通过 magic bytes 检测和深度格式解析对落地文件进行威胁评分与自动加密隔离。
Stars: 0 | Forks: 0
# 文件监控与检查工具 🛡️
一个基于 Python 的网络安全工具,可实时监控您的文件系统,检查下载的文件是否存在威胁,并自动隔离危险内容。
本项目作为作品集开发,旨在展示实用的网络安全和逆向工程概念。
## 功能
- **实时监控** — 监视整个文件系统中的新文件
- **Magic bytes 检测** — 识别真实的文件类型,忽略扩展名
- **基于类型的检查器** — 对 PE、ELF、PDF、ZIP、TAR 和脚本进行专门分析
- **威胁评分** — 根据可疑指标对每个文件进行 0-10 的评分
- **加密隔离** — 自动加密并隔离危险文件
- **VirusTotal 集成** — 将文件哈希与 70 多个 AV 引擎进行交叉比对
- **桌面通知** — 针对可疑/危险文件发出即时警报
- **Web 仪表板** — 带有颜色编码风险等级的扫描历史记录
- **启动扫描** — 启动时扫描“下载”、“桌面”和“文档”文件夹
- **白名单** — 信任已知的安全文件以防止误报
- **CLI 报告** — 无需打开仪表板即可查看快速摘要
## 工作原理
```
New file detected
↓
Magic bytes → true MIME type
↓
Route to inspector (PE / ELF / PDF / ZIP / TAR / Script)
↓
Threat score 0-10
↓
VirusTotal hash lookup
↓
Log → Notify → Quarantine (if score ≥ 7)
```
## 项目结构
```
File_monitor/
│
├── main.py # Entry point
├── monitor.py # Filesystem watcher
├── inspector.py # MIME routing + threat scoring
├── scanner.py # Startup scan
├── logger.py # JSON logging + SHA256 hashing
├── notifier.py # Desktop notifications
├── quarantine.py # Encrypted quarantine + restore
├── virustotal.py # VirusTotal API integration
├── whitelist.py # Trusted file hash management
├── config.py # All settings
│
├── inspectors/
│ ├── pe.py # Windows PE executables
│ ├── elf.py # Linux ELF binaries
│ ├── pdf.py # PDF embedded content + JS
│ ├── zip.py # ZIP recursive inspection
│ ├── tar.py # TAR archives
│ └── script.py # Shell/Python scripts
│
├── dashboard/
│ ├── app.py # Flask web server
│ └── templates/
│ └── index.html # Web UI
│
├── logs/
│ └── scan_log.json # Scan history
│
└── quarantine/ # Encrypted dangerous files
```
## 安装说明
### 前置条件
- Python 3.10+
- Windows 或 Linux
### 安装依赖
```
pip install -r requirements.txt
```
### 仅限 Windows — libmagic
```
pip install python-magic-bin
```
## 用法
### 启动监控器
```
python main.py
```
### 启动仪表板(在单独的终端中)
```
python -m dashboard.app
```
然后打开 `http://127.0.0.1:5000`
### 不使用仪表板查看报告
```
python main.py --report
```
### 将误报加入白名单
```
from whitelist import add_to_whitelist
add_to_whitelist("sha256_hash_here", "note about file")
```
### 恢复被隔离的文件
```
from quarantine import restore_file
restore_file("quarantine/filename.quarantine", r"C:\Users\user\Downloads")
```
## 威胁评分
| 分数 | 标签 | 操作 |
|---|---|---|
| 0-3 | ✅ 安全 | 静默记录 |
| 4-6 | ⚠️ 可疑 | 记录 + 桌面通知 |
| 7-10 | 🚨 危险 | 记录 + 通知 + 加密隔离 |
### 增加分数的因素
| 发现项 | 分数 |
|---|---|
| PE 可执行文件 | +2 基础分 |
| 高危导入 (CreateRemoteThread, VirtualAllocEx 等) | 每个 +2 |
| 无导入表 — 加壳二进制文件 | +3 |
| PDF 内部包含 PE/ELF magic bytes | +5 |
| PDF 中包含 JavaScript | +3 |
| 打开 PDF 时自动执行操作 | +2 |
| PDF 中的启动操作 | +4 |
| ZIP/TAR 内部包含可执行文件 | +3 |
| 文件设置了 Setuid/Setgid 位 | +2 |
| VirusTotal 检出 | +1 到 +5 |
## 配置
编辑 `config.py` 进行自定义:
```
SCORE_DANGEROUS = 7 # quarantine threshold
VIRUSTOTAL_ENABLED = False # set True once you have an API key
VIRUSTOTAL_API_KEY = "" # get free key at virustotal.com
WATCH_PATH = "C:\\" # root path to monitor
```
## 重要说明
- **quarantine.key** — 切勿删除此文件,没有它将无法恢复被隔离的文件
- **误报** — 包含可执行文件的合法软件(例如 Blender 插件)可能会获得高分。请使用白名单。
- **VirusTotal 免费版** — 限制为每分钟 4 次请求,每天 500 次请求
- **Windows Defender** — 可能会在本工具扫描前锁定文件。监控器会自动重试 3 次。
## 技术栈
| 库 | 用途 |
|---|---|
| `watchdog` | 文件系统监控 |
| `python-magic` | Magic bytes / MIME 检测 |
| `pefile` | Windows PE 解析 |
| `pyelftools` | Linux ELF 解析 |
| `pdfminer.six` | PDF 结构解析 |
| `cryptography` | 隔离文件加密 |
| `flask` | Web 仪表板 |
| `plyer` | 桌面通知 |
| `requests` | VirusTotal API |
## 作者
Moshe Diamandi — 网络安全专业学生
标签:AMSI绕过, Ask搜索, DAST, VirusTotal, 威胁检测, 恶意软件分析, 文件监控, 文件隔离, 终端安全, 逆向工具