anpa1200/Basic-File-Information-Gathering-Script
GitHub: anpa1200/Basic-File-Information-Gathering-Script
面向恶意软件分析师和 SOC 团队的 Python 静态分析工具,支持从 PE、ELF、Mach-O 等多种文件格式中批量提取哈希、元数据、字符串特征与 YARA 匹配结果,输出 JSON/CSV 便于自动化集成。
Stars: 2 | Forks: 0
# 基础文件信息收集脚本
[](https://www.python.org/)
[](https://lief.quarkslab.com/)
一款多功能的 Python 工具,用于从文件中提取全面的元数据和特征。专为**恶意软件分析师**、**数字取证人员**和 **SOC 工程师**打造。
## 📖 指南:如何使用(含截图)
**→ [一个工具统领一切:面向恶意软件分析师和 SOC 团队的文件元数据与静态分析](https://medium.com/@1200km/one-tool-to-rule-them-all-file-metadata-static-analysis-for-malware-analysts-and-soc-teams-c6dba1f5b7de)** (Medium 文章)
包含截图的分步指南:安装、`fileinfo.py` 与 `Basic_inf_gathering.py` 的对比、哈希、字符串、YARA、完整静态分析以及 MalwareBazaar 工作流。
## 两种接口
| 脚本 | 应用场景 |
|--------|----------|
| **`fileinfo.py`** | **推荐使用。** 批量模式、JSON/CSV、PE/ELF/Mach-O、字符串、可选 YARA/ssdeep/tlsh。 |
| **`Basic_inf_gathering.py`** | 单文件,仅支持人类可读表格输出(原始行为)。 |
## fileinfo.py — 强大且稳健
### 功能
- **哈希**:MD5, SHA-1, SHA-256, SHA-384, SHA-512(单次遍历);安装后可选 **ssdeep** 和 **tlsh**。
- **格式**:**PE** (Rich header, overlay, resources, signature, packing)、**ELF** (entry, interpreter, sections/segments)、**Mach-O** (entry, commands)。
- **Magic numbers**:60多种文件类型(可执行文件、压缩包、文档、媒体)。
- **字符串**:提取 ASCII 和 UTF-16 LE,具有可配置的最小长度。
- **输出**:人类可读表格、**JSON** 或 **CSV**;可选输出文件。
- **批量**:支持多个文件和/或**递归目录** (`-r`)。
- **可选 YARA**:当提供了 `yara-python` 和规则文件时,可进行规则扫描。
- **完整静态分析** (`--full`):最大的元数据提取,**不包含反编译或代码分析**:
- **字节级**:空字节比率、可打印字符比率、字节频率、最长空字节连续块。
- **Entropy map**:按块计算熵值,以发现加壳/加密区域。
- **Head/tail hex dump**:开头和结尾的字节,用于结构检查。
- **字符串模式**:URL、IPv4、电子邮件、Windows/Unix 路径、注册表键(从原始字节中提取)。
- **PE 深入分析**:机器类型、子系统、DLL 特征 (ASLR, DEP 等)、节表 (名称, 大小, 熵)、完整的导入/导出列表、exphash、重定位、TLS 回调、延迟导入、Rich header、资源类型、版本信息 (FileVersion, CompanyName 等)。
- **ELF 深入分析**:类型、机器架构、sections/segments、动态项 (NEEDED, RPATH, RUNPATH)、导出/导入符号、notes。
- **Mach-O 深入分析**:CPU 类型、文件类型、dylibs、segments、UUID。
- **容器**:ZIP 文件列表(名称、大小);OLE 流列表(可选 `olefile`)。
### 安装
```
git clone https://github.com/anpa1200/Basic-File-Information-Gathering-Script.git
cd Basic-File-Information-Gathering-Script
# 在 Debian/Ubuntu 上,确保 venv 支持:sudo apt install python3-venv
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
python3 -m pip install -r requirements.txt
# 可选:pip install ssdeep py-tlsh yara-python
# 用于真实恶意软件下载 + 分析:pip install requests pyzipper
```
### 安装故障排除
- **`ModuleNotFoundError: No module named 'lief'`** — 在激活虚拟环境(见下文)的情况下,在项目目录内安装依赖。使用安装了这些包的同一 Python 运行脚本(例如在激活 venv 后执行 `python3 Basic_inf_gathering.py file.exe`)。
- **`venv/bin/activate: No such file or directory`** 或 **`venv/bin/python3: No such file or directory`** — 虚拟环境未完全创建。在 Debian/Ubuntu 上,你需要安装 `python3-venv` 包:
sudo apt update
sudo apt install python3-venv
rm -rf venv
python3 -m venv venv
source venv/bin/activate
python3 -m pip install -r requirements.txt
然后在 venv 处于激活状态时,使用 `python3 fileinfo.py ...` 或 `python3 Basic_inf_gathering.py ...` 运行脚本。
- **`venv/bin/pip: cannot execute: required file not found`** — 虚拟环境损坏(例如 Python 路径已更改)。从**项目根目录**(即 `requirements.txt` 所在的目录)重新创建它,如果需要请安装 `python3-venv` 包(见上文)。然后执行:
rm -rf venv
python3 -m venv venv
source venv/bin/activate
python3 -m pip install -r requirements.txt
- **不使用 venv / 偏好系统级安装** — 你可以使用系统 Python 为当前用户安装依赖(无需 venv):
python3 -m pip install --user -r requirements.txt
python3 fileinfo.py /path/to/file.exe
### 使用方法
```
# 单个文件(表格)
python3 fileinfo.py /path/to/file.exe
# 多个文件
python3 fileinfo.py file1.exe file2.bin
# 递归目录
python3 fileinfo.py -r /path/to/samples/
# JSON 输出
python3 fileinfo.py --json /path/to/file.exe
# CSV(用于电子表格 / 自动化)
python3 fileinfo.py --csv -r ./samples/ -o report.csv
# 额外 hashes + strings
python3 fileinfo.py --hashes md5,sha1,sha256,sha512 --strings --min-str-len 8 file.exe
# YARA 扫描
python3 fileinfo.py --yara /path/to/rules.yar file.exe
# 跳过特定的二进制分析
python3 fileinfo.py --no-elf --no-macho /path/to/pe_only/
# 完整静态分析(最大 metadata,无反编译)
python3 fileinfo.py --full /path/to/sample.exe
python3 fileinfo.py --full --json sample.exe -o full_report.json
```
### 选项
| 选项 | 描述 |
|--------|-------------|
| `paths` | 一个或多个文件或目录。 |
| `-r`, `--recursive` | 递归进入目录。 |
| `--json` | 输出 JSON。 |
| `--csv` | 输出 CSV (每个文件一行)。 |
| `-o`, `--output` | 将输出写入文件。 |
| `--hashes` | 以逗号分隔:md5, sha1, sha256, sha384, sha512。 |
| `--no-fuzzy` | 禁用 ssdeep/tlsh。 |
| `--strings` | 提取 ASCII + Unicode 字符串。 |
| `--min-str-len` | 最小字符串长度(默认 6)。 |
| `--no-pe` / `--no-elf` / `--no-macho` | 跳过指定格式的分析。 |
| `--yara` | YARA 规则文件的路径。 |
| `--full` | 完整的静态分析:字节统计、entropy map、head/tail hex、字符串模式 (URL、IP、路径、注册表)、PE/ELF/Mach-O 深入分析 (sections、imports/exports、relocs、版本信息等)、ZIP/OLE 列表。不进行反编译。 |
| `-v`, `--verbose` | 将详细错误信息输出到 stderr。 |
## Basic_inf_gathering.py — 简单的单文件分析
### 使用方法
```
python3 Basic_inf_gathering.py
```
- 仅限单文件分析。
- 输出:到 stdout 的详细表格(PE 时间戳、imphash、哈希、熵、权限、magic numbers、文件类型、数字签名、入口点、加壳器)。
### 依赖
- **Python** 3.7+
- **LIEF**: `pip install lief`
- **cryptography**(可选,用于查看 PE 证书详情):`pip install cryptography`
## 示例 (fileinfo.py)
```
# 单个 PE 的表格输出
$ python3 fileinfo.py sample.exe
# 用于自动化的 JSON
$ python3 fileinfo.py --json sample.exe -o report.json
# 批量 CSV
$ python3 fileinfo.py --csv -r ./malware_samples/ -o summary.csv
# 包含 strings 和 YARA
$ python3 fileinfo.py --strings --yara rules.yar sample.exe
# 最大静态信息(无反编译)
$ python3 fileinfo.py --full sample.exe
$ python3 fileinfo.py --full --json sample.exe -o full.json
```
## 使用真实恶意软件进行测试(来自野外)
要在**真实的 Windows PE 恶意软件**上运行该工具并与 MalwareBazaar 的元数据进行比对:
1. 从 [abuse.ch 身份验证](https://auth.abuse.ch/) **获取免费的 API 密钥**(MalwareBazaar 必需)。
2. **安装依赖**:`pip install requests pyzipper`
3. **下载样本并运行完整分析**:
```
export ABUSE_CH_AUTH_KEY='your-key-here'
# 下载一个最近的样本(API 从最近的检测中选取)并运行 --full 分析
python3 download_malware_sample.py
# 通过已知的 SHA256 下载(例如来自公开报告)
python3 download_malware_sample.py 9FDEA40A9872A77335AE3B733A50F4D1E9F8EFF193AE84E36FB7E5802C481F72
# 通过标签(例如 Emotet, TrickBot)下载然后分析
python3 download_malware_sample.py --tag Emotet --limit 1
```
`malware_samples//` 下每个样本的输出内容:
- 解压后的二进制文件(如果未压缩则为 `sample.bin`)
- **`our_analysis.json`** — 来自 `fileinfo.py --full --json` 的完整静态分析报告
- **`bazaar_info.json`** — 用于比对的 MalwareBazaar 元数据(签名、imphash、ssdeep、标签等)
对比 `our_analysis.json` 和 `bazaar_info.json` 之间的哈希、imphash、文件类型以及 PE/字符串分析结果(以及你拥有的关于该哈希值的任何公开报告)。
## 项目结构
- **`fileinfo.py`** — 主 CLI:哈希、PE/ELF/Mach-O、字符串、YARA、`--full` 静态分析。
- **`static_analysis.py`** — 深度静态分析模块(字节统计、entropy map、PE/ELF/Mach-O 深入分析、字符串模式、ZIP/OLE)。在设置了 `--full` 时调用。
- **`download_malware_sample.py`** — 从 MalwareBazaar (abuse.ch) 下载真实的 Windows PE 样本,运行完整分析,并保存 Bazaar 的元数据用于比对。
- **`Basic_inf_gathering.py`** — 旧版单文件表格脚本。
## 依赖要求
- **Python** 3.8+(适用于 `fileinfo.py`),3.7+(适用于 `Basic_inf_gathering.py`)
- **LIEF**:用于 PE/ELF/Mach-O 解析(必需)
- **cryptography**:可选,用于查看 PE 数字签名详情
- **ssdeep** / **py-tlsh**:可选,用于模糊哈希
- **yara-python**:可选,用于 YARA 扫描
- **olefile**:可选,用于在 `--full` 模式中列出 OLE/复合文档流
## 相关仓库与文章
| 资源 | 链接 |
|----------|------|
| **Basic-File-Information-Gathering-Script (本仓库)** | [GitHub](https://github.com/anpa1200/Basic-File-Information-Gathering-Script) · [Medium: 文件元数据与静态分析](https://medium.com/@1200km/one-tool-to-rule-them-all-file-metadata-static-analysis-for-malware-analysts-and-soc-teams-c6dba1f5b7de) |
| **Static-malware-Analysis-Orchestrator** | [GitHub](https://github.com/anpa1200/Static-malware-Analysis-Orchestrator) — 一键流水线 (分类, strings, PE imports, unpack) · [Medium: 完整工作流](https://medium.com/@1200km/basic-static-malware-analysis-from-triage-to-unpacking-explained-and-automated-9442ef3b11b8) |
| **String-Analyzer** | [GitHub](https://github.com/anpa1200/String-Analyzer-) · [Medium: String Analyzer 指南](https://medium.com/@1200km/a-practical-guide-to-string-analyzer-extract-and-analyze-strings-from-binaries-without-the-875dc74e4868) |
| **PE-Import-Analyzer** | [GitHub](https://github.com/anpa1200/PE-Import-Analyzer) · [Medium: PE Import Analyzer 指南](https://medium.com/@1200km/pe-import-analyzer-a-practical-guide-for-malware-analysts-and-reverse-engineers-29b8b98aeaf3) |
| **Unpacker** | [GitHub](https://github.com/anpa1200/Unpacker) · [Medium: Unpacker 指南](https://medium.com/@1200km/unpacker-a-practical-guide-to-modular-malware-packer-detection-and-unpacking-cf8ba924f25b) |
| **作者** | [Medium @1200km](https://medium.com/@1200km) |
## 许可证
有关详细信息,请参阅 [LICENSE](LICENSE)。
标签:DAST, DNS 反向解析, ELF, IP 地址批量处理, LIEF, Mach-O, PE, Python, ssdeep, tlsh, YARA, 云安全监控, 云资产可视化, 元数据提取, 哈希计算, 库, 应急响应, 恶意软件分析, 数字取证, 数字取证, 文件格式解析, 无后门, 模糊哈希, 特征提取, 网络信息收集, 自动化脚本, 自动化脚本, 进程保护, 逆向工具, 静态分析