一、调试工具(GDB 及其插件)
GDB
启动调试:gdb ./binary
运行程序:run 或 r
设置断点:break *0x地址 或 b 函数名
查看寄存器:info registers
查看内存:x/10wx 0x地址 (查看 10 个 4 字节的十六进制值)
反汇编:disassemble 函数名 或 disas
单步执行:ni(汇编级单步) / si(进入函数调用)
查看堆栈:x/20wx $sp
GDB 插件
Pwndbg / GEF / Ped:增强型调试插件
查看堆布局:heap
查看进程映射:vmmap
查找 ROP Gadget:ropgadget
二、反汇编与逆向工具
objdump
反汇编二进制文件:objdump -d ./binary
查看节头信息:objdump -h ./binary
radare2
打开文件:r2 ./binary
分析二进制:aaa
反汇编主函数:pdf @main
IDA Pro / Ghidra
图形化逆向工具,用于静态分析(无命令行依赖)。
三、漏洞利用开发工具
1.pwntools(Python 库)
基础模板:(python)
from pwn import *
context(arch='amd64', os='linux', log_level='debug')
p = process('./binary') # 本地调试
p = remote('host', port) # 远程连接
payload = b'A' * offset + p64(gadget_addr)
p.sendline(payload)
p.interactive()
常用函数:
cyclic(100):生成 De Bruijn 序列
cyclic_find(0x61616162):计算偏移
elf = ELF('./binary'):加载 ELF 文件
libc = ELF('/lib/x86_64-linux-gnu/libc.so.6'):加载 Libc
2.one_gadget
查找 Libc 中的 execve('/bin/sh') 地址:one_gadget libc.so.6
3.ROPgadget
查找 Gadget:ROPgadget --binary ./binary
四、二进制分析工具
checksec
检查二进制防护机制:checksec --file=./binary
输出内容示例:
Arch: amd64-64-little
RELRO: Partial RELRO
Stack: No canary found
NX: NX enabled
PIE: No PIE (0x400000)
file
查看文件类型:file ./binary
strings
提取字符串:strings ./binary | grep 'keyword'
五、编译与补丁工具
gcc
关闭堆栈保护编译:gcc -no-pie -fno-stack-protector -z execstack -o demo demo.c
patchelf
修改二进制依赖的 Libc:patchelf --set-interpreter /path/to/ld.so --replace-needed libc.so.6 /path/to/libc.so ./binary
六、网络工具
nc (netcat)
连接远程服务:nc host port
监听端口:nc -lvp 1234
socat
启动服务:socat tcp-listen:1234,reuseaddr,fork exec:./binary
七、其他实用命令
strace
跟踪系统调用:strace ./binary
ltrace
跟踪库函数调用:ltrace ./binary
python3
快速计算地址偏移:python3 -c 'print(0xdeadbeef - 0xc0ffee)'
时光匆匆,一篇博客又到了结尾处啦。真心感谢每一位愿意花时间阅读我文字的朋友,希望你们每天都过得开开心心的,生活顺顺利利哦,咱们下次再通过文字‘相遇’呀。