huanghfzhufeng/malware-analysis-tool

GitHub: huanghfzhufeng/malware-analysis-tool

基于PyQt5的一体化恶意软件分析平台,集成静态分析、动态沙箱执行、图神经网络分类与威胁情报查询,帮助安全研究人员高效完成恶意样本的多维度分析。

Stars: 0 | Forks: 0

# 🛡️ 恶意软件分析工具 (Malware Analysis Tool) 基于 PyQt5 的桌面端恶意软件分析平台,集成静态分析、动态沙箱、图神经网络分类与威胁情报查询。 ## ⚠️ 安全使用守则(请先阅读) ### 各模块风险等级 | 模块 | 是否会执行样本 | 在主机上跑 | |------|--------------|-----------| | 静态分析(YARA / PE / AST / 熵) | ❌ 否,只读字节流 | 🟢 安全 | | GNN 分析(CFG 提取 + 分类) | ❌ 否 | 🟢 安全 | | 威胁情报(VirusTotal / MITRE) | ❌ 否,只发 hash | 🟢 安全 | | **动态分析**(Frida spawn 真实进程) | ✅ **是,会真跑** | 🔴 **必须在 VM 里** | ### 内置安全防线 1. **样本运行守卫**:`lynx_sample.py` / `病毒样本.py` 顶部会检查 `MALWARE_SANDBOX_OK=yes` 环境变量,未设置则 `sys.exit(1)`,防止误双击 / 误 import / 误命令行启动。 2. **路径校验**:动态分析器对 Frida `spawn` 目标做 `realpath` 解析,拒绝 shell 元字符与系统关键路径(`Windows\System32`、`/proc`、`/sys`)。 3. **凭据隔离**:API key 仅从环境变量 `VIRUSTOTAL_API_KEY` 读取,已移除明文文件回退。 4. **不再 import 即跑**:移除了 `lynx_sample.py` 末尾"被 import 时自动执行 reconnaissance"的分支。 ### 跑动态分析前的检查清单 - [ ] 当前是隔离 VM(Hyper-V / VMware / VirtualBox),**不是物理主机** - [ ] VM 网络已切到 Internal/Private 或断网 - [ ] 已从干净的 baseline 快照恢复 - [ ] 接受"分析完直接还原快照",不会带任何产物回主机 - [ ] 已经 `export MALWARE_SANDBOX_OK=yes`(或 PowerShell 的 `$env:MALWARE_SANDBOX_OK = 'yes'`) 任意一项 ❌ → **不要跑**。 ## ✨ 主要特性 ### 🔍 静态分析 - YARA 规则匹配(`rules/` 目录递归加载) - PE 文件解析(pefile):DOS/NT 头、节信息、导入/导出表 - ELF 文件支持(lief) - PDF 检测(PyPDF2):JavaScript 与可疑元数据 - Python AST:可疑导入、调用、字符串常量 - Shannon 熵计算 ### 🚀 动态分析 - Frida 实时 API hook 与进程行为监控 - 多沙箱后端:本地 / Cuckoo Sandbox / QEMU(通过 `SANDBOX_BACKEND` 切换) - 反检测的 stealth Frida 脚本 - 路径校验、超时控制、自动进程清理 - 精细化错误分类(`ErrorType` enum + 结构化 `AnalysisResult`) ### 🧠 图神经网络分析 - 控制流图(CFG)提取 - PyTorch Geometric 二分类模型(节点特征维度 16) - GNNExplainer 可解释性输出 - CogDL 模型扩展(GAT / GCN 等可选) ### 🌐 威胁情报 - VirusTotal v3 API(hash 查询,超时 5s,缓存 12 小时) - MITRE ATT&CK 技术匹配(缓存 7 天) - 限流 / 超时自动回退到模拟数据,不阻塞 UI ### 🎨 用户界面 - 现代化主题与响应式布局 - 静态 / 动态 / GNN 多 Tab 可视化 - 内存与系统资源监控线程 ## 🚀 快速开始 ### 环境要求 - Python 3.10+(CI 使用 3.10) - Windows 10/11(主要支持) - 8GB+ RAM - 动态分析需要管理员权限 + 隔离 VM ### 安装依赖 pip install -r requirements.txt # 如果 PyTorch / torch-geometric 安装失败,参考 CogDL_安装指南.md 中的分阶段安装步骤 ### 配置环境变量 复制 `.env.example` 为 `.env` 并填入: # 可选:VirusTotal API key(不设则使用模拟数据) VIRUSTOTAL_API_KEY=your_key_here # 可选:沙箱后端 SANDBOX_BACKEND=local # local | cuckoo | qemu CUCKOO_API_URL=http://localhost:8090 CUCKOO_API_TOKEN= ### 运行 python main.py # 或以管理员权限(动态分析需要) .\run_as_admin.ps1 ## 📁 项目结构 . ├── main.py # 应用入口 ├── gui.py # 主窗口与 UI 编排(1176 行) ├── settings.py # 配置常量与环境变量读取 ├── security.py # Shannon 熵计算 │ ├── static.py # 静态分析(YARA/PE/ELF/PDF/AST) ├── dynamic_improved.py # 动态分析(Frida + 沙箱后端) ├── gnn.py # GNN 分类器 ├── gnn_utils.py # GNN 辅助函数 ├── gnn_improvements.py # 真实 CFG 提取(angr)+ GNNExplainer ├── real_feature_extractor.py # AST/PE 特征提取 ├── cogdl_integration.py # CogDL 模型适配层 ├── threat_intel.py # VirusTotal + MITRE ATT&CK ├── vis.py # matplotlib + networkx 可视化 ├── modern_theme.py # PyQt5 主题与样式 │ ├── lynx_sample.py # ⚠️ APT 行为模拟样本(含真实持久化) ├── 病毒样本.py # ⚠️ 勒索软件行为模拟(含真实破坏操作) ├── malicious_like_sample.py # 安全的"恶意行为"测试样本(自清理) ├── lynx_ransom.txt # 勒索文本占位 │ ├── rules/ # YARA 规则目录 ├── config/ # 配置文件目录 ├── cache/ # 威胁情报查询缓存(已 gitignore) ├── tests/ # pytest 测试套件 ├── .github/workflows/ # GitHub Actions CI │ ├── requirements.txt ├── pytest.ini ├── .env.example # 环境变量模板 ├── .gitignore └── CogDL_安装指南.md # CogDL 分阶段安装指南 ## 📊 使用指南 GUI 启动后顶部按钮区从左到右: 1. **📁 选择文件** → 输入或浏览待分析路径 2. **🔍 静态分析** → YARA/PE/AST/熵 → 输出报告与可视化 3. **🚀 动态分析** → Frida hook → 实时 API 调用流(**必须在 VM 中运行**) 4. **🧠 GNN 分析** → CFG 提取 → 分类 + 可解释性 5. **🌐 威胁情报** → VT hash 查询 + MITRE 技术匹配 结果分布在 4 个 Tab:日志、静态、动态、GNN。每个 Tab 包含图表 + 文本报告。 ## 🧪 测试 # 收集并运行所有测试 pytest tests/ # 仅运行不需要重型依赖的测试 pytest tests/ -q --tb=short 测试套件包含 21 用例(4 个文件,5-6 个用例每个),分布在 `tests/test_dynamic.py` / `test_gnn.py` / `test_api_calls.py` / `test_static.py`。需要重型依赖(PyTorch Geometric / Frida)的用例会通过 `pytest.mark.skipif` 自动跳过。 CI 在 `ubuntu-latest` 上跑轻量子集(不装 torch-scatter / frida),结果通常是 **9 passed, 12 skipped**。 ## 🛠️ 故障排除 | 问题 | 处理 | |------|------| | `frida` 相关错误 | 以管理员权限运行;`pip install -U frida frida-tools` | | `ModuleNotFoundError: torch_geometric` | 参考 `CogDL_安装指南.md` 分阶段装:先 torch,再 torch-scatter/sparse/cluster,最后 torch-geometric | | `yara.SyntaxError` | 检查 `rules/*.yar` 语法;YARA ≥ 4.2 | | GUI 字体异常(中文显示为方块) | 安装 SimHei / Microsoft YaHei,或修改 `settings.py` 中的字体列表 | | 内存占用过高 | 调整 `gui.py` 中 `PerformanceMonitor.memory_threshold`;关闭可视化 Tab | | 守卫拦截:"拒绝运行" | 当且仅当在隔离 VM 里时,`export MALWARE_SANDBOX_OK=yes` | ## 🔒 运维补充 - **凭据**:`.env` 已 gitignore;切勿提交 `config/virustotal_api_key.txt`(旧版兼容文件,已废弃) - **YARA 规则**:来自外部源时建议先校验 hash 再放入 `rules/` - **日志**:`analysis.log` 含样本指纹与 API 细节,分享前脱敏 - **依赖更新**:`pip list --outdated` + 关注 frida、yara-python、PyTorch 系列的安全公告 - **MITRE 缓存**:`cache/mitre_*.json` 默认每 7 天失效自动刷新 ## 🤝 贡献 git clone https://github.com/huanghfzhufeng/malware-analysis-tool cd malware-analysis-tool pip install -r requirements.txt pytest tests/ python main.py 提交 PR 前请确保: 1. `pytest tests/` 全绿(或仅有合理 skip) 2. 不要引入新的 bare `except:` 子句(除 `lynx_sample.py` 内的故意行为模拟外) 3. 不要把任何 API key、凭据、`.env` 提交到仓库 ## 📄 许可证 MIT License — 详见 `LICENSE`(如未提供请与维护者联系)。 ## 🙏 致谢 PyQt5 · Frida · PyTorch / PyTorch Geometric · YARA · NetworkX · CogDL · VirusTotal · MITRE ATT&CK **⚠️ 免责声明**:仅用于安全研究与教育,使用者自行承担风险。请勿用于任何非法用途。
标签:API接口, API查询, Ask搜索, CFG, Cloudflare, DAST, DNS 反向解析, Docker支持, ELF文件解析, Frida, GNN, Hook, lief, Malware Analysis, meg, MITRE ATT&CK, PDF检测, pefile, PE文件解析, PyQt5, Python, Sandbox, VirusTotal, YARA, 二进制分析, 云安全监控, 云安全运维, 云资产可视化, 信息安全, 凭据扫描, 动态注入, 图神经网络, 威胁情报, 开发者工具, 恶意样本分析, 恶意软件分析, 控制流图, 无后门, 无线安全, 桌面应用, 桌面端安全平台, 沙箱, 沙箱逃逸防护, 特权检测, 网络安全, 自动化分析, 虚拟机隔离, 跨站脚本, 逆向工具, 隐私保护, 静态分析