Nadimm909/malware-detection-ml
GitHub: Nadimm909/malware-detection-ml
基于机器学习的 Windows PE 文件恶意软件静态检测项目,通过分析可执行文件头部特征实现无需运行的恶意与合法分类。
Stars: 0 | Forks: 0
# 🛡️ 基于机器学习的恶意软件检测
通过对 Windows PE(Portable Executable)头部特征进行静态分析,将可执行文件分类为**恶意软件**或**合法文件** —— 全程无需运行文件。
[](https://www.python.org/)
[](https://scikit-learn.org/)
[](LICENSE)
## 📌 概述
传统的杀毒软件依赖于特征匹配 —— 它们只能捕获已知的恶意软件。本项目采用了不同的方法:它从 Windows 可执行文件的 PE 头部提取 **57 个静态特征**(信息熵、导入的 DLL、资源元数据等),并利用机器学习来识别恶意文件的*结构模式* —— 甚至是此前从未遇到过的变种。
**最佳结果:** Random Forest 分类器在包含 27,610 个文件的保留测试集上达到了 **99.46% 的准确率**。
## 🎯 目标
- 研究恶意与合法可执行文件之间不同的 PE 头部特征
- 从大规模数据集中选择最具信息量的特征
- 训练并比较多种 ML 分类器
- 使用准确率、精确率、召回率和 F1-score 进行评估
- 确定最适合实际部署的性能最优模型
## 📊 数据集
| | |
|---|---|
| **样本** | 138,047 个 Windows 可执行文件 |
| **特征** | 57 个静态 PE 头部属性 |
| **类别划分** | 96,724 个恶意软件 (70.1%) / 41,323 个合法文件 (29.9%) |
| **缺失值** | 无 |
| **重复项** | 无 |
数据集文件位于 [`Datasets/`](Datasets/)(`MalwareData.csv`,管道符分隔)。
## 🧠 方法论
1. **特征选择** — 通过 Extra Trees 重要性排序将 54 个候选特征缩小到最具预测能力的前 15 个(例如 `DllCharacteristics`、`SectionsMeanEntropy`、`ResourcesMaxEntropy`)。
2. **预处理** — 对尺寸敏感的模型(SVM、Naive Bayes)应用标准化缩放;基于树的模型使用原始值。
3. **训练/测试集划分** — 80/20 分层划分(110,437 / 27,610 个样本),保持类别平衡。
4. **训练的模型** — Random Forest、Decision Tree、Linear SVM、Gaussian Naive Bayes。
## 📈 结果
| 模型 | 准确率 | 精确率 | 召回率 | F1-Score |
|---|---|---|---|---|
| **Random Forest** | **99.46%** | **99.00%** | **99.19%** | **99.09%** |
| Decision Tree | 99.12% | 98.29% | 98.79% | 98.54% |
| Linear SVM | 97.65% | 96.79% | 95.29% | 96.04% |
| Naive Bayes | 91.79% | 98.05% | 74.04% | 84.37% |
**混淆矩阵 — Random Forest**(27,610 个测试样本):
| | 预测:恶意软件 | 预测:合法文件 |
|---|---|---|
| **实际:恶意软件** | 19,262 | 83 |
| **实际:合法文件** | 67 | 8,198 |
在 27,610 个样本中仅有 150 个分类错误(错误率为 0.54%)。
## 🗂️ 仓库结构
```
├── Malware_Detection_Project.ipynb # Main notebook — full pipeline, runnable end-to-end
├── malware_classifier.pkl # Saved trained Random Forest model
├── scaler.pkl # Saved StandardScaler for inference
├── selected_features.pkl # List of the 15 selected features
├── Datasets/
│ ├── MalwareData.csv
│ └── Malware_Detection_data.csv
```
## 🚀 快速开始
### 前置条件
- Python 3.x
- Jupyter Notebook 或安装了 Jupyter 扩展的 VS Code
### 安装说明
```
git clone https://github.com/Nadimm909/malware-detection-ml.git
cd malware-detection-ml
pip install jupyter pandas numpy scikit-learn matplotlib seaborn joblib
```
### 运行
```
jupyter notebook
```
打开 `Malware_Detection_Project.ipynb` 并选择 **Run → Run All Cells**。
## 🔮 未来展望
- 超参数调优 (GridSearchCV / RandomizedSearchCV)
- k 折交叉验证以获得更稳健的估计
- 使用 SMOTE 处理类别不平衡问题
- 模型堆叠/集成
- 实时推理 API
- 静态与动态(行为)混合分析
## ⚠️ 局限性
- 仅适用于 Windows PE 文件(`.exe`/`.dll`)— 不适用于脚本、PDF 或无文件恶意软件
- 不具备对抗鲁棒性 — 蓄意混淆的头部可能会逃避检测
- 旨在作为传统基于特征的杀毒软件的**补充层**,而非替代品
## 📄 许可证
本项目基于 MIT 许可证授权 — 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。
标签:Apex, NoSQL, PE文件分析, 云安全监控, 机器学习, 逆向工具, 静态分析