unknownspy333/PDF-Malware-Analyzer

GitHub: unknownspy333/PDF-Malware-Analyzer

一款基于 Python 的 PDF 恶意文件静态分析工具包,通过元数据检查、关键字扫描、对象解析、JavaScript 分析和 IOC 提取等步骤实现自动化风险评分与报告生成。

Stars: 0 | Forks: 0

# PDFSentinel — PDF 恶意软件分析工具包 ![Python](https://img.shields.io/badge/Python-3.10%2B-blue) ![License](https://img.shields.io/badge/License-MIT-green) ![Purpose](https://img.shields.io/badge/Purpose-Blue%20Team%20%2F%20SOC-cyan) ![Status](https://img.shields.io/badge/Status-Academic%20Project-orange) 一个基于 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), 无后门, 网络信息收集, 逆向工具, 静态分析