marez8505/MalwareLab
GitHub: marez8505/MalwareLab
一款基于纯 Python 实现的静态二进制分析框架,用于在不执行文件的情况下解析 PE/ELF 结构、检测恶意特征并生成风险评估报告。
Stars: 0 | Forks: 0
# MalwareLab
**用于恶意软件分类的静态二进制分析工具**
MalwareLab 对 PE (Windows) 和 ELF (Linux) 可执行文件执行静态分析,而无需执行它们。它使用纯 Python `struct` 操作在字节级别解析二进制头部——这与 PEstudio、PE-bear 和 Detect It Easy 等专业工具所采用的基本方法相同。
## 功能概述
| 模块 | 功能 |
|--------|-----------|
| `pe_parser.py` | 解析 PE32/PE32+ DOS 头、COFF 头、Optional 头、节表、导入/导出表、资源 |
| `elf_parser.py` | 解析 ELF32/ELF64 头、程序头、节头、符号表、动态链接 |
| `entropy_analyzer.py` | 计算每个节的 Shannon 熵并生成 ASCII 热力图——检测加壳/加密节 |
| `packer_detector.py` | 通过节名称和字节签名识别 UPX、ASPack、Themida、VMProtect、MPRESS |
| `import_analyzer.py` | 标记 12 个威胁类别中的可疑 Windows API 导入 |
| `string_analyzer.py` | 提取并分类字符串——URL、IP、注册表键、C2 指标、勒索信 |
| `behavior_mapper.py` | 将所有发现映射到 MITRE ATT&CK Enterprise 技术 |
| `risk_scorer.py` | 生成 0-100 的综合恶意软件风险评分,包含证据加权组件 |
| `report_generator.py` | 生成深色主题 HTML 报告和机器可读 JSON 输出 |
## 快速开始
```
# 安装
git clone https://github.com/edwardmarez/malwarelab
cd malwarelab
pip install -e .
# 生成示例 binaries(无需联网)
python sample_binaries/generate_samples.py
# 运行 demo
python -m malwarelab demo
# 分析文件
python -m malwarelab analyze --file sample_binaries/suspicious_sample.exe
# 生成 HTML 报告
python -m malwarelab report --file sample_binaries/suspicious_sample.exe --format html --output ./report
```
## CLI 参考
```
python -m malwarelab [options]
```
| 命令 | 描述 | 示例 |
|---------|-------------|---------|
| `analyze` | 完整管道——所有模块 | `analyze --file sample.exe` |
| `pe-info` | 显示 PE 头 | `pe-info --file sample.exe` |
| `elf-info` | 显示 ELF 头 | `elf-info --file sample.elf` |
| `entropy` | 熵热力图 | `entropy --file sample.exe [--blocks]` |
| `imports` | 导入表分析 | `imports --file sample.exe [--suspicious-only]` |
| `strings` | 字符串提取 | `strings --file sample.exe [--min-length 6]` |
| `report` | 生成 HTML/JSON 报告 | `report --file sample.exe --format html --output ./out` |
| `demo` | 使用合成样本演示 | `demo` |
## 示例输出
```
███╗ ███╗ █████╗ ██╗ ██╗ ██╗ █████╗ ██████╗ ███████╗
...
L A B
Static Binary Analysis Tool for Malware Triage
[*] File: suspicious_sample.exe
Size: 6.2 KB
Type: PE
MD5: 8f14e45fceea167a5a36dedd4bea2543
SHA256: 6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b
[+] Parsing PE headers...
PE Type: PE32 Machine: IMAGE_FILE_MACHINE_I386 (0x014C)
Sections: 4 Imports: 6 DLLs
[+] Running entropy analysis...
File entropy: 5.3421/8.0
Packing likelihood: Unlikely
[+] Detecting packers...
Clean
[+] Analyzing imports...
6 DLLs, 31 total imports
Suspicious: 24
Categories: process_injection, keylogging, network, crypto, privilege_escalation, screen_capture, anti_debug
[+] Extracting strings...
Extracted: 47 strings
Suspicious: 12
C2 indicators: 2
IPs: 45.33.32.156
[+] Mapping MITRE ATT&CK techniques...
11 techniques across 6 tactics
Threat: Data Theft / Infostealer, Remote Access Trojan (RAT)
[+] Computing risk score...
═══════════════════════════════════════════════════════════════════
RISK SCORE: 78/100 [HIGH]
HIGHLY SUSPICIOUS — Likely malicious
Risk Score: 78/100 [HIGH]
[███████████████████████████████████████░░░░░░░░░░░]
0 25 50 75 100
═══════════════════════════════════════════════════════════════════
Recommended Actions:
• Monitor for CreateRemoteThread and WriteProcessMemory system calls using EDR
• Implement application allow-listing to prevent unauthorized hook installation
• Block suspicious outbound connections at perimeter firewall and inspect DNS
• Maintain offline backups; monitor for mass file rename/encryption activity
```
## 静态分析与动态分析
**静态分析** 在不执行文件的情况下检查它。MalwareLab 直接读取二进制结构:
- 零执行风险——基本分类无需沙箱
- 检查导入表、字符串、熵和结构
- 快速——通常在 1 秒内完成
- **局限性:** 可能被加壳和混淆绕过
**动态分析** 在受控环境(沙箱)中执行样本:
- 观察实际运行时行为(API 调用、网络流量、文件写入)
- 在解压后捕获混淆代码
- 需要隔离环境
- **MalwareLab 建议:** 始终在静态分析之后,使用 Cuckoo、ANY.RUN 或 Joe Sandbox 进行动态分析
## PE 格式说明
可移植可执行文件 (PE) 格式是 Windows 可执行文件 (`.exe`、`.dll`、`.sys`) 的标准二进制格式。
```
┌───────────────────────────────┐
│ DOS Header │ Offset 0x00 — "MZ" magic, e_lfanew pointer
│ DOS Stub ("This program...") │
├───────────────────────────────┤
│ PE Signature ("PE\0\0") │ At e_lfanew offset — confirms PE format
├───────────────────────────────┤
│ COFF File Header (20 bytes) │ Machine type, section count, timestamp
├───────────────────────────────┤
│ Optional Header (224 bytes) │ Entry point, image base, data directories
│ ├─ Data Directory[0] │ Export Table RVA
│ ├─ Data Directory[1] │ Import Table RVA ← most important
│ ├─ Data Directory[2] │ Resource Table RVA
│ └─ ...16 total... │
├───────────────────────────────┤
│ Section Table │ Array of 40-byte section headers
│ .text (code) │
│ .data (initialized data) │
│ .rdata (read-only strings) │
│ .idata (imports) │
│ .rsrc (resources) │
├───────────────────────────────┤
│ Raw Section Data │ Actual binary content at PointerToRawData
└───────────────────────────────┘
```
**关键概念:**
- **RVA (相对虚拟地址):** 加载到内存时距离 ImageBase 的偏移量
- **File Offset:** 磁盘上文件内的物理位置
- **节特征:** 指示 `READ`、`WRITE`、`EXECUTE` 权限的标志
## 为什么导入是可疑的
导入地址表 (IAT) 告诉我们二进制文件调用了哪些 Windows API 函数。许多合法的 API 也被恶意软件滥用:
| API | 合法用途 | 恶意用途 |
|-----|----------------|---------------|
| `CreateRemoteThread` | 调试器、分析器 | 代码注入到其他进程 |
| `VirtualAllocEx` | 内存管理 | 在远程进程中为 shellcode 分配内存 |
| `WriteProcessMemory` | 调试器 | 将 shellcode/DLL 路径写入目标进程 |
| `SetWindowsHookEx` | 辅助功能、宏软件 | 键盘记录器——捕获系统范围内的所有击键 |
| `CryptEncrypt` | 安全通信 | 为勒索软件加密文件 |
| `IsDebuggerPresent` | 开发者构建 | 检测分析师是否正在调试——然后改变行为 |
| `RegSetValueEx` | 配置持久化 | 将恶意软件添加到 Run 键以实现自启动 |
| `URLDownloadToFile` | 更新机制 | 下载额外的恶意软件阶段 |
| `AdjustTokenPrivileges` | 服务管理 | 提升至 SYSTEM 级别权限 |
**关键指标是组合:** 一个同时导入 `CreateRemoteThread` + `VirtualAllocEx` + `WriteProcessMemory` 的文件没有合法解释——这是经典的 DLL 注入三要素。
## 熵的意义
Shannon 熵在 0-8 的范围内测量字节序列的随机性:
```
0.0 ──── 1.0 ──── 2.0 ──── 4.0 ──── 6.0 ──── 7.0 ──── 8.0
│ │ │ │ │ │
Zeros NOP ASCII Mixed PACKED Random
sleds sleds text data sections key
```
| 范围 | 分类 | 含义 |
|-------|----------------|-------------|
| 0.0 – 1.0 | 接近零熵 | 全零或 NOP 滑行——可能的 shellcode 暂存区 |
| 1.0 – 4.0 | 低熵 | ASCII 字符串、明文数据 |
| 4.0 – 6.0 | 正常熵 | 编译代码、混合数据 |
| 6.0 – 7.0 | 升高熵 | 可能指示编码数据或嵌入的归档 |
| **7.0 – 8.0** | **高熵** | **加壳、压缩或加密节** |
**加壳工具** (UPX、ASPack、Themida) 压缩并加密原始代码,产生熵 > 7.0 的节。加壳二进制文件通常也只有极少的导入(仅包含 `LoadLibraryA` + `GetProcAddress` 以在运行时引导真实的导入表)。
## 加壳检测
MalwareLab 通过三种方法检测加壳工具:
1. **节名称匹配:** UPX 总是将其节命名为 `UPX0`/`UPX1`。VMProtect 使用 `.vmp0`/`.vmp1`。这些都是显而易见的。
2. **字节签名:** 在原始二进制数据中搜索 `UPX!` 标记 (0x55505821) 和 ASPack 入口点存根模式。
3. **启发式分析:** 如果 `file_entropy > 7.0` 且 `import_count < 5`,则该二进制文件可能被未知或自定义加壳工具加壳。
| 加壳工具 | 严重性 | 检测置信度 | 备注 |
|--------|----------|---------------------|-------|
| UPX | 中 | 确定 | 易于解压:`upx -d ` |
| ASPack | 高 | 高 | 商业加壳工具——更难解压 |
| MPRESS | 中 | 高 | 类似于 UPX |
| Themida | 严重 | 高 | 代码虚拟化——非常困难 |
| VMProtect | 严重 | 高 | 自定义 VM 字节码——抗分析 |
## MITRE ATT&CK 映射
每个可疑发现都映射到 [MITRE ATT&CK Enterprise 框架](https://attack.mitre.org/):
```
Import: CreateRemoteThread → T1055.001 (DLL Injection)
Import: SetWindowsHookEx → T1056.001 (Keylogging)
Import: CryptEncrypt → T1486 (Data Encrypted for Impact)
Import: IsDebuggerPresent → T1622 (Debugger Evasion)
String: http://c2.xyz/gate → T1071.001 (Web Protocols C2)
UPX detected → T1027.002 (Software Packing)
High entropy section → T1027 (Obfuscated Files)
```
`behavior_mapper.py` 导出兼容 Navigator 的 JSON 层,可导入 [MITRE ATT&CK Navigator](https://mitre-attack.github.io/attack-navigator/)。
## 风险评分
综合风险评分 (0-100) 是来自所有模块的证据加权总和:
| 组件 | 最高分 | 触发条件 |
|-----------|-----------|--------------|
| 进程注入 | 18 | `CreateRemoteThread`、`VirtualAllocEx` 等 |
| 检测到加壳 | 15 | UPX/ASPack/Themida/VMProtect 签名 |
| 高熵 | 15 | 熵 > 7.0 的节 |
| C2 指标 | 15 | 字符串中的硬编码 C2 URL/IP |
| 权限提升 | 12 | `AdjustTokenPrivileges`、令牌操作 |
| 加密/勒索软件 | 12 | `CryptEncrypt` + 勒索软件字符串 |
| 网络/C2 | 12 | 网络 API (WSA、WinInet、WinHTTP) |
| 键盘记录 | 12 | `SetWindowsHookEx`、`GetAsyncKeyState` |
| 加密字符串 | 12 | 比特币/勒索信文本 |
| 可疑字符串 | 10 | 检测到 5 个以上可疑字符串 |
| 加密 API | 10 | 加密 API 使用 |
| 导入风险 | 10 | 综合导入风险评分 |
| ATT&CK 技术 | 8 | 映射的不同技术数量 |
| 反调试 | 8 | `IsDebuggerPresent` 及相关 API |
| 反虚拟机/分析 | 8 | 虚拟机工件字符串、计时 API |
## 项目结构
```
MalwareLab/
├── malwarelab/
│ ├── __init__.py # Package init
│ ├── __main__.py # python -m malwarelab entry point
│ ├── main.py # CLI: analyze, pe-info, elf-info, entropy, imports, strings, report, demo
│ ├── pe_parser.py # Pure Python PE parser (struct-based)
│ ├── elf_parser.py # Pure Python ELF parser (struct-based)
│ ├── entropy_analyzer.py # Shannon entropy + text heatmap
│ ├── packer_detector.py # Signature-based packer detection
│ ├── import_analyzer.py # Import categorization + ATT&CK mapping
│ ├── string_analyzer.py # String extraction and classification
│ ├── behavior_mapper.py # MITRE ATT&CK behavior mapping
│ ├── risk_scorer.py # Composite risk scoring
│ ├── report_generator.py # HTML and JSON report generation
│ └── utils.py # Shared utilities (hashes, formatting, constants)
├── signatures/
│ ├── packer_signatures.json
│ ├── suspicious_imports.json
│ ├── suspicious_strings.json
│ └── mitre_import_map.json
├── sample_binaries/
│ ├── generate_samples.py # Synthetic PE/ELF binary generator
│ └── README.md
├── tests/
│ ├── test_pe_parser.py
│ ├── test_elf_parser.py
│ ├── test_entropy.py
│ └── test_import_analyzer.py
├── requirements.txt
├── setup.py
├── LICENSE
└── README.md
```
## 运行测试
```
# 安装依赖
pip install jinja2
# 运行所有测试
python -m pytest tests/ -v
# 运行单个测试文件
python -m unittest tests.test_pe_parser -v
python -m unittest tests.test_elf_parser -v
python -m unittest tests.test_entropy -v
python -m unittest tests.test_import_analyzer -v
```
## 依赖项
| 包 | 用途 |
|---------|---------|
| `jinja2` | HTML 报告模板渲染 |
| Python stdlib: `struct` | 二进制解析 (PE/ELF 头) |
| Python stdlib: `re` | 字符串模式匹配 |
| Python stdlib: `math` | Shannon 熵计算 |
| Python stdlib: `hashlib` | MD5/SHA1/SHA256 哈希 |
| Python stdlib: `argparse` | CLI 参数解析 |
所有二进制解析 (PE/ELF) 均使用 **纯 Python `struct.unpack`**,零第三方二进制依赖。这是有意为之——在字节级别理解格式是恶意软件分析的一项基本技能。
## 道德使用
MalwareLab 适用于:
- 学习恶意软件分析和逆向工程概念
- SOC 分析师分类可疑文件
- 安全研究人员和教育工作者
**始终在隔离环境中分析恶意软件**(禁用网络的虚拟机或专用沙箱)。切勿在生产系统上运行可疑二进制文件。
## 致谢
PE 格式规范由 Microsoft 记录在 [PE Format (Win32 Apps)](https://docs.microsoft.com/en-us/windows/win32/debug/pe-format)。
ELF 规范由 [System V ABI](https://refspecs.linuxfoundation.org/elf/elf.pdf) 维护。
MITRE ATT&CK 由 [The MITRE Corporation](https://attack.mitre.org/) 维护。
*MalwareLab v1.0.0 — 作者:Edward Marez — MIT License*
标签:C2检测, DAST, DNS 反向解析, DNS 解析, ELF解析器, IP 地址批量处理, MITRE ATT&CK映射, PE解析器, Python安全工具, 二进制分析, 云安全监控, 云安全运维, 加壳检测, 勒索软件分析, 威胁情报, 字符串提取, 安全取证, 安全工具开发, 导入表分析, 库, 应急响应, 开发者工具, 恶意软件分析, 熵值计算, 网络信息收集, 网络安全审计, 逆向工具, 静态分析, 风险评分