在 Linux 下进行反汇编与漏洞分析,通常是从二进制程序(无源码或只有部分源码)出发,理解程序逻辑、定位安全隐患并利用调试手段验证。下面按流程 + 工具 + 实战思路给你一个系统性的指南。
file ./target
checksec --file=./target
关注:
| 工具 | 特点 |
|---|---|
| objdump | 基础反汇编,适合快速查看 |
| gdb + pwndbg | 动态调试 + 漏洞验证 |
| IDA Pro | 最强静态分析(商业) |
| Ghidra | 免费、功能强 |
| radare2 (r2) | 命令行、脚本化 |
objdump -d -M intel ./target
重点看:
mainread, gets, scanf, strcpy)getsstrcpysprintfscanf("%s")特征:
read(0, buf, 0x100)buf 在栈上,大小 < 读入长度汇编特征:
lea rax, [rbp-0x20]
mov rdi, rax
call read
特征:
printf(buf);
汇编:
call printf
如果 buf 可控 → 危险
unsignedmalloc(size * 4) 但 size 可控free 或 usegdb ./target
pwndbg> cyclic 200
pwndbg> run
溢出后:
pwndbg> cyclic -l 0x6161616b
可定位:
pwndbg> stack 20
pwndbg> info registers
from pwn import *
payload = b'A'*offset + p64(puts_plt) + p64(main) + p64(puts_got)
ret2shellcode、ret2libc✅ 从 CTF pwn 题 开始
✅ 每一题都做:
如果你愿意,可以:
我可以直接带你一步步分析。