一、🧪 调试工具:GDB 及插件
1. GDB 基础命令
功能 | 命令示例 |
---|---|
启动调试 | gdb ./binary |
运行程序 | run 或 r |
设置断点 | break *0x40123a 或 b main |
查看寄存器 | info registers 或简写 i r |
查看内存 | x/10wx 0x601000 (10 个 4字节 hex) |
堆栈查看 | x/20wx $rsp 或 x/20gx $rbp |
反汇编函数 | disas main 或 disassemble main |
单步执行 | ni (下一条)/ si (进入调用) |
继续运行 | continue 或 c |
📌 推荐配置 .gdbinit
:
set disassembly-flavor intel
set pagination off
2. GDB 插件(增强体验)
✅ 推荐插件:pwndbg
(或 GEF、PEDA)
安装:
git clone https://github.com/pwndbg/pwndbg
cd pwndbg && ./setup.sh
功能 | 示例命令 |
---|---|
查看堆布局 | heap |
查看内存映射 | vmmap |
查找函数 | telescope $rsp |
修改内存 | set {char}0x601000 = 0x41 |
二、🔍 反汇编与静态分析工具
1. objdump
(快速反汇编)
命令 | 含义 |
---|---|
objdump -d ./binary | 反汇编全部代码 |
objdump -M intel -d ./binary | 使用 Intel 风格 |
objdump -h ./binary | 查看节区信息(.text/.data等) |
2. radare2
(强大但需适应)
常用流程:
r2 ./binary # 打开文件
aaa # 自动分析
afl # 查看函数列表
pdf @main # 查看 main 函数反汇编
3. IDA Pro / Ghidra(图形界面静态分析)
IDA Free 适合小文件
Ghidra 开源免费,支持多平台
适合查看复杂控制流、结构体、函数引用
三、💥 漏洞利用开发工具
1. pwntools(Python 库)
基本模板:
from pwn import *
context(arch='amd64', os='linux', log_level='debug')
p = process('./binary') # 本地调试
# p = remote('host', port) # 远程服务
payload = b'A' * offset + p64(addr)
p.sendline(payload)
p.interactive()
常用函数:
函数 | 用途 |
---|---|
cyclic(100) | 生成 De Bruijn 序列 |
cyclic_find(0x6161616b) | 定位偏移 |
ELF('./binary') | 加载 ELF 文件获取符号表等 |
libc = ELF('libc.so.6') | 配合远程漏洞调试 |
ROP(elf) | 构造 ROP 链 |
2. one_gadget(快速查找 system Gadget)
查找满足 execve("/bin/sh")
条件的 gadget:
one_gadget libc.so.6
结果示例:
0x4f3d5 execve("/bin/sh", rsp+0x40, environ)
3. ROPgadget(ROP 工具)
ROPgadget --binary ./binary
可配合 pwntools 自动构建:
rop = ROP(elf)
rop.system(next(elf.search(b"/bin/sh")))
四、🛡️ 二进制保护检测工具
1. checksec(保护机制检测)
checksec --file=./binary
示例输出:
RELRO : Partial RELRO
Stack Canary : No canary found
NX : NX enabled
PIE : No PIE (0x400000)
2. file(查看类型)
file ./binary
3. strings(提取字符串)
strings ./binary | grep 'flag'
五、🧱 编译与补丁工具
1. gcc(调试编译)
gcc -no-pie -fno-stack-protector -z execstack -g -o a.out demo.c
添加
-g
生成调试符号;去除 PIE、Canary、NX 等便于练习
2. patchelf(替换 libc)
patchelf --set-interpreter ./ld-2.27.so ./binary
patchelf --replace-needed libc.so.6 ./libc-2.27.so ./binary
六、🌐 网络与本地服务工具
1. nc(netcat)
nc host port # 连接远程服务
nc -lvnp 1234 # 本地监听(v=verbose, n=no-DNS, p=port)
2. socat(双向转发 + 服务)
socat TCP-LISTEN:1234,reuseaddr,fork EXEC:./binary
可用于将本地程序包装成网络服务模拟远程环境。
七、🛠️ 其他调试辅助工具
1. strace(追踪系统调用)
strace ./binary
可查看 open/read/write
等系统行为。
2. ltrace(追踪库函数调用)
ltrace ./binary
用于追踪 puts
, strcmp
等动态链接函数。
3. ldd(查看依赖库)
ldd ./binary
✨ 附:调试命令速查表(汇编视角)
功能 | 命令 |
---|---|
当前指令 | x/i $rip |
寄存器 | info registers |
单步汇编 | ni (下一条) |
单步进入函数 | si (进入调用) |
反汇编主函数 | disas main |
查看字符串 | x/s 0xaddr |
堆栈查看 | x/20gx $rsp |
跳过函数调用 | set $rip = 0xaddr |
时光匆匆,一篇博客又到了结尾处啦。真心感谢每一位愿意花时间阅读我文字的朋友,希望你们每天都过得开开心心的,生活顺顺利利哦,咱们下次再通过文字‘相遇’呀。