ng-sudo/malware-hash-lookup
GitHub: ng-sudo/malware-hash-lookup
一款支持本地与 VirusTotal 在线双引擎比对的恶意软件哈希查询与批量扫描工具。
Stars: 1 | Forks: 0
# 恶意软件哈希数据库与查询工具
一款全面的 Python 工具,用于计算文件哈希值(MD5、SHA1、SHA256、SHA512),并通过在线数据库(VirusTotal API)和本地哈希数据库进行比对以进行恶意软件检测。
## 功能
- **哈希计算**:支持 MD5、SHA1、SHA256、SHA512,并为大文件提供进度条
- **VirusTotal 集成**:查询 VirusTotal API v3 进行恶意软件检测
- **本地哈希数据库**:
- 带有元数据(恶意软件名称、家族、来源、标签)的 SQLite 数据库
- 用于快速查询的简单文本文件数据库
- **多种接口**:CLI 工具、Python API、批量扫描
- **灵活的输出**:表格、JSON 和简单文本格式
- **配置**:基于 INI 的配置,包含 API 密钥管理
- **示例数据库**:预装了已知的恶意软件哈希(EICAR、WannaCry、NotPetya 等)
## 安装
```
# Clone repository
git clone https://github.com/ng-sudo/malware-hash-lookup.git
# 切换到目录
cd malware_hash_lookup
# 安装依赖
pip install -r requirements.txt
```
### 前置条件
- Python 3.7+
- requests
- click
- colorama
- tqdm
- python-dotenv
## 快速开始
### 1. 配置 VirusTotal API(可选)
```
# 从 https://www.virustotal.com/gui/my-apikey 获取你的 API key
malware_hash_lookup.py config --key YOUR_API_KEY
```
### 2. 创建示例数据库(用于测试)
```
malware_hash_lookup.py create-db --sample
```
### 3. 扫描文件
```
malware_hash_lookup.py scan suspicious_file.exe
```
### 4. 查询哈希
```
malware_hash_lookup.py lookup d41d8cd98f00b204e9800998ecf8427e
```
### 5. 批量扫描目录
```
malware_hash_lookup.py batch ./samples --recursive -e exe -e dll
```
## 使用示例
### 扫描单个文件
```
malware_hash_lookup.py scan malware_sample.exe
```
输出:
```
======================================================================
FILE: malware_sample.exe
======================================================================
FILE HASHES:
MD5 : d41d8cd98f00b204e9800998ecf8427e
SHA1 : da39a3ee5e6b4b0d3255bfef95601890afd80709
SHA256 : e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
LOCAL DATABASE MATCHES:
[MATCH] SHA256: EICAR-Test-File (Test) [eicar]
VIRUSTOTAL: MALICIOUS DETECTED
Name: EICAR-Test-File
Detection: 45/72 engines
Top detections:
Kaspersky: EICAR-Test-File (not a virus)
Microsoft: EICAR-Test-File
...
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
THREAT DETECTED: This file matches known malware!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Source: LOCAL_DB
Malware: EICAR-Test-File
Family: Test
Hash: SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
```
### 直接查询哈希
```
malware_hash_lookup.py lookup 275a021bbfb6489e54d471899f7db9d1663fc695ec2fe2a2c4538aabf651fd0f
```
### 仅显示匹配项的批量扫描
```
malware_hash_lookup.py batch ./samples --recursive --only-matches -e exe -e dll -e sys
```
### 导出/导入哈希数据库
```
# 导出到文本文件
malware_hash_lookup.py export hashes.txt --type sha256
# 从文本文件导入
malware_hash_lookup.py import hashes.txt --type sha256 --source mysource
```
### 将文件哈希添加到本地数据库
```
malware_hash_lookup.py add-hash suspicious_file.exe
```
### 查看统计信息
```
malware_hash_lookup.py stats
```
## 配置
该工具使用 `config.ini` 进行配置:
```
[config]
virustotal_api_key = YOUR_API_KEY_HERE
local_hash_db_path = ./hash_database/malware_hashes.db
hash_algorithms = md5,sha1,sha256
output_format = table
verbose = false
vt_rate_limit = 4
```
### VirusTotal API 密钥
1. 在 [VirusTotal](https://www.virustotal.com/) 创建账号
2. 前往 [我的 API 密钥](https://www.virustotal.com/gui/my-apikey)
3. 复制您的 API 密钥
4. 运行:`malware_hash_lookup.py config --key YOUR_API_KEY`
**速率限制:**
- 免费版:4 次请求/分钟
- 高级版:更高限制
## Python API 用法
```
from malware_hash_lookup import MalwareHashLookup, HashCalculator, VirusTotalAPI
# 初始化工具
tool = MalwareHashLookup()
# 扫描文件
results = tool.scan_file("suspicious.exe")
print(tool.format_results(results))
# 仅计算 hashes
calculator = HashCalculator(['md5', 'sha1', 'sha256'])
hashes = calculator.calculate_hashes("file.exe")
print(hashes)
# 直接 VirusTotal lookup
vt = VirusTotalAPI("YOUR_API_KEY")
result = vt.get_file_report("sha256_hash_here")
print(f"Malicious: {result.malicious}/{result.total_engines}")
# 使用本地 database
from malware_hash_lookup import LocalHashDatabase
db = LocalHashDatabase("./hash_database/malware_hashes.db")
matches = db.lookup_hash("sha256_hash")
```
## 数据库结构
### SQLite 数据库 (`malware_hashes.db`)
```
CREATE TABLE malware_hashes (
id INTEGER PRIMARY KEY AUTOINCREMENT,
hash_value TEXT NOT NULL,
hash_type TEXT NOT NULL, -- md5, sha1, sha256, sha512
malware_name TEXT,
malware_family TEXT,
source TEXT, -- eicar, virustotal, manual, imported
tags TEXT, -- JSON array
first_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE(hash_value, hash_type)
);
```
### 文本文件数据库 (`malware_hashes.txt`)
简单格式 - 每行一个哈希值:
```
d41d8cd98f00b204e9800998ecf8427e
da39a3ee5e6b4b0d3255bfef95601890afd80709
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
```
## 包含的示例哈希
示例数据库包含以下哈希:
- **EICAR 测试文件**(标准防病毒测试文件)
- **WannaCry** 勒索软件
- **NotPetya/ExPetr** 清除型恶意软件
- **Emotet** 银行木马
- **TrickBot** 银行木马
- **Mirai** IoT 僵尸网络
## 输出格式
### 表格(默认)
带有颜色区分的表格,包含文件信息、哈希值和检测结果。
### JSON
用于脚本编写的机器可读格式:
```
{
"file": "suspicious.exe",
"hashes": {
"md5": "...",
"sha1": "...",
"sha256": "..."
},
"matches": [...],
"virustotal": {...}
}
```
### 简单文本
用于快速扫描的简明文本输出。
## 退出码
- `0`:干净(未找到匹配项)
- `1`:检测到恶意软件(找到匹配项)
- `2`:发生错误
## 构建独立可执行文件
```
pip install pyinstaller
pyinstaller --onefile malware_hash_lookup.py
```
可执行文件将位于 `dist/malware_hash_lookup.exe`
## 项目结构
```
malware_hash_lookup/
├── malware_hash_lookup.py # Main CLI entry point
├── hash_calculator.py # Hash calculation module
├── virustotal_api.py # VirusTotal API integration
├── local_hash_db.py # Local database modules
├── config.ini # Configuration file
├── requirements.txt # Python dependencies
├── hash_database/ # Local hash databases
│ ├── malware_hashes.db # SQLite database
│ └── malware_hashes.txt # Text file database
└── README.md
```
## 许可证
MIT 许可证 - 详情请参阅 LICENSE 文件。
## 免责声明
本工具仅供教育和授权的安全测试目的使用。
在扫描文件或系统之前,请务必确保您已获得适当的授权。
示例恶意软件哈希均来自公开已知的样本和测试文件。
## 资源
- [VirusTotal API 文档](https://developers.virustotal.com/reference)
- [EICAR 测试文件](https://www.eicar.org/download-anti-malware-testfile/)
- [恶意软件哈希数据库](https://bazaar.abuse.ch/)
- [MITRE ATT&CK](https://attack.mitre.org/)
标签:Ask搜索, CLI, Python, VirusTotal, WiFi技术, 哈希计算, 域名侦查, 威胁情报, 开发者工具, 无后门, 逆向工具