mamuaminu/malware_tool

GitHub: mamuaminu/malware_tool

一款面向安全研究的高强度静态恶意软件分析工具,整合哈希、PE、YARA 与 VirusTotal 并提供可视化与持久化查询。

Stars: 0 | Forks: 0

# Malware Tool — 静态分析套件 一款为安全研究人员和分析员打造的高强度静态恶意软件分析工具。支持多哈希指纹识别、熵分析、PE 头解析、YARA 规则扫描、VirusTotal 查询,并提供 Flask Web UI 以及 SQLite + Elasticsearch 存储后端。 **由 Mamu 开发** — © 2025 保留所有权利 ## 功能特性 | 功能 | 说明 | |---|---| | **多哈希指纹识别** | MD5、SHA-1、SHA-256、SHA-512、BLAKE2b | | **字符串提取** | ASCII 与 UTF-16LE,支持流式处理(无文件大小限制) | | **熵分析** | 分块 Shannon 熵计算并生成可视化图表 | | **PE 分析** | 头解析、导入表、可疑导入、节、资源、富头哈希 | | **YARA 扫描** | 匹配自定义 `.yar` 规则文件 | | **VirusTotal 查询** | 按 SHA-256 查询 VT API v3(具备速率限制感知与 429 重试机制) | | **Web UI** | Flask 应用展示扫描历史与详情视图 | | **存储** | SQLite(带索引,快速查询)+ 可选 Elasticsearch 接入 | | **输出格式** | JSON、HTML 报告、SQLite、Elasticsearch、熵值 PNG 图表 | ## 快速开始 ### 1. 安装依赖 ``` pip install -r requirements.txt ``` 所需依赖包: - `pefile` — PE/COFF 头解析 - `yara-python` — YARA 规则匹配 - `requests` — VirusTotal API 调用 - `matplotlib` — 熵值可视化图表 - `Flask` — Web UI - `tqdm` — 进度条 - `elasticsearch` — 可选 ES 后端 ### 2. 执行扫描 ``` # 扫描单个文件 python malware_tool.py -t /path/to/malware_sample.exe # 扫描目录 python malware_tool.py -t ./samples/ -o results.json # 使用 VirusTotal(设置 API 密钥为环境变量或 --vt-key 参数) export VT_API_KEY=your_virustotal_api_key python malware_tool.py -t sample.exe --vt-key "$VT_API_KEY" # 应用 YARA 规则 python malware_tool.py -t sample.exe --yara-rules rules.yar # 多线程扫描(默认:4 个线程) python malware_tool.py -t ./samples/ --threads 8 # 完整流程:扫描 + ES 导入 python malware_tool.py -t sample.exe --es-ingest ``` ### 3. 启动 Web UI ``` python malware_tool.py --web --port 5000 ``` 访问 `http://localhost:5000` 浏览扫描历史。 ## Docker ``` # 构建 docker build -t malware_tool . # 运行(Web UI) docker run -p 5000:5000 -v $(pwd)/samples:/data:ro malware_tool --web # 通过 CLI 扫描文件 docker run -p 5000:5000 -v $(pwd)/samples:/data:ro malware_tool -t /data/sample.exe # 使用 VT API 密钥 docker run -p 5000:5000 -e VT_API_KEY=your_key -v $(pwd)/samples:/data:ro malware_tool -t /data/sample.exe ``` 或使用 `docker-compose`: ``` VT_API_KEY=your_key docker-compose up --build ``` ## 输出文件 扫描完成后在工作目录生成以下文件: | 文件 | 说明 | |---|---| | `results.json` | 完整扫描结果(JSON) | | `report.html` | 人类可读的 HTML 报告 | | `scans.db` | 带索引列的 SQLite 数据库 | | `_entropy.png` | 熵值图表(若 matplotlib 可用) | ## SQLite 架构 ``` CREATE TABLE scans ( id INTEGER PRIMARY KEY AUTOINCREMENT, filename TEXT, sha256 TEXT, entropy REAL, vt_positives INTEGER DEFAULT 0, vt_total INTEGER DEFAULT 0, vt_status TEXT, detected_terms TEXT, scan_time TEXT, file_size INTEGER, pe_arch TEXT, yara_hits INTEGER DEFAULT 0 ); -- Indexes for fast querying CREATE INDEX idx_entropy ON scans(entropy); CREATE INDEX idx_vt_positives ON scans(vt_positives); CREATE INDEX idx_scan_time ON scans(scan_time); ``` 直接查询数据库: ``` # 显示统计信息 python query_db.py --stats # 最近 20 次扫描 python query_db.py --limit 20 # 仅高熵文件 python query_db.py --min-entropy 7.0 # 仅 VT 标记的文件 python query_db.py --vt-positives 1 # 按文件名或术语搜索 python query_db.py --search "powershell" ``` ## 架构设计 ``` malware_tool.py — CLI entry point, orchestration ├─ chunked_hashes() — streaming multi-hash ├─ streaming_entropy() — per-block entropy ├─ stream_printable_strings() — ASCII + UTF-16LE ├─ analyze_pe() — PE header/imports/sections ├─ scan_yara() — YARA rule matching ├─ vt_lookup() — VirusTotal API v3 ├─ save_entropy_plot() — PNG entropy visualisation ├─ run_scan() — thread-pooled scan coordinator ├─ _ingest_sqlite() — indexed SQLite ingest ├─ _ingest_elasticsearch() — ES ingest └─ _write_html_report() — static HTML report flask_ui/ app.py — Flask routes (/, /details/) templates/index.html — scan history table templates/details.html — individual scan detail es_ingest.py — standalone ES pipeline query_db.py — SQLite query CLI ``` ## YARA 规则 将规则放置于 `rules.yar` 并通过 `--yara-rules` 指定: ``` python malware_tool.py -t sample.exe --yara-rules rules.yar ``` 示例 `rules.yar`: ``` rule Suspicious_PowerShell { strings: $s1 = "powershell.exe -enc" ascii $s2 = "Invoke-WebRequest" ascii condition: any of them } rule High_Entropy_Section { condition: // rule logic handled externally false } ``` ## 环境变量 | 变量 | 说明 | |---|---| | `VT_API_KEY` | VirusTotal API 密钥(v3) | ## CI / 测试 ``` # 运行单元测试 python -m pytest test_malware_tool.py -v # 使用 docker-compose(CI 工作流) docker-compose -f docker-compose.yml up --abort-on-container-exit ``` ## 免责声明 本工具仅供**授权的安全研究与教育用途**。请仅分析您拥有合法权限的恶意软件样本。作者不对滥用行为承担任何责任。
标签:2025, API安全, ASCII字符串, DAST, elasticsearch, Elasticsearch存储, Flask Web UI, HTML报告, JSON输出, Mamu, matplotlib, pefile, PE头解析, PE解析, PNG绘图, Python安全工具, requests, SEO恶意软件分析, SQLite存储, tqdm, UTF-16LE字符串, VirusTotal查询, VT API v3, YARA扫描, YARA规则匹配, yarna-python, 丰富标头哈希, 云安全监控, 哈希指纹识别, 多哈希指纹, 多线程扫描, 字符串提取, 安全分析师, 导入表分析, 开源安全工具, 恶意软件分析, 流式处理, 熵分析, 病毒总查询, 节区分析, 请求拦截, 资源解析, 进度条, 逆向工具, 逆向工程平台, 静态分析, 静态反编译