bsm2006/apk-shield
GitHub: bsm2006/apk-shield
一个基于 Python 与 React 构建的 Android APK 恶意软件自动化分析平台,通过静态特征提取、风险评分、欺诈映射及 AI 解读生成可读的安全报告。
Stars: 0 | Forks: 0
# 🛡️ APK Shield — AI 驱动的 APK 恶意软件分析平台
一个可用于生产环境的 Android APK 恶意软件分析、逆向工程、风险评分、欺诈情报和 AI 驱动的报告系统。
## 🏗️ 架构
```
boiproject/
├── backend/ # Python FastAPI
│ ├── main.py # FastAPI app entrypoint
│ ├── requirements.txt
│ ├── Dockerfile
│ └── app/
│ ├── database.py # SQLAlchemy (SQLite/PostgreSQL)
│ ├── models.py # DB models
│ ├── schemas.py # Pydantic schemas
│ ├── analysis/
│ │ ├── apk_analyzer.py # Static analysis (Androguard + ZIP parser)
│ │ ├── risk_scorer.py # Weighted risk scoring engine
│ │ ├── fraud_mapper.py # Fraud type mapping engine
│ │ ├── similarity_engine.py # Cosine similarity engine
│ │ └── ai_explainer.py # OpenAI/Gemini explanation layer
│ └── routes/
│ ├── upload.py # POST /api/upload/
│ ├── analyze.py # POST/GET /api/analyze/
│ ├── score.py # GET /api/score/
│ ├── explain.py # GET/POST /api/explain/
│ ├── history.py # GET /api/history/
│ └── report.py # GET /api/report/
├── frontend/ # React + Vite + Tailwind
│ ├── src/
│ │ ├── pages/
│ │ │ ├── UploadPage.jsx # File upload with drag-and-drop
│ │ │ ├── DashboardPage.jsx # Analytics dashboard
│ │ │ ├── ReportPage.jsx # Full analysis report viewer
│ │ │ └── HistoryPage.jsx # Historical analyses
│ │ ├── components/
│ │ │ └── Layout.jsx # Sidebar navigation
│ │ └── api/client.js # Axios API client
│ ├── Dockerfile
│ └── nginx.conf
├── docker-compose.yml # One-command deployment
└── .env # Environment configuration
```
## 🚀 快速开始(单条命令)
```
# 克隆/导航到项目
cd boiproject
# (可选)为真实的 AI 解释设置 AI API key
echo "GEMINI_API_KEY=your_key_here" >> .env
# 运行一切
docker-compose up --build
# 打开浏览器
open http://localhost:3000
```
就是这样!上传任何 APK 并获取即时分析结果。
## 🖥️ 本地开发(不使用 Docker)
### 后端
```
cd backend
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --port 8000 --reload
```
后端 API: http://localhost:8000
API 文档: http://localhost:8000/docs
### 前端
```
cd frontend
npm install
npm run dev
```
前端: http://localhost:3000 (将 API 代理到端口 8000)
## 🔑 环境变量
| 变量 | 默认值 | 描述 |
|----------|---------|-------------|
| `DATABASE_URL` | `sqlite:///./apk_analysis.db` | 数据库连接字符串 |
| `AI_PROVIDER` | `gemini` | `gemini` 或 `openai` |
| `GEMINI_API_KEY` | *(空)* | Google Gemini API 密钥 |
| `OPENAI_API_KEY` | *(空)* | OpenAI API 密钥 |
| `SECRET_KEY` | dev key | 应用密钥 |
## 🔍 核心功能
### 1. APK 静态分析
- Android Manifest 权限提取
- 危险权限识别
- API 调用模式检测
- 嵌入式 URL 提取
- 混淆检测(DexGuard/ProGuard 指标)
- Multi-DEX 检测
- Service、receiver、activity 枚举
### 2. 风险评分引擎 (0–100)
加权多因素评分:
| 组件 | 权重 | 因素 |
|-----------|--------|---------|
| 权限 | 30% | 数量、严重程度、危险权限比例 |
| API 调用 | 25% | 可疑 API 模式(SMS、管理员、反射) |
| URL | 20% | 原始 IP、可疑 TLD、C2 endpoint |
| 混淆 | 15% | 代码隐藏指标 |
| 行为 | 10% | 持久化、无障碍滥用、管理员权限 |
**风险等级:**
- 🟢 **安全** (0–24):允许
- 🟡 **可疑** (25–54):标记待审核
- 🔴 **拦截** (55–100):立即拦截
### 3. 欺诈映射引擎
将技术行为映射到欺诈类型:
| 技术行为 | 欺诈类型 |
|-------------------|------------|
| READ_SMS + SmsManager | OTP 窃取 |
| SYSTEM_ALERT_WINDOW + AccessibilityService | 钓鱼/覆盖层攻击 |
| 位置 + 音频 + 后台服务 | 间谍软件 |
| DevicePolicyManager + 加密 | 勒索软件 |
| DexClassLoader + REQUEST_INSTALL | 增量加载器 |
| GET_ACCOUNTS + 键盘记录服务 | 凭证窃取程序 |
### 4. 威胁相似性引擎
- 将 APK 特征转换为 46 维数值向量
- 与所有已存储的 APK 进行余弦相似度比较
- 返回相似度排名前 5 的威胁及其相似度百分比
### 5. AI 解释层
- 支持 Google Gemini API 和 OpenAI GPT-3.5
- 生成人类可读的威胁摘要
- 提供具体的安全建议
- 回退到智能模板解释(不需要 API 密钥)
## 📡 API 参考
```
POST /api/upload/ Upload APK file
POST /api/analyze/{hash}?filename= Run full analysis pipeline
GET /api/analyze/{id} Get analysis by ID
GET /api/score/{id} Get detailed score breakdown
GET /api/explain/{id} Get AI explanation
POST /api/explain/{id}/regenerate Regenerate AI explanation
GET /api/history/ List all analyses (paginated)
GET /api/history/stats/dashboard Dashboard statistics
GET /api/report/{id}/json Full JSON report
DELETE /api/history/{id} Delete an analysis
```
## 🐳 Docker 部署
### 构建与运行
```
docker-compose up --build -d
docker-compose logs -f
```
### 停止
```
docker-compose down
```
### 使用 PostgreSQL(生产环境)
编辑 `docker-compose.yml` 取消注释 PostgreSQL 服务,然后:
```
DATABASE_URL=postgresql://apkuser:apkpassword@db:5432/apkdb docker-compose up --build
```
## ☁️ 云部署
### Railway
```
# 安装 Railway CLI
npm install -g @railway/cli
railway login
railway init
railway up
```
### Render
1. Fork 此代码库
2. 创建新的 Web Service → 连接代码库 → 将 root 设置为 `backend/`
3. 构建:`pip install -r requirements.txt`
4. 启动:`uvicorn main:app --host 0.0.0.0 --port $PORT`
5. 将前端部署为 Static Site → root: `frontend/` → 构建:`npm run build` → 发布:`dist/`
## 🔬 分析 Pipeline 流程
```
APK File Upload
↓
SHA256 Hash Computation
↓
Static Analysis (Androguard / ZIP Parser / Simulation)
↓ Extract: permissions, APIs, URLs, obfuscation, services
Risk Scoring Engine
↓ Weighted score 0-100 → SAFE/SUSPICIOUS/BLOCK
Fraud Mapping Engine
↓ Map behaviors → OTP theft, phishing, spyware, ransomware...
Feature Vectorization
↓ 46-dim numeric vector
Similarity Engine
↓ Cosine similarity → top-5 similar APKs
AI Explanation Layer
↓ Gemini/OpenAI → human-readable analysis + recommendations
Database Storage (SQLite/PostgreSQL)
↓
JSON Report + Dashboard Display
```
## 🧪 测试
运行完整的 pipeline 测试:
```
cd backend
source venv/bin/activate
python -c "
from app.analysis.apk_analyzer import analyze_apk_simulated
from app.analysis.risk_scorer import compute_risk_score
from app.analysis.fraud_mapper import map_fraud_types
import tempfile, os
with tempfile.NamedTemporaryFile(suffix='.apk', delete=False) as f:
f.write(b'PK' + b'\x00' * 500)
tmp = f.name
apk = analyze_apk_simulated(tmp)
score = compute_risk_score(apk)
fraud = map_fraud_types(apk)
print(f'Score: {score[\"risk_score\"]} | Level: {score[\"risk_level\"]}')
print(f'Frauds: {fraud[\"fraud_types\"]}')
os.unlink(tmp)
"
```
## 📊 技术栈
| 组件 | 技术 |
|-----------|------------|
| 后端 | Python 3.11, FastAPI, Uvicorn |
| 数据库 | SQLite (开发) / PostgreSQL (生产) |
| ORM | SQLAlchemy |
| 机器学习 | scikit-learn, numpy, pandas |
| APK 分析 | Androguard(可选)+ ZIP 解析器 |
| AI 层 | Google Gemini / OpenAI GPT-3.5 |
| 前端 | React 18, Vite, Tailwind CSS |
| 图表 | Recharts |
| 动画 | Framer Motion |
| 部署 | Docker, Docker Compose, Nginx |
## 🛡️ 安全说明
- APK 文件按哈希值存储(无文件名冲突)
- 最大文件大小:100 MB
- 文件仅在服务端处理
- 不向外部服务发送 APK 数据(AI 解释文本除外)
- 开发环境使用 SQLite 本地数据库;生产环境使用 PostgreSQL
*为 Android 安全研究用心打造 ❤️*
标签:Android恶意软件分析, APK静态分析, AV绕过, FastAPI, React, Syscalls, 云资产清单, 人工智能, 用户模式Hook绕过, 请求拦截, 逆向工具, 逆向工程