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解析器, 计算机科学, 逆向工具, 随机森林, 隐私保护, 静态分析