unknownspy333/PDF-Malware-Analyzer
GitHub: unknownspy333/PDF-Malware-Analyzer
一款基于 Python 的 PDF 恶意文件静态分析工具包,通过元数据检查、关键字扫描、对象解析、JavaScript 分析和 IOC 提取等步骤实现自动化风险评分与报告生成。
Stars: 0 | Forks: 0
# PDFSentinel — PDF 恶意软件分析工具包




一个基于 Python 的**静态分析工具包**,用于检测嵌入在 PDF 文件中的恶意内容。实现了 SOC 分析师和应急响应人员使用的完整分析 pipeline:metadata 检查、keyword 扫描、object 解析、JavaScript 分析、IOC 提取、风险评分以及自动化报告生成。
## 功能
| 模块 | 功能说明 |
|---|---|
| `PDFLoader` | 验证 magic bytes,计算 MD5/SHA-256 |
| `MetadataExtractor` | 提取作者、日期、生成器;标记异常 |
| `KeywordScanner` | 扫描 `/JavaScript`、`/OpenAction`、`/Launch` 等 |
| `ObjectParser` | 枚举 object,解压 FlateDecode/ASCIIHex 流 |
| `JavaScriptAnalyzer` | 检测 eval()、unescape()、heap spray、CVE 特征 |
| `IOCExtractor` | 提取 URL、IP、域名、路径、嵌入的 PE headers |
| `RiskScorer` | 加权 0–100 风险评分,包含 CRITICAL/HIGH/MEDIUM/LOW 等级划分 |
| `ReportGenerator` | 将 `.txt` + `.json` 报告保存到磁盘 |
## 项目结构
```
pdf_malware_analyzer/
│
├── main.py # Entry point — run analysis from CLI
│
├── core/
│ ├── pdf_loader.py # Step 1 — Load & validate PDF
│ ├── metadata_extractor.py # Step 2 — Extract document metadata
│ ├── keyword_scanner.py # Step 3 — Keyword-based detection
│ ├── object_parser.py # Step 4 — PDF object enumeration & decoding
│ ├── js_analyzer.py # Step 5 — JavaScript obfuscation analysis
│ ├── ioc_extractor.py # Step 6 — IOC extraction (URLs, IPs, hashes)
│ └── risk_scorer.py # Step 7 — Risk scoring engine
│
├── reports/
│ └── report_generator.py # Step 8 — Report generation (TXT + JSON)
│
├── utils/
│ ├── logger.py # Centralised logging
│ └── banner.py # CLI banner
│
├── tests/
│ └── test_toolkit.py # Unit tests (pytest)
│
├── samples/ # Place safe malicious PDF samples here
│ └── README.md
│
├── output/ # Generated reports appear here
│
├── docs/
│ ├── ARCHITECTURE.md # Full system architecture notes
│ └── ANALYSIS_GUIDE.md # How to interpret results
│
├── requirements.txt
├── .gitignore
└── README.md
```
## 分析 Pipeline
```
START
│
▼
[1] Load PDF → validate magic bytes (%PDF-), compute hashes
│
▼
[2] Extract Metadata → author, dates, producer, anomaly flags
│
▼
[3] Keyword Scan → /JavaScript /OpenAction /Launch /EmbeddedFile …
│
▼
[4] Object Parsing → enumerate objects, decompress FlateDecode streams
│
▼
[5] JavaScript Analysis → eval() unescape() heap spray CVE signatures
│
▼
[6] IOC Extraction → URLs, IPs, domains, WIN_PATH, embedded PE
│
▼
[7] Risk Scoring → weighted 0–100 score → CRITICAL/HIGH/MEDIUM/LOW
│
▼
[8] Report Generation → .txt + .json reports saved to output/
│
▼
END
```
## 快速开始
### 1. 克隆仓库
```
git clone https://github.com/PratikT33/pdf-malware-analyzer.git
cd pdf-malware-analyzer
```
### 2. 安装依赖
```
pip install -r requirements.txt
```
### 3. 运行分析
```
# 基本分析(TXT + JSON 报告)
python main.py samples/malicious_sample.pdf
# 指定输出文件夹
python main.py samples/malicious_sample.pdf --output reports/
# 仅 JSON 报告
python main.py samples/malicious_sample.pdf --format json
# 跳过 VirusTotal 查询
python main.py samples/malicious_sample.pdf --no-vt
# 详细模式
python main.py samples/malicious_sample.pdf --verbose
```
### 4. 运行单元测试
```
python -m pytest tests/ -v
```
## 示例输出
```
════════════════════════════════════════════════════════════════════════
PDFSentinel — Malware Analysis Report
Generated : 2024-11-20 14:32:11 UTC
════════════════════════════════════════════════════════════════════════
FILE INFORMATION
────────────────────────────────────────────────────────────────────────
Filename : invoice_q3_2024.pdf
SHA-256 : e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca...
Size : 142.3 KB
RISK ASSESSMENT
────────────────────────────────────────────────────────────────────────
Score : 82/100 ████████████████████████████████░░░░░░░░
Severity : CRITICAL
Summary : Risk Score 82/100 [CRITICAL] — 2 JS block(s), 6 IOC(s)
KEYWORD DETECTION
────────────────────────────────────────────────────────────────────────
[CRITICAL] /JavaScript ×2 — Embedded JavaScript block
[CRITICAL] /OpenAction ×1 — Action triggered on document open
[CRITICAL] /Launch ×1 — Launches external application
[HIGH ] /EmbeddedFile ×1 — Embedded file object
INDICATORS OF COMPROMISE (IOCs)
────────────────────────────────────────────────────────────────────────
[CRITICAL ] [URL ] hxxp://malware-c2[.]ru/payload/stage2.exe
[CRITICAL ] [EMBEDDED_PE] MZ header detected
[HIGH ] [IPv4 ] 185[.]234[.]219[.]14
```
## VirusTotal 集成
将你的 VirusTotal API key 设置为环境变量:
```
# Windows PowerShell
$env:VT_API_KEY = "your_api_key_here"
# Linux / macOS
export VT_API_KEY="your_api_key_here"
```
然后在不添加 `--no-vt` 标志的情况下运行分析。可以在 [https://www.virustotal.com](https://www.virustotal.com) 获取免费的 API key。
## 获取安全的恶意 PDF 样本
用于学术研究的安全样本来源:
- [MalwareBazaar](https://bazaar.abuse.ch/) — 需要注册
- [Contagio Malware Dump](https://contagiodump.blogspot.com/) — 仅供学术使用
- [TheZoo / VirusShare](https://virusshare.com/) — 面向已注册的研究人员
- 使用 `pdfid` + 示例 exploit 脚本自己制作(在 sandbox 中运行)
## 本项目中引用的工具
| 工具 | 用途 |
|---|---|
| `pdfid.py` | 快速 keyword 梳理 |
| `pdf-parser.py` | 深度 object 检查 |
| `peepdf` | 交互式 PDF shell + JS 分析 |
| `qpdf` | 解压缩 / 规范化 |
| `strings` | 提取人类可读的字符串 |
| `VirusTotal API` | 基于 hash 的威胁情报 |
## 风险评分方法
| 分数 | 严重程度 | 操作建议 |
|---|---|---|
| 0–20 | CLEAN | 未检测到威胁 |
| 21–40 | LOW | 轻微指标 — 人工验证 |
| 41–60 | MEDIUM | 可疑 — 建议 sandbox 分析 |
| 61–80 | HIGH | 强烈的恶意指标 — 阻止并上报 |
| 81–100 | CRITICAL | 高置信度恶意 — 立即隔离 |
分数计算总和包括:
- Keyword 检测(最高 35 分)
- JavaScript 分析(最高 40 分)
- IOC 数量(最高 20 分)
- Object 异常(最高 10 分)
## 免责声明
本工具包仅用于**教育和学术目的**。
它仅执行**静态分析** — 绝不执行 PDF 文件中的任何内容。请始终在隔离、离线的虚拟机中分析不受信任的文件。
## 许可证
MIT License — 详情请参阅 [LICENSE](LICENSE)。
标签:DNS 反向解析, PDF分析, Python, 云安全监控, 威胁情报, 安全规则引擎, 库, 应急响应, 开发者工具, 搜索语句(dork), 无后门, 网络信息收集, 逆向工具, 静态分析