shwdaniel7/CERBERUS
GitHub: shwdaniel7/CERBERUS
CERBERUS 是一款基于 Python 的模块化静态恶意软件分析工具包,通过哈希信誉、文件头检查、熵值分析和字符串提取等手段在不执行可疑文件的前提下进行安全评估。
Stars: 0 | Forks: 0
CERBERUS
静态恶意软件分析工具包
在现代静态分析技术的帮助下,在执行前检查可疑文件。
由 arneb 制作 • @shwdaniel7
## ⚠ 警告
CERBERUS 是一个教育性质的静态分析工具包。它会在不执行目标二进制文件的情况下,检查文件元数据、文件头、嵌入的字符串、熵值以及哈希信誉。
- 仅对您拥有或被授权分析的文件使用此工具。
- 它不是沙箱,不会执行可疑文件。
- 它演示的是静态恶意软件分析的概念,而不是行为监控。
## 📖 关于
CERBERUS 是一个基于 Python 的静态恶意软件分析工具包,旨在执行前检查可疑文件。它利用本地数据和 VirusTotal 运行文件分类检查、签名信誉查询、字符串提取、熵评估和文件类型验证。
该应用程序被组织成多个小模块,分别处理用户交互、哈希计算、信誉检查、报告生成、字符串分析、熵计算和文件头检查。
这些模块在 `analyzer.py` 中组合成一个由命令驱动的分析器,该分析器使用 Tkinter 进行文件选择,并使用简单的 CLI 菜单进行扫描选择。
## ✨ 功能
CERBERUS 实现了三种扫描配置:
| 配置 | 启用的引擎 | 报告输出 |
|---|---|---|
| 完整扫描 | 本地黑名单、VirusTotal 查询、字符串 IOC 扫描、Shannon 熵、magic number 文件头检查 | JSON 报告 |
| 快速扫描 | 本地黑名单、magic number 文件头检查 | 无报告 |
| 自定义扫描 | 用户选择的所有可用引擎组合 | 可选 JSON 报告 |
该工具包可以:
- 为所选文件计算 SHA-256 指纹
- 将指纹与 `iocs/blacklist.txt` 进行比对
- 使用 `.env` 中的 `VT_API_KEY` 查询 VirusTotal
- 通过 regex 匹配提取可疑字符串
- 计算文件随机性的 Shannon 熵
- 通过 magic bytes 识别文件类型并检测伪装的 PE 可执行文件
- 在 `reports/` 目录下生成结构化的 JSON 报告
## 📂 项目结构
```
CERBERUS/
├── analyzer.py
├── LICENSE
├── README.md
├── requirements.txt
├── .env
├── .gitignore
├── iocs/
│ ├── blacklist.txt
│ └── suspect_strings.txt
├── modules/
│ ├── colors.py
│ ├── entropy.py
│ ├── hashes.py
│ ├── magic_numbers.py
│ ├── menu.py
│ ├── reports.py
│ └── strings.py
├── reports/
```
- `analyzer.py` 是入口点,负责编排分析流程。
- `modules/` 包含每个分析引擎和实用工具。
- `iocs/` 存储用于黑名单和可疑字符串匹配的本地指标。
- `reports/` 是 JSON 报告文件的输出文件夹。
- `samples/requirements.txt` 包含项目使用的运行时依赖项。
模块化分离使信誉检查、静态分析和报告生成与用户交互层保持独立。
## 🔄 分析工作流
```
[Start] python analyzer.py
│
├─► File selection (Tkinter dialog)
│
├─► Menu selection
│ ├─ Full Scan
│ ├─ Quick Scan
│ └─ Custom Scan
│
├─► Optional SHA-256 hash calculation
│
├─► Optional local blacklist lookup
│
├─► Optional VirusTotal lookup
│
├─► Optional magic number header inspection
│
├─► Optional Shannon entropy analysis
│
├─► Optional suspicious string extraction
│
├─► Optional JSON report generation
│
└─► End
```
## 🚀 安装说明
```
git clone https://github.com/shwdaniel7/CERBERUS.git
cd CERBERUS
pip install -r requirements.txt
```
## 🔑 配置
CERBERUS 使用 `python-dotenv` 从 `.env` 加载 VirusTotal API 密钥。
使用以下内容创建或更新 `.env`:
```
VT_API_KEY=your_virustotal_api_key_here
```
如果缺少 `.env` 或未设置 `VT_API_KEY`,VirusTotal 查询将优雅失败并报告连接错误,而不会中断整体扫描流程。
## 💻 用法
在仓库根目录下运行该工具包:
```
python analyzer.py
```
应用程序会打开一个文件选择器。选择目标文件后,选择以下扫描配置之一:
```
1 - Full Scan (All checks + Report)
2 - Quick Scan (Local Blacklist + Header)
3 - Custom Scan (Choose your options)
```
### 交互示例
```
[?] Select scan type (1-3): 1
[*] Profiling: Full Scan selected. Activating all engines...
--- Generating file signature ---
[+] SHA256:
--- Consulting local blacklist ---
[+] Hash clean in local control list.
--- Querying VirusTotal API ---
[->] VirusTotal: File not found or unknown in their database.
--- Verifying magic signature ---
[+] Detected real type: Windows Executable (EXE/DLL)
--- Calculating Shannon entropy ---
[+] Entropy score: 7.12/8.0
[->] Status: NORMAL: Low randomness (Standard readable code/text)
--- Analyzing file strings ---
Total number of strings: 134
Alerts found: 0
--- Exporting results ---
[+] Dynamic report generated on: reports/report_filename_.json
```
## 🧩 分析引擎
### `modules/colors.py`
- 负责 ANSI 终端着色。
- 提供红色、绿色、黄色、青色和粗体输出的文本包装器。
- 被 `analyzer.py` 和 `modules/menu.py` 用于保持 CLI 输出易于阅读。
### `modules/hashes.py`
- 根据所选文件计算 SHA-256。
- 读取 `iocs/blacklist.txt` 以获取本地哈希信誉。
- 使用 `requests` 和 `.env` 中的 `VT_API_KEY` 执行 VirusTotal 查询。
- 返回人类可读的 API 结果状态字符串。
### `modules/magic_numbers.py`
- 读取文件头的前 4 个字节。
- 匹配已知的 EXE、ELF、PDF、PNG、GIF、JPEG 和 ZIP/Office 归档文件的 magic 签名。
- 当使用非可执行扩展名时,标记伪装的 Windows PE 文件。
### `modules/entropy.py`
- 计算文件中所有字节的 Shannon 熵。
- 使用 256 区间的频率分布。
- 对压缩格式和媒体格式的高熵进行不同分类。
- 根据实现阈值报告 `CRITICAL`、`SUSPICIOUS` 或 `NORMAL`。
### `modules/strings.py`
- 使用 regex 从二进制内容中提取可打印的类 ASCII 字符串。
- 从 `iocs/suspect_strings.txt` 加载可疑指标。
- 报告任何与本地 IOC 术语匹配的嵌入字符串。
- 返回提取的字符串和任何触发的警报。
### `modules/reports.py`
- 在 `reports/` 下生成结构化的 JSON 输出。
- 包含元数据、选定的引擎、签名、VirusTotal 结果、熵值、检测到的文件类型、magic 警报和字符串警报。
- 如果 `reports/` 文件夹不存在,则创建它。
### `modules/menu.py`
- 呈现 CLI 扫描配置菜单。
- 实现完整扫描、快速扫描和自定义扫描模式。
- 将用户的选择映射到供 `analyzer.py` 使用的引擎激活标志。
## 🔬 技术概念
### SHA-256
CERBERUS 计算所选文件的 SHA-256 摘要,并将其用于本地黑名单匹配和 VirusTotal 查询。
### VirusTotal 查询
该工具包查询 `https://www.virustotal.com/api/v3/files/{hash}` 并报告来自 `last_analysis_stats` payload 的检测计数。
### Magic Numbers
CERBERUS 检查文件头字节以确定真实的文件类型。它将非可执行扩展名内的 Windows PE 头视为伪装警告。
### Shannon 熵
熵是根据字节频率分布计算的。该实现报告高随机性的风险级别,并将压缩的媒体格式视为预期的高熵情况。
### IOC 匹配和 regex 提取
使用用于可打印序列的 regex 模式从原始文件字节中提取嵌入的字符串。将这些字符串与本地 `iocs/suspect_strings.txt` 列表进行可疑术语比对。
## 📄 示例报告
```
{
"metadata": {
"archive_name": "suspicious_sample.exe",
"full_path": "C:/samples/suspicious_sample.exe",
"kb_size": 145.76,
"analysis_date": "2026-06-26 12:34:56"
},
"signatures": {
"sha256": "24d004a104d4d540340c7831432f90a5..."
},
"virustotal_analysis": {
"virustotal": "Flagged by VirusTotal: 3/82 antivírus detectaram perigo."
},
"statistics_analysis": {
"blacklist_local": "Clean / Not found",
"entropy_analysis": {
"score": 7.12,
"status": "NORMAL: Low randomness (Standard readable code/text)"
},
"magic_number_analysis": {
"detected_type": "Windows Executable (EXE/DLL)",
"masquerade_alert": "None (Extension matches header)"
},
"total_alerts": 1,
"alerts": [
"Suspect term found: 'kernel32'. Trigger: 'kernel32'."
]
}
}
```
## 📚 技术
- Python
- Tkinter
- requests
- python-dotenv
- JSON
- Windows 文件处理
## ⚖ 法律声明
提供 CERBERUS 旨在用于教育、恶意软件分析、数字取证和安全研究。
作者对误用、未经授权的扫描或基于结果采取的任何行为不承担任何责任。
仅对您被允许分析的文件使用此项目。标签:DAST, Homebrew安装, Python, 云安全监控, 恶意软件分析, 无后门, 逆向工具, 静态分析