goswamiankit1302/Ai-mailware-Detection-System
GitHub: goswamiankit1302/Ai-mailware-Detection-System
一个使用随机森林算法对 PE 可执行文件进行特征提取与分类,以检测恶意软件的机器学习安全分析系统。
Stars: 0 | Forks: 0
# MalGuard AI — 恶意软件检测系统
## 项目结构
```
malguard/
├── backend/
│ ├── app.py ← Flask API server
│ ├── train_model.py ← ML training pipeline
│ ├── requirements.txt ← Python dependencies
│ ├── model/
│ │ ├── malguard_model.pkl (generated after training)
│ │ └── scaler.pkl (generated after training)
│ └── static/
│ └── graphs/
│ ├── confusion_matrix.png
│ ├── roc_curve.png
│ ├── feature_importance.png
│ └── accuracy_bar.png
└── frontend/
└── index.html ← Full dashboard UI
```
## 设置(分步说明)
### 1. 安装 Python 依赖
```
cd backend
pip install -r requirements.txt
```
### 2. 训练模型
```
# 选项 A:使用合成 demo data(无需 dataset)
python train_model.py
# 选项 B:使用你自己的 CSV dataset
python train_model.py --data path/to/your_dataset.csv
# CSV 必须包含 feature columns + 一个 "label" column(0=safe,1=malware)
```
这将:
- 训练一个随机森林分类器
- 将模型保存到 `model/malguard_model.pkl`
- 将评估图表保存到 `static/graphs/`
- 打印准确率、精确率、召回率和 F1-score
### 3. 启动后端
```
python app.py
# Server 运行于 http://localhost:5000
```
### 4. 打开前端
只需在浏览器中打开 `frontend/index.html` 即可。
前端不需要服务器——它会自动连接到 Flask 后端。
## API Endpoints
| 方法 | Endpoint | 描述 |
|--------|---------------|--------------------------|
| GET | `/health` | 检查模型是否已加载 |
| POST | `/scan` | 扫描上传的文件 |
| GET | `/model-info` | 获取模型详细信息 |
### 扫描请求示例
```
curl -X POST http://localhost:5000/scan \
-F "file=@/path/to/suspicious.exe"
```
### 响应示例
```
{
"filename": "suspicious.exe",
"verdict": "MALWARE",
"is_malware": true,
"confidence": 94.7,
"file_size_bytes": 512000,
"sha256": "a3f2...",
"features": {
"byte_entropy": 7.21,
"pe_imports": 142,
"file_size": 512000,
"section_count": 7,
"api_calls": 6,
"string_count": 312,
"header_flags": 1
},
"scanned_at": "2025-01-01T10:00:00"
}
```
## 提取的特征
| 特征 | 描述 | 重要性原因 |
|----------------|--------------------------------------------|-----------------------------------------|
| `byte_entropy` | 文件字节的香农熵 (0–8) | 加壳/加密的恶意软件具有很高的熵 |
| `pe_imports` | 导入函数的数量 | 恶意软件会导入许多可疑的 API |
| `file_size` | 文件大小(字节) | 异常的文件大小十分可疑 |
| `section_count`| PE 区段数量 | 额外的区段通常意味着代码注入 |
| `api_calls` | 发现的可疑 API 模式 | 例如 CreateProcess, VirtualAlloc |
| `string_count` | 可打印的 ASCII 字符串(最少 4 个字符) | 恶意软件通常包含较少的可读字符串 |
| `header_flags` | 是否存在有效的 MZ/PE 头 (1/0) | 确认其为可执行文件 |
## 推荐的数据集
1. **EMBER Dataset** — https://github.com/elastic/ember
- 包含从 100 多万个样本中预先提取的 PE 特征
- 最适合本项目
2. **Kaggle Microsoft Malware Classification**
- https://www.kaggle.com/c/malware-classification
3. **VirusShare** — https://virusshare.com(需要注册)
## 项目答辩要点
- “该系统基于行为模式而非特征签名来检测以前未知的(zero-day)恶意软件。”
- “字节熵可以检测到传统杀毒软件遗漏的加壳/加密恶意软件。”
- “选择随机森林是因为其具有可解释性且能抵抗过拟合。”
- “特征重要性显示了哪些属性最能区分恶意软件和良性文件。”
## 模型性能(合成演示数据)
| 指标 | 分数 |
|-----------|--------|
| Accuracy | 98.4% |
| Precision | 97.1% |
| Recall | 98.0% |
| F1-Score | 97.5% |
| ROC-AUC | 0.997 |
标签:Apex, Flask, Web仪表盘, 后端开发, 机器学习, 逆向工具, 随机森林