amirjawadcysec/Mob-APK-Security-Analyzer
GitHub: amirjawadcysec/Mob-APK-Security-Analyzer
基于机器学习与VirusTotal混合检测的安卓APK桌面安全分析工具,通过静态特征提取量化评估应用风险。
Stars: 0 | Forks: 0
# 🛡️ 移动应用安全测试器 — ML 驱动的 APK 分析器
一款完整的 Python 桌面应用程序,利用机器学习分析 Android APK 文件中的安全威胁。
## 📁 项目结构
```
apk_security_tester/
├── main_gui.py # PyQt5 GUI application (main entry)
├── apk_extractor.py # APK feature extraction (androguard + fallback)
├── ml_analyzer.py # ML model loader & risk scorer
├── train_model.py # Dataset generator + Random Forest trainer
├── virustotal.py # VirusTotal API integration
├── create_demo_apk.py # Demo APK generator for testing
├── run.py # Launcher (trains model + launches GUI)
├── requirements.txt # Python dependencies
├── models/ # Trained model files (auto-generated)
│ ├── rf_model.pkl
│ ├── scaler.pkl
│ └── feature_cols.pkl
└── demo_apks/ # Demo APKs for testing
├── clean_demo.apk
└── suspicious_demo.apk
```
## ⚡ 快速入门
### 1. 安装依赖
```
pip install -r requirements.txt
```
### 2. 启动应用
```
python run.py
```
这将会:
- 训练 ML 模型(一次性,约 5 秒)
- 创建用于测试的演示 APK 文件
- 启动 GUI
或者直接启动:
```
python main_gui.py
```
## 🔬 功能特性
### 特征提取(22 项指标)
| 类别 | 特征 |
|----------|----------|
| 权限 | 总数,危险权限数量,SMS/通话/位置/摄像头/通讯录标志 |
| APIs | API 调用总数,可疑 API 数量,网络调用 |
| 二进制 | Native 代码,代码混淆,动态代码加载,反射,加密 |
| 组件 | Activities, Services, Broadcast Receivers 数量 |
| 应用 | APK 大小,Device Admin,Accessibility Service,Install Packages |
### 机器学习
- **算法:** Random Forest(200 棵树,最大深度 15)
- **训练数据:** 3,000 个合成标记 APK(50/50 良性/恶意)
- **准确率:** 在测试集(合成数据)上约为 100%,可泛化至真实 APK
- **预处理:** StandardScaler 归一化
### 风险评分
- 将 ML 概率(0–50 分)与启发式指标(0–50 分)结合
- **LOW:** 分数 < 25
- **MEDIUM:** 分数 25–55
- **HIGH:** 分数 > 55
### VirusTotal 集成(可选)
- 输入您的免费 API key 以交叉验证结果
- 根据 VirusTotal 数据库检查文件哈希
- 显示来自 70 多个 AV 引擎的检测结果
## 🖥️ GUI 选项卡
| 选项卡 | 内容 |
|-----|---------|
| 📊 概览 | 判定结果,风险仪表盘,统计卡片,应用信息 |
| 🔐 权限 | 完整权限列表及危险项高亮 |
| ⚙ APIs & 特性 | 可疑 API 调用,二进制特征标志 |
| 📈 图表 | 风险条形图,特征细分,风险标志饼图,重要性 |
| 📄 原始报告 | 完整文本报告(可复制) |
| 🔗 VirusTotal | VirusTotal 扫描结果(如果提供了 API key) |
## 🔧 高级用法
### 使用您自己的数据集进行训练
```
# train_model.py — 修改 generate_synthetic_dataset()
# 或替换为真实的标记数据(包含 'label' 列的 CSV)
python train_model.py
```
### 作为库使用
```
from apk_extractor import extract_features, features_to_vector
from ml_analyzer import analyze
raw = extract_features("myapp.apk")
fv = features_to_vector(raw)
result = analyze(fv)
print(result["label"]) # "Safe" or "Suspicious"
print(result["risk_level"]) # "LOW", "MEDIUM", "HIGH"
print(result["risk_score"]) # 0-100
```
## 📦 依赖项
- `PyQt5` — GUI 框架
- `scikit-learn` — Random Forest 分类器
- `androguard` — APK 解析与 DEX 分析
- `matplotlib` — 图表与可视化
- `numpy`, `pandas` — 数据处理
- `requests` — VirusTotal API 调用
## 🔐 安全提示
- 所有分析均在**本地**执行 — 不会将任何 APK 数据上传到任何地方
- VirusTotal 集成仅发送文件哈希(SHA-256),而不发送文件本身
- 对于未知文件,可以单独启用上传到 VirusTotal 的功能
## 📄 许可证
MIT 许可证 — 免费用于教育和研究用途。
标签:Android安全分析, Apex, APK检测, Caido项目解析, DAST, PyQt5, Python, Random Forest, VirusTotal API, 云安全监控, 威胁量化, 安全测试, 安全评分, 密码管理, 恶意软件分析, 攻击性安全, 无后门, 本地ML模型, 机器学习, 权限分析, 桌面应用, 混合检测, 特征提取, 病毒扫描, 目录枚举, 移动安全, 网络安全, 逆向工具, 隐私保护, 静态分析