恶意软件分析系统——将恶意软件二进制转换为图像并通过 CNN + LLM 进行分析分类。
Client → Backend (8001) → Sandbox (8080) ↓ ↓ EMBER 二分类 下载文件 + 提取 EMBER 特征 ↓ + 转换为灰度图像 (if Malware) ↓ CNN 家族分类 + Grad-CAM ↓ LLM 分析报告
两个 Docker 服务通过 HTTP 通信:
# 1. 下载模型
./backend/download_model.sh
# 2. 配置(复制模板并修改)
cp config/config.yaml.template config/config.yaml
# 编辑 config.yaml,填写 LLM API key
# 3. 启动全部服务
docker compose up --build
# 停止服务
docker compose down
# 查看容器日志(可在 logs/app.log 查看项目日志)
docker compose logs malware_backend
docker compose logs malware_sandbox
malware-sandbox/ # 沙箱相关 ├── analyze_malware.py # 沙箱 HTTP 服务,下载文件、EMBER 特征提取、二进制转图像 └── requirements.txt backend/ # 后端代码 ├── main.py # FastAPI 入口 ├── model_predictor.py # TensorFlow CNN 分类器 + Grad-CAM ├── ember_predictor.py # LightGBM 二分类器 ├── llm_analyzer.py # 多提供商 LLM 客户端 ├── sandbox_manager.py # 沙箱 HTTP 客户端 ├── security.py # SSRF 防护 ├── download_model.sh # 模型下载脚本 config/ # 配置文件 ├── config.yaml.template # 配置模板 ├── config.yaml # 实际配置(需从模板复制) models/ # 模型文件 ├── malware_classifier.h5 # CNN 模型(25 类)✓ 使用 └── ember_binary_model.pkl # LightGBM 模型(二分类)✓ 使用 docker-compose.yml .cnb.yml # CNB 自动构建配置
config/config.yaml.template 为 config/config.yamlconfig/config.yaml,填写 LLM API keyllm:
provider: "qwen" # 可选:qwen / deepseek / openai / local (Ollama)
qwen:
api_key: "your_api_key"
model: "qwen3.6-plus"
| 方法 | 路径 | 说明 |
|---|---|---|
| POST | /api/analyze | 提交 URL 进行分析,返回 task_id |
| GET | /api/result/{task_id} | 查询分析结果 |
| GET | /api/sandbox/status | 检查沙箱连接状态 |
| GET | /api/image/{filename} | 获取生成的灰度图像 |
| GET | /api/file/heatmap/{filename} | 获取 Grad-CAM 热力图 |
仅使用以下两个模型文件:
| 文件 | 用途 | 说明 |
|---|---|---|
malware_classifier.h5 | CNN 家族分类 | TensorFlow Keras 模型,25 类 MalImg |
ember_binary_model.pkl | EMBER 二分类 | LightGBM 模型,Clean vs Malware |
download_model.sh 还会下载 malware_classifier.keras 和 ember_feature_cols.pkl,这两个文件未使用,可手动删除。已在脚本中注释。