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绕过, 目录枚举, 移动安全, 端点安全, 网络安全, 补丁管理, 逆向工具, 遗传算法, 配置文件, 随机森林, 隐私保护, 集成学习, 鲁棒性测试