performing-static-malware-analysis-with-pe-studio

使用 PEStudio 对 Windows PE(可移植可执行文件)恶意软件样本进行静态分析, 检查文件头、导入表、字符串、资源和指标,无需执行二进制文件。 识别可疑特征,包括加壳、反分析技术和恶意导入。适用于静态恶意软件分析、 PE 文件检查、Windows 可执行文件分析或执行前恶意软件分级等请求场景。

9 stars

Best use case

performing-static-malware-analysis-with-pe-studio is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

使用 PEStudio 对 Windows PE(可移植可执行文件)恶意软件样本进行静态分析, 检查文件头、导入表、字符串、资源和指标,无需执行二进制文件。 识别可疑特征,包括加壳、反分析技术和恶意导入。适用于静态恶意软件分析、 PE 文件检查、Windows 可执行文件分析或执行前恶意软件分级等请求场景。

Teams using performing-static-malware-analysis-with-pe-studio should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/performing-static-malware-analysis-with-pe-studio/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/performing-static-malware-analysis-with-pe-studio/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/performing-static-malware-analysis-with-pe-studio/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How performing-static-malware-analysis-with-pe-studio Compares

Feature / Agentperforming-static-malware-analysis-with-pe-studioStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

使用 PEStudio 对 Windows PE(可移植可执行文件)恶意软件样本进行静态分析, 检查文件头、导入表、字符串、资源和指标,无需执行二进制文件。 识别可疑特征,包括加壳、反分析技术和恶意导入。适用于静态恶意软件分析、 PE 文件检查、Windows 可执行文件分析或执行前恶意软件分级等请求场景。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 使用 PEStudio 进行静态恶意软件分析

## 适用场景

- 已收集到可疑 Windows 可执行文件,在沙箱执行前需要进行初步分级
- 需要在不运行样本的情况下识别揭示恶意软件功能的导入、字符串和资源
- 确定 PE 文件是否被加壳、混淆或包含反分析技术
- 提取二进制文件中嵌入的入侵指标(哈希、URL、IP、注册表键)
- 根据导入表和节特征对样本能力进行分类

**不适用**于需要执行的动态行为分析;运行时行为观测请使用沙箱(Cuckoo、ANY.RUN)。

## 前置条件

