NoaMatout/Malware_Analyzer
GitHub: NoaMatout/Malware_Analyzer
一款命令行恶意软件分析工具,通过 VirusTotal v3 API 对可疑文件进行哈希优先查询并生成 Markdown 报告,支持脚本化批量筛查。
Stars: 0 | Forks: 0
# Malware Analyzer
这是一款命令行工具,针对给定文件查询 VirusTotal v3 API,并生成一份可读的 Markdown 报告:综合判定、检测到威胁的引擎以及威胁分类。
专为日常可疑文件的分类筛查而写——适合那种需要快速、频繁进行的检查,并希望可以将其归档或附加到工单中。
## 工作原理
文件首先在**本地进行哈希处理**,然后通过其 SHA-256 在 VirusTotal 上进行搜索。如果该样本已被收录(目前流通的绝大多数恶意软件都是这种情况),只需一次请求即可生成报告,无需传输文件的任何字节。
只有在 hash 未知且显式使用 `--upload` 参数时才会进行上传。
这是刻意为之:**任何提交给 VirusTotal 的文件都会被社区访问**。出于习惯而上传的内部文档无异于数据泄露。
```
fichier
│
SHA-256 local
│
GET /files/{sha256}
│
┌─────┴─────┐
connu inconnu
│ │
│ --upload ? ── non ──▶ arrêt, rien n'est transmis
│ │ oui
│ POST /files
│ │
│ sondage /analyses/{id}
│ │
└─────┬──────┘
│
rapport Markdown
```
## 安装
```
git clone https://github.com/NoaMatout/Malware_Analyzer.git
cd Malware_Analyzer
pip install -r requirements.txt
```
需要 VirusTotal 的 API 密钥,可在账户设置中免费获取:
```
export VT_API_KEY="votre_cle" # Linux / macOS
$env:VT_API_KEY = "votre_cle" # PowerShell
```
密钥从环境变量中读取,绝不会在屏幕上明文索要,也不会写入磁盘。
## 用法
```
# VirusTotal 已知文件 — 无需传输
python malware_analyzer.py suspect.exe
# 如果 hash 未知,则允许提交
python malware_analyzer.py suspect.exe --upload
# 选择报告目标
python malware_analyzer.py suspect.exe -o rapports/incident-4821.md
```
### 选项
| 选项 | 作用 |
|---|---|
| `-o`, `--output` | 报告路径(默认:`rapport-virustotal.md`) |
| `-t`, `--template` | 自定义 Jinja2 模板 |
| `--upload` | 如果文件 hash 未知,允许上传该文件 |
### 退出码
| 退出码 | 含义 |
|---:|---|
| `0` | 未检测到威胁 |
| `1` | 文件被标记为恶意或可疑 |
| `2` | 错误(缺少密钥、超出配额、找不到文件) |
这些退出码使得该工具支持脚本化运行——例如在一个存放已隔离附件的目录中进行遍历:
```
for f in /quarantaine/*; do
python malware_analyzer.py "$f" -o "rapports/$(basename "$f").md" \
|| echo "À examiner : $f"
done
```
## 报告示例
针对 WannaCry 样本生成的完整报告可在 [`docs/exemple-rapport.md`](docs/exemple-rapport.md) 中查看——72 款引擎中有 61 款将其归类为恶意。
## 自定义报告
渲染由 [`templates/report.md.j2`](templates/report.md.j2) 控制。
模板中可使用的变量:
| 变量 | 内容 |
|---|---|
| `name` | 与样本相关的最常见名称 |
| `sha256`, `size`, `file_type` | 文件特征 |
| `threat_label` | 综合分类(例如:`ransomware.wannacry`) |
| `stats` | 各类别的判定分布 |
| `reputation`, `votes` | 社区信誉和投票 |
| `detections` | 检测到威胁的引擎(排除保持沉默的引擎) |
## 获取测试样本
本仓库**刻意不包含任何恶意二进制文件**。为了验证该工具是否有效,使用 EICAR 测试文件就足够了:它是无害的,但会被所有杀毒软件识别。
```
printf '%s' 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar.com
python malware_analyzer.py eicar.com
```
您的杀毒软件很可能会在文件创建时立即将其隔离——这是预期行为。
## 限制
- 公共 API 限制为**每分钟 4 次请求**,每天 500 次请求。
- 对于超过 32 MB 的文件,上传将使用专用 endpoint(自动处理)。
- VirusTotal 的判定是一系列线索的集合,而非确凿证据。对于传播范围较小的二进制文件或自行编译的程序,经常会出现误报。
## 许可证
MIT — 参见 [LICENSE](LICENSE)。
标签:DAST, Python, 威胁情报, 开发者工具, 恶意软件分析, 无后门, 网络调试, 自动化, 逆向工具