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, 丰富标头哈希, 云安全监控, 哈希指纹识别, 多哈希指纹, 多线程扫描, 字符串提取, 安全分析师, 导入表分析, 开源安全工具, 恶意软件分析, 流式处理, 熵分析, 病毒总查询, 节区分析, 请求拦截, 资源解析, 进度条, 逆向工具, 逆向工程平台, 静态分析, 静态反编译