- PEStudio(免费版,来自 https://www.winitor.com/),安装在隔离的分析工作站上
- Python 3.8+,配合 `pefile` 库进行脚本化 PE 分析(`pip install pefile`)
- CFF Explorer 或 PE-bear 作为辅助 PE 分析工具
- VirusTotal API 访问权限,用于哈希查询和社区情报
- 隔离的分析虚拟机,不与生产系统进行网络连接
- FLOSS(FireEye Labs 混淆字符串求解器),用于提取混淆字符串

## 工作流程

### 步骤 1:计算文件哈希并验证样本完整性

生成加密哈希用于识别和情报查询:

```bash
# 生成 MD5、SHA-1 和 SHA-256 哈希
md5sum suspect.exe
sha1sum suspect.exe
sha256sum suspect.exe

# 对照 VirusTotal 检查哈希
curl -s -X GET "https://www.virustotal.com/api/v3/files/$(sha256sum suspect.exe | cut -d' ' -f1)" \
  -H "x-apikey: $VT_API_KEY" | jq '.data.attributes.last_analysis_stats'

# 使用魔术字节验证获取文件类型
file suspect.exe
```

### 步骤 2:检查 PE 头和节表

在 PEStudio 中打开样本并检查结构属性:

```
PEStudio 分析要点:
━━━━━━━━━━━━━━━━━━━━━━━━━
文件头:           编译时间戳、目标架构(x86/x64)
可选头:           入口点地址、镜像基址、子系统(GUI/控制台)
节表:             节名称、虚拟/原始大小、熵值
                   .text/.rsrc 中高熵(>7.0)提示加壳
签名:             Authenticode 签名的存在与有效性
```

**使用 pefile 进行脚本化 PE 头分析:**
```python
import pefile
import hashlib
import math

pe = pefile.PE("suspect.exe")

# 编译时间戳
import datetime
timestamp = pe.FILE_HEADER.TimeDateStamp
compile_time = datetime.datetime.utcfromtimestamp(timestamp)
print(f"编译时间:{compile_time} UTC")

# 带熵计算的节分析
for section in pe.sections:
    name = section.Name.decode().rstrip('\x00')
    entropy = section.get_entropy()
    raw_size = section.SizeOfRawData
    virtual_size = section.Misc_VirtualSize
    ratio = virtual_size / raw_size if raw_size > 0 else 0
    print(f"节:{name:8s} 熵:{entropy:.2f} 原始:{raw_size:>10} 虚拟:{virtual_size:>10} 比率:{ratio:.2f}")
    if entropy > 7.0:
        print(f"  [!] 高熵 - 可能已加壳或加密")
    if ratio > 10:
        print(f"  [!] 高虚拟/原始比率 - 可能存在解包桩")
```

### 步骤 3:分析导入地址表(IAT)

识别揭示恶意软件能力的可疑 API 导入:

```python
# 提取并分类导入
suspicious_imports = {
    "进程注入": ["VirtualAllocEx", "WriteProcessMemory", "CreateRemoteThread", "NtCreateThreadEx"],
    "键盘记录": ["GetAsyncKeyState", "SetWindowsHookExA", "GetKeyState"],
    "持久化": ["RegSetValueExA", "CreateServiceA", "SchTasksCreate"],
    "规避": ["IsDebuggerPresent", "CheckRemoteDebuggerPresent", "NtQueryInformationProcess"],
    "网络": ["InternetOpenA", "HttpSendRequestA", "URLDownloadToFileA", "WSAStartup"],
    "文件操作": ["CreateFileA", "WriteFile", "DeleteFileA", "MoveFileA"],
    "加密": ["CryptEncrypt", "CryptDecrypt", "CryptAcquireContextA"],
}

for entry in pe.DIRECTORY_ENTRY_IMPORT:
    dll_name = entry.dll.decode()
    for imp in entry.imports:
        if imp.name:
            func_name = imp.name.decode()
            for category, funcs in suspicious_imports.items():
                if func_name in funcs:
                    print(f"[!] {category}:{dll_name} -> {func_name}")
```

### 步骤 4:提取并分析字符串

使用 FLOSS 提取混淆字符串,并进行标准字符串提取:

```bash
# 标准字符串提取(ASCII 和 Unicode)
strings -a suspect.exe > strings_ascii.txt
strings -el suspect.exe > strings_unicode.txt

# 使用 FLOSS 提取解码/反混淆后的字符串
floss suspect.exe --output-json floss_output.json

# 在字符串中搜索网络指标
grep -iE "(http|https|ftp)://" strings_ascii.txt
grep -iE "([0-9]{1,3}\.){3}[0-9]{1,3}" strings_ascii.txt
grep -iE "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}" strings_ascii.txt

# 搜索注册表键
grep -i "HKLM\\|HKCU\\|SOFTWARE\\|CurrentVersion\\Run" strings_ascii.txt

# 搜索文件路径和扩展名
grep -iE "\.(exe|dll|bat|ps1|vbs|tmp)" strings_ascii.txt
```

### 步骤 5:检查资源和嵌入数据

检查 PE 资源节中嵌入的载荷或配置:

```python
# 从 PE 文件中提取资源
if hasattr(pe, 'DIRECTORY_ENTRY_RESOURCE'):
    for resource_type in pe.DIRECTORY_ENTRY_RESOURCE.entries:
        if hasattr(resource_type, 'directory'):
            for resource_id in resource_type.directory.entries:
                if hasattr(resource_id, 'directory'):
                    for resource_lang in resource_id.directory.entries:
                        data = pe.get_data(resource_lang.data.struct.OffsetToData,
                                          resource_lang.data.struct.Size)
                        entropy = calculate_entropy(data)
                        print(f"资源类型:{resource_type.id} 大小:{len(data)} 熵:{entropy:.2f}")
                        if entropy > 7.0:
                            print(f"  [!] 高熵资源 - 可能嵌入了载荷")
                        # 检查资源中的 PE 签名(嵌入的可执行文件)
                        if data[:2] == b'MZ':
                            print(f"  [!] 在资源中检测到嵌入的 PE")
                            with open(f"extracted_resource_{resource_type.id}.bin", "wb") as f:
                                f.write(data)
```

### 步骤 6:检查加壳和保护状态

确定二进制文件是否已加壳或受保护:

```bash
# 使用 Detect It Easy(DIE)检测加壳程序
diec suspect.exe

# 使用 PEiD 签名检查(命令行版本)
python3 -c "
import pefile
pe = pefile.PE('suspect.exe')
# 检查常见加壳程序节名称
packer_sections = {'.upx0': 'UPX', '.aspack': 'ASPack', '.adata': 'ASPack',
                   '.nsp0': 'NsPack', '.vmprotect': 'VMProtect', '.themida': 'Themida'}
for section in pe.sections:
    name = section.Name.decode().rstrip('\x00').lower()
    if name in packer_sections:
        print(f'[!] 检测到加壳程序:{packer_sections[name]}(节:{name})')

# 检查导入表大小(极少导入提示可能已加壳)
import_count = sum(len(entry.imports) for entry in pe.DIRECTORY_ENTRY_IMPORT)
if import_count < 10:
    print(f'[!] 只有 {import_count} 个导入 - 可能已加壳')
"
```

### 步骤 7:生成静态分析报告

将所有发现汇总为结构化分级报告:

```
每个分析样本须记录以下内容:
- 文件标识(哈希、文件类型、大小、编译时间戳)
- 加壳/保护状态及已识别的加壳程序
- 按能力分类的可疑导入
- 从字符串中提取的网络指标(IP、域名、URL)
- 嵌入资源及其特征
- 整体威胁评估和建议后续步骤(沙箱执行、YARA 规则创建)
```

## 核心概念

| 术语 | 定义 |
|------|------|
| **PE(可移植可执行文件)** | Windows 可执行文件(.exe、.dll、.sys)的文件格式,包含定义操作系统如何加载二进制文件的头、节、导入表和资源 |
| **导入地址表(IAT)** | PE 结构,列出可执行文件在运行时调用的外部 DLL 函数;揭示程序能力和意图 |
| **节熵** | PE 节中随机性的统计度量;值超过 7.0(满分 8.0)表示存在压缩、加密或加壳 |
| **FLOSS** | FireEye Labs 混淆字符串求解器;自动提取和解码标准 `strings` 命令无法发现的混淆字符串 |
| **加壳** | 对 PE 文件代码节进行压缩或加密以阻碍静态分析;需要运行时解包桩才能执行 |
| **PE 资源** | PE 文件中的数据节,可包含图标、对话框、版本信息,或攻击者嵌入的载荷和配置数据 |
| **编译时间戳** | PE 头中的时间戳,指示二进制文件的编译时间;可被伪造,但通常能揭示开发时间线 |

## 工具与系统

- **PEStudio**:免费 Windows PE 文件静态分析工具,在单一界面中提供指标、导入、字符串和资源检查
- **pefile(Python)**:用于以编程方式解析和分析 PE 文件结构的 Python 库,可用于自动化分析流程
- **FLOSS**:FireEye 工具,使用静态分析技术(包括栈字符串解码)从恶意软件中提取混淆字符串
- **Detect It Easy(DIE)**:加壳程序和编译器检测工具,识别构建 PE 文件所使用的保护程序、编译器和链接器
- **CFF Explorer**:高级 PE 编辑器和查看器,用于详细检查 PE 头、节、导入表和资源目录

## 常见场景

### 场景:对可疑电子邮件附件进行分级

**背景**:SOC 收到关于钓鱼邮件中可疑可执行文件附件的告警。在投入沙箱资源前,需要对文件进行快速分级以确定是否恶意。

**方法**:
1. 计算 SHA-256 哈希并查询 VirusTotal 以获取现有检测记录和社区评论
2. 在 PEStudio 中打开并检查指标选项卡中的红色/黄色标记项
3. 验证编译时间戳(未来日期或 1970 年的日期表示时间戳被篡改)
4. 检查导入表中的 VirtualAllocEx、CreateRemoteThread(注入)、URLDownloadToFileA(下载器)
5. 提取字符串并搜索 C2 URL、IP 地址和文件路径
6. 检查资源中是否有嵌入的 PE 文件或高熵数据块
7. 评估加壳状态;若已加壳,记录加壳程序并计划在深度分析前解包

**注意事项**:
- 不要在没有佐证证据的情况下信任 PE 编译时间戳(时间戳极易被伪造)
- 不要因为只有少量可疑导入就认定文件无害(已加壳的恶意软件会隐藏真实导入)
- 不要只运行 ASCII 字符串提取而遗漏 Unicode 字符串
- 不要忽视最后一个 PE 节之后附加的 overlay 数据(常见的配置数据隐藏位置)

## 输出格式

```
静态恶意软件分析报告
=================================
样本:            suspect.exe
MD5:             d41d8cd98f00b204e9800998ecf8427e
SHA-256:         e3b0c44298fc1c149afbf4c8996fb924...
文件大小:        245,760 字节
文件类型:        PE32 可执行文件(GUI)Intel 80386
编译时间:        2025-09-14 08:23:15 UTC

加壳状态
检测到加壳:      无(原生二进制文件)
节熵:            .text=6.42  .rdata=4.89  .data=3.21  .rsrc=7.81
备注:            .rsrc 节熵偏高 - 请检查资源

可疑导入
[注入]            kernel32.dll -> VirtualAllocEx
[注入]            kernel32.dll -> WriteProcessMemory
[注入]            kernel32.dll -> CreateRemoteThread
[规避]            kernel32.dll -> IsDebuggerPresent
[网络]            wininet.dll  -> InternetOpenA
[网络]            wininet.dll  -> HttpSendRequestA
[持久化]          advapi32.dll -> RegSetValueExA

提取的指标
URL:             hxxps://update.malicious[.]com/gate.php
IP:              185.220.101[.]42、91.215.85[.]17
注册表键:        HKCU\Software\Microsoft\Windows\CurrentVersion\Run\svchost
文件路径:        C:\Users\Public\svchost.exe

嵌入资源
资源 101:        大小=98304 熵=7.89 [!] 检测到嵌入的 PE
资源 102:        大小=4096  熵=2.14(配置 XML)

评估结果
威胁级别:        高
分类:            具有进程注入能力的投放器
建议措施:        在沙箱中执行,对嵌入的 PE 进行单独分析
```

Related Skills

reverse-engineering-rust-malware

9
from killvxk/cybersecurity-skills-zh

使用 IDA Pro 和 Ghidra 对 Rust 编译的恶意软件进行逆向工程,掌握处理非空终止字符串、提取 crate 依赖项和 Rust 特有控制流分析的专项技术。

reverse-engineering-malware-with-ghidra

9
from killvxk/cybersecurity-skills-zh

使用 NSA 的 Ghidra 反汇编器和反编译器对恶意软件二进制文件进行逆向工程,在汇编和伪 C 代码层面理解其内部逻辑、密码学例程、C2 协议和规避技术。适用于恶意软件逆向工程、反汇编分析、反编译、二进制分析或理解恶意软件内部机制等请求。

reverse-engineering-dotnet-malware-with-dnspy

9
from killvxk/cybersecurity-skills-zh

使用 dnSpy 反编译器和调试器对 .NET 恶意软件进行逆向工程,分析 C#/VB.NET 源代码,识别混淆技术,提取配置信息,理解包括信息窃取器、远程访问木马(RAT)和加载器在内的恶意功能。适用于 .NET 恶意软件分析、C# 恶意软件反编译、托管代码逆向工程或 .NET 混淆分析等请求。

reverse-engineering-android-malware-with-jadx

9
from killvxk/cybersecurity-skills-zh

使用 JADX 反编译器对恶意 Android APK 文件进行逆向工程,分析 Java/Kotlin 源代码,识别包括数据窃取、C2 通信、权限提升和覆盖攻击在内的恶意功能。检查 Manifest 权限、Receiver、Service 及原生库。适用于 Android 恶意软件分析、APK 逆向工程、移动端恶意软件调查或 Android 威胁分析等请求。

performing-yara-rule-development-for-detection

9
from killvxk/cybersecurity-skills-zh

通过识别可执行文件中的唯一字节模式、字符串和行为指标,开发精准的 YARA 恶意软件检测规则,同时将误报率降至最低。

performing-wireless-security-assessment-with-kismet

9
from killvxk/cybersecurity-skills-zh

使用 Kismet 通过被动射频监控进行无线网络安全评估,检测流氓接入点(Rogue AP)、隐藏 SSID、弱加密和未授权客户端。

performing-wireless-network-penetration-test

9
from killvxk/cybersecurity-skills-zh

执行无线网络渗透测试,通过捕获握手包、破解 WPA2/WPA3 密钥、检测流氓接入点以及使用 Aircrack-ng 和相关工具测试无线网络分段,评估 WiFi 安全性。

performing-windows-artifact-analysis-with-eric-zimmerman-tools

9
from killvxk/cybersecurity-skills-zh

使用 Eric Zimmerman 的开源 EZ Tools 套件(包括 KAPE、MFTECmd、PECmd、LECmd、JLECmd 和 Timeline Explorer)执行全面的 Windows 取证制品分析,解析注册表 hive、预取文件、事件日志和文件系统元数据。

performing-wifi-password-cracking-with-aircrack

9
from killvxk/cybersecurity-skills-zh

在授权无线安全评估中捕获 WPA/WPA2 握手包,并使用 aircrack-ng、hashcat 和字典攻击进行离线密码破解, 以评估密码短语强度和无线网络安全状况。

performing-web-cache-poisoning-attack

9
from killvxk/cybersecurity-skills-zh

在授权安全测试期间,通过未纳入缓存键的头部和参数毒化缓存响应,利用 Web 缓存机制向其他用户投递恶意内容。

performing-web-cache-deception-attack

9
from killvxk/cybersecurity-skills-zh

通过利用 CDN 缓存层与源服务器之间的路径规范化差异,执行 Web 缓存欺骗攻击,从而缓存并获取敏感的已认证内容。

performing-web-application-vulnerability-triage

9
from killvxk/cybersecurity-skills-zh

使用 OWASP 风险评级方法论对 DAST/SAST 扫描器的 Web 应用程序漏洞发现进行分类,区分真阳性和假阳性,并确定修复优先级。