Ahmed-Emad-Nasr/3omda-PDFparser-tool

GitHub: Ahmed-Emad-Nasr/3omda-PDFparser-tool

一个蓝队导向的PDF静态恶意软件分析工具包,通过自动化解析PDF内部结构提取JavaScript、IOC等威胁指标并生成带风险评分的分析报告。

Stars: 0 | Forks: 0

# 📄 PDF 恶意软件分析工具包 ![Python](https://img.shields.io/badge/Python-3.x-blue) ![静态分析](https://img.shields.io/badge/Analysis-Static-green) ![PDF 安全](https://img.shields.io/badge/Focus-PDF%20Malware-red) ![状态](https://img.shields.io/badge/Project-Active-brightgreen) ![许可证](https://img.shields.io/badge/Use-Educational-yellow) ![蓝队](https://img.shields.io/badge/Team-Blue%20Team-0066cc) 一个基于 Python 的 **PDF 静态恶意软件分析工具包**,通过检查 PDF 文件的内部结构来检测恶意行为,例如内嵌的 JavaScript、混淆的 payload、可疑的 stream、提取的文本以及内嵌的文件。 本工具包在单一的自动化解决方案中复制了 **pdfid、pdf-parser、peepdf、qpdf 和 strings** 等专业工具的方法论。 ## 👤 作者 **Ahmed Emad Nasr** - 🔒 角色:SOC Analyst | Incident Response | Cybersecurity Blue Team - 🎯 专长:PDF Malware Analysis, Static Malware Analysis, Threat Detection - 💼 重点:Blue Team Operations & Threat Hunting ## 📜 许可证 本项目基于 MIT 许可证发布。完整文本请参见 [LICENSE](LICENSE)。 ## 🎯 项目目标 设计一个能够实现以下功能的工具包: - 理解 PDF 内部结构 - 枚举 object 和 stream - 检测恶意 JavaScript - 提取可读文本内容 - 分析可疑文本模式 - 提取 IOC (Indicators of Compromise) - 检测内嵌的恶意 payload - 执行自动化风险评估 - 生成结构化的恶意软件分析报告 ## 🧠 工具包工作流程 ``` Input PDF → Metadata Extraction → Object Enumeration → Stream Extraction & Decoding → Text Extraction & Analysis → JavaScript Extraction & Analysis → Keyword Detection → IOC Extraction → Embedded File Detection → Risk Scoring → Report Generation ``` ## 🧩 功能 ### 核心分析 - ✅ 元数据分析(作者、创建者、日期) - ✅ 从原始 PDF 结构中枚举 object - ✅ Stream 检测和 zlib 解压 - ✅ 内嵌文件提取和分析 ### JavaScript 检测 - ✅ JavaScript 恶意软件检测(`eval`、`unescape`、`ActiveXObject`) - ✅ 混淆模式识别 - ✅ `/OpenAction`、`/AA`、`/JS`、`/JavaScript` 扫描 - ✅ Shellcode 模式检测 - ✅ 完整的 JavaScript 代码提取 ### 文本分析 - ✅ 从所有 stream 中提取字面文本 - ✅ Hex 字符串解码 - ✅ 文本中的 URL 检测 - ✅ 电子邮件地址提取 - ✅ IP 地址发现 - ✅ 可疑关键词扫描 - ✅ 编码字符串检测(Base64、hex) ### 风险评估 - ✅ 自动化严重程度评分引擎 - ✅ 风险等级分类(LOW、MEDIUM、HIGH、CRITICAL) - ✅ 详细的原因追踪 - ✅ 威胁模式匹配 ### 报告生成 - ✅ 详细的恶意软件分析报告生成 - ✅ 完整的 IOC 提取摘要 - ✅ 风险评估详细分解 ## 🛠️ 灵感来源技术 | 工具包功能 | 行业工具等效项 | |--------------------|--------------------------| | 关键词检测 | pdfid | | Object 解析 | pdf-parser | | Stream 解码 | qpdf | | JavaScript 分析 | peepdf | | IOC 搜索 | strings | | 文本提取 | Strings 实用工具 | | JavaScript 反混淆 | 动态分析工具 | ## 📂 项目结构 ``` PDF-Malware-Analysis-Toolkit/ ├── main.py # Main execution script ├── core.py # Core analysis functions ├── report_generator.py # Report generation module ├── mPDF.py # PDF creation utilities ├── make-pdf-helloworld.py # Test PDF generator ├── make-pdf-javascript.py # Malicious PDF generator ├── README.md # This file ├── LICENSE # License information ├── reports/ # Generated reports directory ├── extracted_files/ # Extracted embedded files └── diagrams/ # Analysis flow diagrams ``` ## ▶️ 使用方法 ### 基本用法 ``` python main.py ``` 出现提示时,请提供: - **单个 PDF 文件**:`/path/to/file.pdf` - **包含 PDF 的目录**:`/path/to/folder/` ### 命令示例 #### 分析单个 PDF 文件: ``` python main.py # 输入: C:\Users\3omda\Desktop\malware.pdf ``` #### 分析文件夹中的所有 PDF: ``` python main.py # 输入: C:\Users\3omda\Desktop\pdf_samples/ ``` #### 生成测试 PDF: ``` # 创建基本 PDF python make-pdf-helloworld.py # 创建带有恶意 JavaScript 的 PDF python make-pdf-javascript.py ``` ## 📊 分析输出 ### 控制台输出 ``` ===== Analyzing: malware.pdf ===== === OBJECT ENUMERATION === Total Objects: 15 Stream Objects: ['1', '3', '5', '7'] === KEYWORDS === /JS : 1 /JavaScript : 1 /OpenAction : 1 /AA : 0 /EmbeddedFile : 2 /URI : 3 === TEXT EXTRACTION === Total Text Length: 2345 characters URLs Found: ['http://malicious.com', 'https://c2.evil.net'] Emails Found: ['attacker@evil.com'] IP Addresses: ['192.168.1.100', '10.0.0.5'] Suspicious Keywords: ['click here', 'download', 'enable'] === JAVASCRIPT ANALYSIS === JavaScript Objects Found: 3 ⚠️ DANGEROUS FUNCTIONS DETECTED: - eval execution - unescape function - String.fromCharCode - ActiveXObject === MALWARE FINDINGS === - eval() usage - unescape() usage - Base64 payload - URL found - IP Address === RISK ASSESSMENT === CRITICAL | Score: 145 - /JS detected - /JavaScript detected - eval() usage - Dangerous JS functions: eval execution, unescape function, String.fromCharCode - URLs in text: 2 - JavaScript code found: 3 objects ``` ### 报告文件 在 `reports/report_[filename].txt` 中生成 ``` PDF MALWARE ANALYSIS REPORT ============================================================ Analyzed File: malware.pdf Time: 2026-05-11 14:30:45.123456 === METADATA === Author: Unknown Creator: Microsoft Word Producer: GPL Ghostscript CreationDate: 2024-01-15 === OBJECT ENUMERATION === Total Objects: 15 Stream Objects: [1, 3, 5, 7] === KEYWORD SCAN === /JS: 1 /JavaScript: 1 /OpenAction: 1 /AA: 0 /EmbeddedFile: 2 /URI: 3 === TEXT EXTRACTION ANALYSIS === Total Text Length: 2345 characters URLs Found (2): - http://malicious.com - https://c2.evil.net Emails Found (1): - attacker@evil.com IP Addresses Found (2): - 192.168.1.100 - 10.0.0.5 Suspicious Keywords Found (3): - click here - download - enable === JAVASCRIPT ANALYSIS === Total JavaScript Objects: 3 ⚠️ DANGEROUS FUNCTIONS DETECTED (4): - eval execution - unescape function - String.fromCharCode - ActiveXObject === RISK ASSESSMENT === Severity: CRITICAL Score: 145 - /JS detected - /JavaScript detected - eval() usage - Dangerous JS functions detected - URLs in text: 2 - JavaScript code found: 3 objects ``` ## 🔍 分析函数参考 ### 在 `core.py` 中 #### `extract_metadata(pdf_path)` - **用途**:提取 PDF 元数据 - **返回值**:包含 Author、Creator、Producer、CreationDate 的字典 - **用法**:`metadata = extract_metadata("file.pdf")` #### `enumerate_objects(pdf_text)` - **用途**:查找 PDF 中的所有 object 和 stream - **返回值**:元组 (objects_list, streams_list, embedded_list) - **用法**:`objects, streams, embedded = enumerate_objects(pdf_text)` #### `extract_streams(pdf_text)` - **用途**:提取并解压 stream - **返回值**:拼接后的 stream 内容 - **用法**:`stream_content = extract_streams(pdf_text)` #### `extract_text(pdf_text)` - **用途**:从 PDF stream 和 object 中提取可读文本 - **返回值**:提取文本的字符串 - **用法**:`text = extract_text(pdf_text)` #### `extract_javascript(pdf_text)` - **用途**:从 PDF 中提取 JavaScript 代码 - **返回值**:JavaScript 代码片段列表 - **用法**:`js_list = extract_javascript(pdf_text)` #### `analyze_javascript(js_list)` - **用途**:分析 JavaScript 中的恶意模式 - **返回值**:包含危险函数和模式的字典 - **用法**:`js_analysis = analyze_javascript(js_list)` #### `analyze_extracted_text(text)` - **用途**:分析提取的文本以获取 IOC - **返回值**:包含 URL、email、IP、关键词的字典 - **用法**:`text_analysis = analyze_extracted_text(text)` #### `keyword_scan(text)` - **用途**:扫描 PDF 恶意软件关键词 - **返回值**:包含关键词计数的字典 - **用法**:`keywords = keyword_scan(text)` #### `malware_scan(text)` - **用途**:检测恶意软件模式 - **返回值**:恶意软件发现结果列表 - **用法**:`findings = malware_scan(text)` #### `calculate_risk(keys, findings, embedded_count, text_analysis, js_analysis)` - **用途**:计算风险分数和严重程度 - **返回值**:元组 (severity, score, reasons) - **用法**:`severity, score, reasons = calculate_risk(keys, findings, count, text_analysis, js_analysis)` #### `extract_embedded_files(pdf_text, output_dir)` - **用途**:提取并保存内嵌文件 - **返回值**:提取文件的数量 - **用法**:`count = extract_embedded_files(pdf_text, "extracted_files")` ## 📈 风险评分逻辑 | 发现项 | 分数 | 类别 | |---------|--------|----------| | 检测到 PDF 关键词 (/JS、/JavaScript、/AA、/OpenAction、/URI、/EmbeddedFile) | +10 | 关键词 | | 发现恶意软件模式 (eval、unescape、Base64、shellcode、URL、IP) | +20 | 模式 | | 提取到内嵌文件 | +30 | 内嵌文件 | | 文本中包含 URL | +15 | 文本分析 | | 文本中包含可疑关键词 | +10 | 文本分析 | | 文本中包含编码字符串 | +10 | 文本分析 | | 发现 JavaScript object | +25 | JavaScript | | 检测到危险的 JS 函数 (eval、unescape、ActiveXObject 等) | +40 | JavaScript | ### 严重程度分类 | 分数范围 | 严重程度 | |------------|----------| | 0-24 | LOW | | 25-49 | MEDIUM | | 50-79 | HIGH | | 80+ | CRITICAL | ## 🎓 学习资源 ### PDF 恶意软件分析概念 1. **PDF 结构**:Object、stream、cross-reference table、trailer 2. **PDF 中的 JavaScript**:动作触发器(/OpenAction、/AA)及其安全隐患 3. **混淆技术**:Hex 编码、字符串操作、转义字符 4. **IOC 类型**:URL、电子邮件地址、IP 地址、文件哈希、域名 5. **威胁情报**:模式识别、威胁行为者 TTP 追踪 ### 用于对比的工具 - **pdfid**:快速 PDF 扫描 - **pdf-parser**:详细的 object 分析 - **peepdf**:交互式 PDF 分析 - **qpdf**:PDF 操作与分析 - **Didier Stevens 的 PDF 工具**:高级分析 ## 🔐 安全注意事项 - ⚠️ 本工具包仅执行**静态分析** - ⚠️ 请在隔离/沙箱环境中分析可疑 PDF - ⚠️ 在没有适当安全预防措施的情况下,请勿打开提取的文件 - ⚠️ 结合动态分析工具进行综合评估 - ⚠️ 保持威胁情报源更新 ## 📋 恶意软件检测示例场景 ### 场景 1:勒索软件 PDF ``` Detection: - /OpenAction detected - /JavaScript detected - eval() function found - URL pointing to attacker C2 server - Base64 encoded payload Risk Score: CRITICAL (125 points) ``` ### 场景 2:钓鱼 PDF ``` Detection: - Suspicious keywords: "click here", "enable", "download" - Email address extracted - URLs in text body - No JavaScript Risk Score: MEDIUM (35 points) ``` ### 场景 3:木马 PDF ``` Detection: - /AA trigger detected - Multiple JavaScript objects - Shellcode patterns in streams - Embedded EXE file Risk Score: CRITICAL (150 points) ``` ## 🐛 故障排除 ### 问题:“File not found”错误 **解决方案**:提供 PDF 文件的绝对路径或确保文件存在 ### 问题:“Metadata extraction failed” **解决方案**:PDF 可能已损坏或为非标准格式。分析将继续进行。 ### 问题:报告未生成 **解决方案**:确保 `reports/` 目录存在并具有写入权限 ### 问题:大型 PDF 处理耗时过长 **解决方案**:这对于大文件来说是正常现象。Stream 解压过程需要消耗大量资源。 ## 📚 参考资料与灵感来源 - Didier Stevens 的 PDF 工具 - SANS Institute PDF 恶意软件分析 - Adobe PDF 规范 - 社区驱动的恶意软件研究 ## 📄 许可证 仅供教育用途。详情请参见 LICENSE 文件。 ## 🤝 贡献 欢迎提供反馈和改进建议。本工具包专为以下人员设计: - Blue Team 安全分析师 - Incident Response 团队 - Cybersecurity 研究人员 - 恶意软件分析专业人员 ## 📞 支持 如有问题或疑问,请参阅工具包文档和行业恶意软件分析资源。 **最后更新**:2026 年 5 月 11 日 **版本**:2.0(增强了文本和 JavaScript 分析) CRITICAL | 分数:90 ## 📑 报告包含 - 元数据详细信息 - Object 和 stream 枚举 - 关键词扫描结果 - 恶意软件发现结果和 IOC - 内嵌文件 object - 风险严重程度分数 ## 🎓 学习成果 本项目展示了: - 静态恶意软件分析 - 对 PDF 内部机制的理解 - 基于 JavaScript 的攻击检测 - 使用 IOC 模式进行 Threat Hunting - 自动化取证报告 ## ⚠️ 免责声明 本项目仅供**教育和研究目的**使用。 ## 👨‍💻 作者 PDF 恶意软件分析工具包项目
标签:DNS 反向解析, DNS 解析, Go语言工具, IOC提取, JavaScript提取, payload检测, PDF恶意软件分析, Python, SOC分析工具, 云安全监控, 威胁情报, 安全工具包, 对象和流检查, 库, 应急响应, 开发者工具, 情报收集, 教育目的, 数字取证, 文件格式分析, 无后门, 混淆分析, 漏洞研究, 瑞士军刀, 网络安全, 自动化脚本, 自动化风险评分, 隐私保护, 静态分析