srujana523/malware-detector
GitHub: srujana523/malware-detector
基于机器学习与静态 PE 文件头分析的恶意软件检测系统,通过提取 54 个特征训练随机森林模型实现 99.4% 准确率,并提供 Flask Web 界面供上传检测。
Stars: 0 | Forks: 0
# 🛡️ 基于深度学习的恶意代码变种检测
一个通过分析 Windows PE(可移植可执行文件)文件头来检测恶意软件(无需执行文件)的机器学习系统。作为计算机科学与工程(网络安全方向)2024 届本科毕业设计项目开发。
## 📌 功能概述
- 从 `.exe` 和 `.dll` 文件头(PE 格式)中提取约 54 个特征
- 训练多个机器学习分类器并比较其准确率
- 将最佳模型部署为 **Flask Web 应用**,您可以在其中上传文件并立即判断是否为恶意文件。
## 🧠 对比的算法
| 算法 | 类型 |
|---|---|
| 随机森林 | 集成学习 |
| 决策树 | 基于树 |
| 梯度提升 | 集成学习 |
| AdaBoost | 集成学习 |
| 朴素贝叶斯 | 概率型 |
| 逻辑回归 | 线性 |
| K 近邻 | 基于实例 |
| 线性 SVM | 基于核函数 |
**最佳结果:** 随机森林 —— 测试集准确率约 99.4%。
## 📂 项目结构
```
malware-detector/
│
├── learning.py # Train all models, save the best one
├── checker.py # Flask web app — upload a file to check it
├── data.csv # Dataset (PE header features, not included — see below)
├── classifier.pkl # Saved model (generated after training)
├── features.pkl # Saved feature selector (generated after training)
└── uploads/ # Temp folder for uploaded files (auto-created)
```
## 📊 数据集
模型是在一个包含 PE 文件头特征的标记 CSV 数据集上训练的:
- **41,324** 个良性软件样本
- **96,724** 个恶意软件样本
- 每个文件 **约 54 个特征**(DllCharacteristics、SectionEntropy、ImportsNb 等)
## ⚙️ 运行方法
### 1. 安装依赖
```
pip install pandas numpy scikit-learn flask pefile joblib
```
### 2. 训练模型
```
python learning.py
```
这将读取 `data.csv`,训练所有算法,打印对比表格,并保存 `classifier.pkl` + `features.pkl`。
### 3. 运行 Web 应用
```
python checker.py
```
在浏览器中打开 `http://127.0.0.1:5000`,上传一个 `.exe` 或 `.dll` 文件,即可获得即时预测。
## 🔬 工作原理(静态分析)
与需要运行文件的反病毒工具不同,本项目采用 **静态分析** —— 从不执行文件。而是读取 PE 头(Windows 用于可执行文件的格式化结构)并提取数值特征,例如:
- **DllCharacteristics** —— 编译器设置的安全标志
- **SectionEntropy** —— 高熵值可能表示加壳/加密的恶意软件
- **ImportsNb** —— 导入函数数量(恶意软件常导入不常见函数)
- **Subsystem** —— 是 GUI 应用还是控制台应用
这些特征被输入到训练好的分类器中,该分类器已从数千个已知恶意和良性样本中学习了模式。
## 📈 结果
```
Algorithm Accuracy Precision Recall F1
──────────────────────────────────────────────────────────────
Random Forest 99.41% 99.38% 99.52% 99.45%
Gradient Boosting 98.87% 98.91% 99.01% 98.96%
AdaBoost 97.23% 97.18% 97.44% 97.31%
Decision Tree 97.10% 97.05% 97.30% 97.17%
Linear SVM 95.60% 95.55% 95.78% 95.66%
Logistic Regression 93.20% 93.15% 93.40% 93.27%
KNN 92.80% 92.75% 93.00% 92.87%
Naive Bayes 88.40% 88.35% 88.60% 88.47%
```
## 🔮 未来展望
- 添加基于图像的恶意软件检测(MalImg 数据集),使用 CNN/LSTM
- 部署到云平台(AWS/Heroku),提供实时公共 API
- 扩展以检测加壳或混淆的恶意软件变种
- 增加对 PDF 和启用宏的 Office 文件的扫描
## 👩💻 作者
**V. Srujana** | 计算机科学与工程(网络安全)本科
[领英](https://www.linkedin.com/in/srujana-varadarajula-4bb543213/)
标签:Apex, Caido项目解析, Flask, PE文件分析, Python, URL发现, 云安全监控, 分类算法, 安全检测, 恶意代码变种, 文件上传检测, 无后门, 机器学习, 毕业设计, 深度学习, 特征提取, 网络安全, 自定义DNS解析器, 计算机科学, 逆向工具, 随机森林, 隐私保护, 静态分析