温馨提示×

linux反汇编怎样分析漏洞

小樊
33
2026-10-24 00:46:40
栏目: 网络安全

在 Linux 下进行反汇编与漏洞分析,通常是从二进制程序(无源码或只有部分源码)出发,理解程序逻辑、定位安全隐患并利用调试手段验证。下面按流程 + 工具 + 实战思路给你一个系统性的指南。


一、分析前的准备

1. 收集基本信息

file ./target
checksec --file=./target

关注:

  • 架构(x86 / x86_64 / ARM)
  • 是否 stripped(是否去掉符号)
  • 保护机制:
    • RELRO
    • Stack Canary
    • NX
    • PIE
    • FORTIFY

二、反汇编工具选择

常用工具对比

工具 特点
objdump 基础反汇编,适合快速查看
gdb + pwndbg 动态调试 + 漏洞验证
IDA Pro 最强静态分析(商业)
Ghidra 免费、功能强
radare2 (r2) 命令行、脚本化

三、静态反汇编分析

1. 使用 objdump

objdump -d -M intel ./target

重点看:

  • main
  • 输入函数(read, gets, scanf, strcpy)
  • 循环和条件跳转

2. 使用 IDA / Ghidra

  • 查看 函数调用图
  • 反编译为伪代码(C-like)
  • 搜索危险函数:
    • gets
    • strcpy
    • sprintf
    • scanf("%s")

四、常见漏洞模式(反汇编特征)

1. 栈溢出

特征:

  • 局部变量较小
  • 使用 read(0, buf, 0x100)
  • buf 在栈上,大小 < 读入长度

汇编特征:

lea rax, [rbp-0x20]
mov rdi, rax
call read

2. 格式化字符串漏洞

特征:

printf(buf);

汇编:

call printf

如果 buf 可控 → 危险


3. 整数溢出

  • 比较时使用 unsigned
  • malloc(size * 4) 但 size 可控

4. UAF / 双重释放

  • 释放后未置 NULL
  • 再次 free 或 use

五、动态调试分析(关键)

1. 使用 gdb + pwndbg

gdb ./target
pwndbg> cyclic 200
pwndbg> run

溢出后:

pwndbg> cyclic -l 0x6161616b

可定位:

  • 覆盖返回地址的偏移

2. 观察栈和寄存器

pwndbg> stack 20
pwndbg> info registers

六、漏洞利用思路(简单示例)

栈溢出利用流程

  1. 确定偏移
  2. 构造 payload:
from pwn import *
payload = b'A'*offset + p64(puts_plt) + p64(main) + p64(puts_got)
  1. 劫持控制流(ret2libc / ROP)

七、推荐学习路径

初级

  • C 语言 + 汇编(AT&T / Intel)
  • 栈结构、函数调用约定
  • ret2shellcode、ret2libc

中级

  • ROP
  • 堆漏洞(ptmalloc)
  • 格式化字符串

高级

  • 内核漏洞
  • 浏览器 / JIT
  • 模糊测试(AFL++)

八、实战建议

✅ 从 CTF pwn 题 开始
✅ 每一题都做:

  • 静态分析
  • 动态验证
  • 写利用脚本

如果你愿意,可以:

  • 发一个 具体二进制
  • 或说你想分析 哪类漏洞(栈 / 堆 / 格式化)
  • 或指定 x86 还是 x64

我可以直接带你一步步分析。

0 踩