myushreddy/Android-Malware-Detection

GitHub: myushreddy/Android-Malware-Detection

利用遗传算法优化特征并结合Stacking集成学习的高准确率Android恶意软件检测系统,附带对抗鲁棒性测试和模型可解释性分析。

Stars: 0 | Forks: 0

# 基于 GA 优化特征的 Android 恶意软件检测系统 一个全面的机器学习流水线,用于**Android 恶意软件检测**,结合了: - 🧬 用于特征优化的 **遗传算法 (Genetic Algorithm)** - 📊 用于特征排序的 **互信息 (Mutual Information)** - 🤖 用于稳健预测的 **集成学习 (Ensemble Learning)** - 🔍 用于模型可解释性的 **SHAP** - ⚔️ 用于鲁棒性验证的 **对抗测试 (Adversarial Testing)** ## 📁 项目结构 ``` android-malware-detection/ │ ├── 1_preprocessing/ # Stage 1: Data loading & MI scoring │ ├── preprocandMI.py # Load raw data, compute MI scores │ ├── understanding.py # Data exploration │ └── README.md │ ├── 2_feature_selection/ # Stage 2: GA optimization │ ├── GA_RAM.py # Genetic Algorithm for feature subset selection │ └── README.md │ ├── 3_modeling/ # Stage 3: Train models │ ├── DL-ATIDS.py # Deep neural network (PyTorch) │ ├── ga_stacking_model.py # Ensemble stacking (RF + SVM + kNN) │ └── README.md │ ├── 4_evaluation/ # Stage 4: Test & explain │ ├── AdversarialAttackSimulation.py # FGSM adversarial robustness │ ├── SHAP.py # Feature importance analysis │ └── README.md │ ├── data/ │ ├── raw/ # Original datasets │ │ ├── dataset_30k_sample.csv │ │ └── mh_100k_* # 100k dataset files │ ├── processed/ # Intermediate outputs │ │ ├── X_features_clean.csv │ │ ├── X_ga_optimized.csv │ │ ├── X_test_holdout.csv │ │ ├── y_labels.csv │ │ ├── y_test_holdout.csv │ │ ├── MI_scores_result.csv │ │ └── ga_selected_features.csv │ └── results/ # Final analysis outputs │ ├── adversarial_results.csv │ └── top_features_shap.csv │ ├── models/ # Trained models │ ├── ga_stacking_model.pkl # Stacking ensemble (95.3% accuracy) │ └── dl_atids_model.pth # Deep neural network (72.5% accuracy) │ ├── outputs/ # Visualizations & reports │ ├── MI_score_distribution.png │ ├── SHAP_Stacking_Summary.png │ └── SHAP_DL_Summary.png │ └── README.md # This file ``` ## 🚀 快速开始 ### 1. 克隆与设置 ``` git clone https://github.com/myushreddy/Android-Malware-Detection.git cd Android-Malware-Detection python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate pip install -r requirements.txt ``` ### 2. 运行完整流水线(按顺序) ``` # 阶段 1:Preprocessing (1-2 分钟) cd 1_preprocessing python preprocandMI.py cd .. # 阶段 2:Feature Selection (3-5 分钟) cd 2_feature_selection python GA_RAM.py cd .. # 阶段 3:Model Training (5-10 分钟) cd 3_modeling python ga_stacking_model.py python DL-ATIDS.py cd .. # 阶段 4:Evaluation (5-10 分钟) cd 4_evaluation python AdversarialAttackSimulation.py python SHAP.py # Takes ~10 min on CPU cd .. ``` ### 预期运行时间 - **总计:** 约 30-40 分钟(首次运行) - **后续运行:** 约 10-15 分钟(模型已缓存) ## 📊 主要结果 ### 数据集 - **规模:** 3 万个 Android 应用(均衡分布:约 50% 良性,约 50% 恶意) - **特征:** 500 多个 API 调用频率 → 经 MI 过滤后剩 104 个 → **19 个 GA 优化特征** - **训练/测试集:** 80/20 分层抽样划分 ### 模型 | 模型 | 类型 | 准确率 | AUC-ROC | 鲁棒性 | 最佳用途 | |-------|------|----------|---------|------------|----------| | **GA-StackingMD** | 集成模型 (RF+SVM+kNN) | **95.3%** | **0.914** | ⭐⭐⭐ 极佳 | **生产环境** | | DL-ATIDS | 神经网络 | 72.5% | 0.619 | ⚠️ 较差 | 研究 | ### 对抗攻击的鲁棒性 (FGSM) - **GA-StackingMD:** 即使在 epsilon=0.25 时也能保持 95%+ 的准确率 ✅ - **DL-ATIDS:** 在 epsilon=0.2 时准确率降至 <1% ❌ ### 主要恶意软件指标 (通过 SHAP) 1. 🎯 `Window.setType()` - UI 操控 2. 🎯 `Intent.addFlags()` + `Intent.setAction()` - 应用通信劫持 3. 🎯 `Bundle.getBoolean()` + `Bundle.getInt()` - 数据泄露 ## 📝 流水线概述 ### 阶段 1:预处理 - 加载 3 万个 Android 样本 - 剔除真实标识符(SHA256, NOME, PACOTE)——无行为信号 - 保留 API 版本信息(与漏洞相关) - 计算用于特征排序的**互信息 (MI)** 分数 - 80/20 分层抽样划分训练/测试集 - 输出:经过 MI 评分的特征(阈值筛选后共 104 个) ### 阶段 2:特征选择 - 在经过 MI 评分的特征上进行**遗传算法 (GA)** 优化 - 基于 MI 权重的种群初始化(智能启动) - 适应度函数:随机森林 F1 分数减去特征数量惩罚 - 锦标赛选择 + 两点交叉 + 位翻转变异 - 检测到收敛时提前停止 - 输出:**19 个最优特征**(从 104 个中选出) ### 阶段 3:模型训练 - **Stacking 集成:** RF(100 棵树)+ SVM (RBF) + kNN (k=5) → LogReg 元学习器 - **深度神经网络:** 128→64→32→1,结合 BatchNorm + Dropout - 均在 GA 优化后的 19 个特征上训练 - 在预留的测试集(未见过的数据)上进行评估 ### 阶段 4:评估 - **对抗鲁棒性:** 在 ε ∈ [0.05, 0.25] 下进行 FGSM 攻击 - 测试模型对特征扰动的适应能力 - Stacking 模型完胜 - **特征重要性:** SHAP 分析 - 解释单个预测结果 - 按影响程度对特征进行排序 - 揭示恶意软件模式 ## 🔧 依赖项 ``` pandas numpy scikit-learn torch (PyTorch) shap matplotlib joblib ``` 安装所有依赖: ``` pip install -r requirements.txt ``` ## 📖 详细文档 流水线的每个阶段都有其专属的 README: - **[1_preprocessing/README.md](1_preprocessing/README.md)** - 数据加载与 MI 评分 - **[2_feature_selection/README.md](2_feature_selection/README.md)** - GA 特征优化 - **[3_modeling/README.md](3_modeling/README.md)** - 模型架构与训练 - **[4_evaluation/README.md](4_evaluation/README.md)** - 鲁棒性与可解释性 ## 🎯 模型选择建议 ### 生产环境请使用 GA-StackingMD ✅ - **原因:** 准确率高达 95%+,对对抗攻击具有鲁棒性,可通过 SHAP 解释 - **部署:** 加载 `models/ga_stacking_model.pkl` + `data/processed/ga_selected_features.csv` - **预测:** 输入 19 个 GA 筛选的 API 调用频率 → 输出恶意软件概率 ### DL-ATIDS 仅限研究使用 ⚠️ - **原因:** 架构有趣,但容易受到对抗攻击 - **更好的替代方案:** 将 SHAP 与 Stacking 集成结合使用,以获得类似神经网络的可解释性 ## 📈 扩展至 10 万数据集 项目在 `data/raw/100k/` 目录中包含了一个 10 万个 Android 应用的数据集: - `mh_100k_features_all.csv` - 所有特征 - `mh_100k_labels.csv` / `mh_100k_vt_labels.csv` - 标签 - 完整数据集的 RAR 压缩包 **扩展步骤:** 1. 解压 RAR 文件 2. 修改 `preprocandMI.py` 以读取 10 万数据集 3. 运行流水线(耗时可能是之前的 2-3 倍) 4. 对比 3 万和 10 万模型的泛化能力 ## 🔍 核心洞察 ### 恶意软件 API 调用模式 1. **UI 欺骗** - 操纵应用界面(View 操作) 2. **系统访问** - 查询系统资源(ContentResolver, Resources) 3. **通信劫持** - 拦截/修改 intents 4. **数据窃取** - 提取设备/应用数据 ### 为什么 GA 优于手动选择 - 仅使用 MI 会单独对特征进行评分(忽略了特征间的交互作用) - GA 能探索出协同工作效果良好的特征子集 - 对特征数量的惩罚保持了模型的精简(19 个特征 对比 104 个特征) - 在特征减少 5.5 倍的情况下依然保持 95%+ 的准确率 = 更快的预测速度,更低的内存消耗 ### 为什么 Stacking 优于单一模型 - 集成模型结合了多样化的学习器(RF, SVM, kNN) - 元学习器学习最优权重分配 - 鲁棒性:能更好地处理异常值(单一模型的错误 ≠ 最终的错误预测) - 权衡取舍:略微增加了复杂性,但对于生产系统来说是值得的 ## 📊 文件说明 ### 数据文件 | 文件 | 用途 | 大小 | |------|---------|------| | `data/processed/X_features_clean.csv` | MI 过滤后的特征 | ~124 MB | | `data/processed/X_ga_optimized.csv` | GA 选择的特征(19 列) | ~37 MB | | `data/processed/MI_scores_result.csv` | MI 排名 | ~620 KB | | `data/processed/ga_selected_features.csv` | 特征名称 | <1 KB | | `data/results/adversarial_results.csv` | FGSM 鲁棒性结果 | <1 KB | | `data/results/top_features_shap.csv` | SHAP 重要性 | <1 KB | ### 模型文件 | 文件 | 用途 | 大小 | |------|---------|------| | `models/ga_stacking_model.pkl` | 训练好的集成模型 | ~10 MB | | `models/dl_atids_model.pth` | 训练好的神经网络 | ~2 MB | ### 输出可视化 | 文件 | 用途 | |------|---------| | `outputs/MI_score_distribution.png` | 特征 MI 排名 | | `outputs/SHAP_Stacking_Summary.png` | 集成模型特征重要性 | | `outputs/SHAP_DL_Summary.png` | 神经网络特征重要性 | ## 🐛 故障排除 ### 问题:加载完整数据集时出现“内存不足” **解决方案:** 流水线默认设计使用 3 万个样本。对于 10 万样本: - 在 `preprocandMI.py` 中使用选择性列加载 - 如有需要可进行分批处理 - 参考:`2_feature_selection/README.md` 中的内存使用提示 ### 问题:SHAP 脚本运行太慢 **解决方案:** KernelExplainer 在 CPU 上运行较慢。可选方案: - 在 GPU 上运行(如果可用) - 减少样本大小(当前为 200,可减至 100) - 使用更快的解释器变体(仅 DL-ATIDS 适用于 DeepExplainer) ### 问题:GA 无法收敛 **解决方案:** 检查适应度函数。如果所有染色体的适应度都达到了完美值: - 增加惩罚系数(当前为 0.05) - 增加特征选择的难度(减少种群数量) - 参考:`ga_stacking_model.py` 的第 ~20 行用于惩罚调优 ## 📚 参考文献 **论文/方法:** - Genetic Algorithms(遗传算法): Holland et al., 1992 - Mutual Information(互信息): Shannon, 1948 - SHAP: Lundberg & Lee, 2017 - Adversarial Attacks (FGSM)(对抗攻击): Goodfellow et al., 2014 - Stacking Ensembles(堆叠集成): Wolpert, 1992 **Android 恶意软件检测:** - VirusTotal API(用于 10 万数据集的标签) - APKTool 用于特征提取 - Frida/Xposed hooks 用于动态分析
标签:AMSI绕过, Android恶意软件检测, Apex, BSD, FGSM, K近邻, PyTorch, SHAP解释性, XAI, 互信息, 人工智能, 入侵检测系统, 凭据扫描, 分类算法, 可解释AI, 堆叠模型, 威胁检测, 安全数据湖, 对抗性攻击, 对抗样本, 恶意代码分析, 搜索语句(dork), 支持向量机, 数据挖掘, 数据预处理, 机器学习, 深度学习, 特征优化, 特征选择, 用户模式Hook绕过, 目录枚举, 移动安全, 端点安全, 网络安全, 补丁管理, 逆向工具, 遗传算法, 配置文件, 随机森林, 隐私保护, 集成学习, 鲁棒性测试