温馨提示×

怎样分析Linux反汇编

小樊
46
2026-08-05 06:03:50
栏目: 智能运维

分析 Linux 下的反汇编(尤其是 ELF 二进制)是一个系统工程,通常包括静态分析动态分析两个阶段。下面按“从入门到进阶”的思路,给你一套可操作的分析方法。


一、明确目标与分析场景

在分析之前,先搞清楚:

  • ELF 可执行文件 / 共享库 / 内核模块
  • 是否 ** stripped(去符号)**?
  • 架构:x86 / x86‑64 / ARM / RISC‑V
  • 目的:
    • 漏洞分析
    • 逆向算法
    • 病毒/恶意样本
    • CTF / 二进制安全

二、基础工具链准备

常用工具

工具 用途
objdump 反汇编 ELF
readelf 分析 ELF 结构
nm 查看符号表
strings 提取字符串
file 判断文件类型
gdb 动态调试
radare2 / r2 高级逆向
Ghidra / IDA 反编译
strace / ltrace 系统调用 / 库调用

三、静态分析流程(核心)

1️⃣ 先看文件信息

file ./target
readelf -h ./target

重点关注:

  • 架构(Machine)
  • 入口点(Entry point address)
  • ELF 类型(EXEC / DYN)

2️⃣ 查看符号表

nm ./target

或:

readelf -s ./target
  • 有符号:分析难度低
  • 无符号(stripped):
    nm ./target  # 几乎为空
    

3️⃣ 反汇编代码

使用 objdump

objdump -d ./target

常用参数:

objdump -M intel -d ./target   # Intel 语法

重点看:

  • main
  • _start
  • plt / got

4️⃣ 分析程序结构

ELF 关键段

readelf -S ./target

重要段:

  • .text:代码
  • .data:已初始化数据
  • .bss:未初始化数据
  • .plt / .got:动态链接

5️⃣ 字符串与常量

strings ./target

结合:

  • 错误信息
  • 文件路径
  • 加密常量

四、动态分析(非常重要)

1️⃣ 用 gdb 调试

gdb ./target

常用命令:

disas main
info functions
break main
run
stepi
info registers
x/10xw $rsp

查看:

  • 函数调用
  • 栈变化
  • 参数传递

2️⃣ 系统调用分析

strace ./target
ltrace ./target

五、进阶逆向分析技巧

1️⃣ PLT / GOT 分析

  • PLT:跳板
  • GOT:真实地址
objdump -R ./target

用于识别:

  • system
  • execve
  • open/read/write

2️⃣ 识别函数调用约定

x86‑64

  • 参数顺序:rdi, rsi, rdx, rcx, r8, r9
  • 返回值:rax

x86

  • 参数通过栈传递

3️⃣ 控制流分析

关注:

  • call
  • ret
  • jmp
  • 条件跳转(je, jne, jg

识别:

  • if / else
  • 循环
  • switch

4️⃣ 脱壳 / 混淆处理

  • UPX:
upx -d target
  • 手动脱壳:
    • 找 OEP
    • dump 内存

六、使用专业逆向工具(强烈推荐)

Radare2 示例

r2 ./target
aaa
s main
pdf

Ghidra / IDA

  • 自动反编译为 C
  • 重命名函数
  • 标注数据结构

七、典型分析思路总结

file → readelf → strings → objdump → gdb → 逆向工具

分析顺序:

  1. 了解程序
  2. 找入口
  3. 还原逻辑
  4. 动态验证
  5. 标注函数与变量

八、学习建议

  • 先学 x86/x86‑64 汇编
  • 理解 ELF 格式
  • 多分析 CTF pwn / reverse 题
  • 对比 源码 vs 汇编

如果你愿意,我可以:

  • ✅ 带你 逐行分析一个真实 ELF
  • ✅ 帮你 识别某段汇编在干什么
  • ✅ 教你 从 0 写一个反汇编分析笔记

只要把文件或汇编贴出来即可。

0