ELF Analyzer — ELF 格式深度分析
Linux ELF 二进制文件的格式分析专项技能。采用六阶段工作流 + 条件路由架构, 从取样到安全态势报告的完整链路。聚焦于 ELF 结构本身的分析,而非漏洞利用。
Safety Warning
Warning: 二进制分析仅应在隔离实验环境或一次性 VM 中进行。 切勿在个人设备或生产服务器上执行动态分析。 执行动态分析(Phase 3)前必须获得用户明确授权。
Trigger Conditions
- 提供了 ELF 文件、.so 共享库的路径
- 请求分析/triage 某个 Linux 二进制
- 询问 ELF 结构、安全特征、加壳检测相关问题
- 作为其他技能(linux-pwn、binary-reverse)的前置分析步骤
Tool Discovery
command -v file readelf objdump nm strings xxd hexdump python3 checksec \
radare2 rabin2 r2 gdb strace ltrace objcopy upx \
analyzeHeadless capa \
ldd lddtree scanelf execstack dumpelf eu-readelf 2>/dev/null | sort
# 关键后备链
# readelf 不可用 → python3 -c "import struct; ..." 手动解析
# objdump 不可用 → radare2 → llvm-objdump → python3 capstone
# checksec 不可用 → readelf -l (GNU_STACK) + readelf -d (BIND_NOW)
# ldd 不可用(或不安全) → readelf -d | grep NEEDED
# Ghidra 不可用 → radare2 + r2ghidra → objdump + 手工分析
Adjacent Skills
| 技能 | 何时切换 |
|---|---|
binary-reverse |
ELF triage 完成后需要:反汇编模式识别、密码学算法定位、反分析绕过、Go/Rust/C++ 语言专项分析 |
linux-pwn |
安全态势评估完成后需要:漏洞利用开发、堆利用、ROP 链、格式化字符串攻击、内核提权 |
Workflow Engine
Phase 0: Intake
- 保存原始样本副本到
case/00-intake/ - 计算哈希:
md5sum/sha1sum/sha256sum - 创建案例目录:
case/{01-triage,02-strings,03-static,04-decoding,05-config,06-extracted,07-stages,09-reports,10-iocs} - 初始化
case/AGENTS.md
Phase 1: ELF Triage
加载 references/elf-triage.md 获取完整命令序列和输出解析模板。
核心步骤:
file→ 架构、端序、链接方式、stripped 状态checksec→ RELRO / Canary / NX / PIE / FORTIFY / RPATHreadelf -h→ ELF header (Type/Entry/PH/SH)readelf -l→ Program Headers (GNU_STACK/GNU_RELRO/TLS/LOAD)readelf -d→ Dynamic Section (NEEDED/BIND_NOW/RPATH/RUNPATH)ldd/lddtree→ 库依赖分析readelf -s→ Symbol Table (stripped 判定)strings+ 模式搜索 → URL/IP/路径/敏感关键字/编译器指纹
路由规则 — 根据 triage 结果自动加载后续 reference:
| 发现 | 行动 |
|---|---|
stripped |
加载 references/static-analysis.md (stripped 策略) |
Full RELRO |
加载 references/elf-security.md |
UPX/加壳标记 |
加载 references/unpacking.md,优先脱壳 |
加密字符串 (高熵) |
建议切换到 binary-reverse (密码学算法定位) |
反调试引用 (ptrace/seccomp) |
建议切换到 binary-reverse (反分析绕过) |
可疑漏洞迹象 |
建议切换到 linux-pwn (漏洞利用) |
Phase 2: Static Analysis
加载 references/static-analysis.md。 如需要反汇编模式解读,建议切换到 binary-reverse。
核心步骤:
objdump -d -M intel→ 反汇编全部代码段- Stripped: 使用 radare2
aaa; aflheuristic 函数识别 - Non-stripped: 基于符号表定位关键函数 + 交叉引用追踪
- 敏感函数调用检测
- Ghidra/radare2 深度分析(如可用)
Phase 3: Dynamic Analysis
仅在用户明确授权且环境隔离后执行。加载 references/dynamic-analysis.md。
Phase 4: Security Assessment
加载 references/elf-security.md。 评估安全缓解措施组合及可利用性评分 (0-10)。
Phase 5: Report
更新 case/REPORT.md 和 case/AGENTS.md,输出:
- 案例摘要 + 样本清单(含哈希)
- 安全态势总结
- 关键发现(解码/C2/持久化/反分析)
- IOC 清单
- 进一步分析建议(推荐切换的相邻技能)
Reference Loading Guide
| 场景 | 加载的 Reference 文件 |
|---|---|
| 任何 ELF 分析的起点 | references/elf-triage.md |
| 理解 ELF 结构细节 | references/elf-headers.md |
| 动态链接/GOT/PLT/LD_PRELOAD | references/elf-dynamic.md |
| 安全特征分析/漏洞评估 | references/elf-security.md |
| Ghidra/radare2/objdump 使用 | references/static-analysis.md |
| GDB/strace/Frida 调试 | references/dynamic-analysis.md |
| 加壳检测与脱壳 | references/unpacking.md |
Token Budget
- 聊天只放结论: 不粘贴冗长的命令输出
- 输出落盘: 反汇编、strings、日志写入
case/,用rg/head/tail检索 - 两击失败即转向: 同一分支两次失败后记录 blocker,切换方法
- 脚本持久化: 重复使用的逻辑写入
case/04-decoding/
Output Template
## ELF 分析结果: <sample_name>
### 基本信息
- 架构: <arch> | 端序: <endian> | 链接: <dynamic/static>
- Stripped: <yes/no> | 加壳: <yes/no/type>
### 安全态势
| RELRO | Canary | NX | PIE | seccomp | FORTIFY |
|-------|--------|----|-----|---------|---------|
### 关键发现
- ...
### 进一步分析建议
- 建议切换到: `binary-reverse` / `linux-pwn`