逆向工程实战手册 第 17 章

第 17 章 恶意软件分析

恶意软件分析 = 在不执行或安全执行的前提下,搞清样本干什么、怎么通信、怎么感染、怎么防御。分静态和动态两条线,以及自动化沙箱辅助。

📍 知识点地图 | 主题:恶意软件分析 | 前置:第4-6章 | 后续:第42/74章 | 核心概念:六阶段、沙箱、YARA、IOC

17.1 六阶段分析框架(本仓库方法论)

Phase 1: 分类与哈希(不运行!)
Phase 2: 静态分析(字符串/导入/节区/PE 结构)
Phase 3: 行为分析(沙箱/虚拟环境运行观察)
Phase 4: 代码分析(逆向核心逻辑)
Phase 5: 规则产出(YARA/Sigma/IOC)
Phase 6: 报告

17.2 Phase 1: 分类与哈希

file sample
sha256sum sample                    # 哈希 = 身份
strings -n 8 sample | head -50
# 检测壳: Detect It Easy (DIE) / pe-sieve / Exeinfo PE
# 熵值: 高熵节区 → 加壳/加密(binwalk -E 或自写脚本)

17.3 Phase 2: 静态分析

rabin2 -I / -S / -i / -z sample     # 结构全览
# PE 专项
python3 -c "import pefile; pe=pefile.PE('sample'); [print(e.Name, e.VirtualAddress) for e in pe.sections]"
# 导入表: 看 API 猜行为
#  网络: InternetOpen/WinHttp → C2
#  注入: VirtualAllocEx/WriteProcessMemory → 进程注入
#  持久化: RegSetValueEx(CurrentVersion\Run) → 驻留
#  反分析: IsDebuggerPresent/VirtualProtect → 对抗

# 配置提取: 硬编码 C2、加密配置
#  很多家族配置可自动提取(或手工找 XOR/Base64 解)

17.4 Phase 3: 行为分析(沙箱)

# 本地隔离环境(首选)
docker run --rm -it --cap-drop ALL sample

# 自动化沙箱
# CAPE / Joe Sandbox / 微步云沙箱
# 观测: 进程树、网络连接、文件/注册表改动、注入行为

# 手动观测
strace -f -e trace=file,network sample    # Linux
procmon.exe sample                        # Windows

17.5 Phase 4: 代码分析

恶意软件逆向的特殊点:

□ 加壳是常态 → 先脱壳(UPX: upx -d / 自定义: 动态 dump)
□ 字符串加密 → 解密函数找到后批量解密
□ API 混淆(哈希解析导入)→ 识别哈希算法还原 API
□ 多阶段 → 每个 stage 独立分析,画数据流
□ C2 协议 → 逆向通信格式(第 9 章协议模式)
□ 环境检测 → 沙箱/VM 检测要提前识别(第 8 章)

17.6 Phase 5: 规则产出

YARA 规则(样本识别)

rule Win_Trojan_Example {
    meta:
        description = "示例木马"
        hash = "sha256:..."
    strings:
        $s1 = "GetProcAddress" ascii
        $s2 = { 6A 00 6A 00 68 00 00 00 00 }   // 十六进制特征
        $u1 = "http://c2.example.com" ascii wide
    condition:
        2 of ($s*) and $u1
}

Sigma 规则(行为检测)

title: 可疑 PowerShell 执行
logsource:
    category: process_creation
detection:
    selection:
        Image|endswith: '\powershell.exe'
        CommandLine|contains: '-enc '
    condition: selection

IOC 提取清单

□ 文件哈希(MD5/SHA1/SHA256)
□ C2 域名/IP/URL
□ 注册表持久化项
□ 互斥体名
□ 特征字符串/字节
□ 文件路径/文件名
□ 时间戳(编译时间)

17.7 反分析技术清单(94 种速查)

反沙箱: 资源检查、时序、虚拟设备检测、无 GUI 退出
反调试: ptrace/PEB/时序/断点扫描(第 8 章全表)
反虚拟机: CPUID/MAC/硬件指纹
反 DBI: Frida 检测
自修改/自解密: 内存 dump 解决
延迟执行: sleep 拉长、时间检查 → 冻结时间

17.8 分析环境安全准则

□ 永远在隔离环境(VM/Docker/专用分析机)运行
□ 断网或仅允许回连模拟 C2(inetsim/fake DNS)
□ 样本文件保持只读,改动在副本
□ 使用快照,随时回滚
□ 分析完成:清空环境、报告 + 规则沉淀

17.9 恶意软件分析检查清单

□ 哈希+类型+壳检测
□ 字符串全量提取
□ 导入表行为分类
□ 沙箱行为报告
□ C2/配置提取
□ 核心功能逆向
□ YARA + Sigma + IOC 产出
□ 报告 + 经验沉淀

动手练习

  1. 从 MalwareBazaar 下载一个已标注的样本(或直接使用仓库 seed 案例),完成 Phase 1-2。
  2. 用 FLOSS(字符串去混淆)提取一个加壳样本的解密字符串。
  3. 给一个样本写 1 条 YARA 规则并验证匹配。
  4. 在隔离环境用沙箱跑一个无害样本(如开源 EICAR 测试文件),观察行为报告结构。

深入阅读

  • 仓库:skills/malware-analysis/SKILL.md(六阶段分析框架)
  • 仓库:skills/malware-analysis/references/anti-analysis-techniques.md(94 种反分析技术)
  • 仓库:skills/malware-analysis/references/yara-sigma-rules.md(规则编写方法论)
  • 仓库:skills/malware-analysis/references/sandbox-orchestration.md(沙箱编排)
  • 实战案例:skills/field-journal/seed-002_go-malware-stripped.mdseed-012_log4shell-jndi-rce.md
  • 仓库:skills/llm-security/(AI 恶意软件/Agent 安全交叉)