使用 GDB 与 pwndbg 进行动态分析
设置断点、检查内存、跟踪系统调用,并使用 pwndbg 自动化 GDB 会话。
使用 GDB 与 pwndbg 进行动态分析 是 CoddyKit 上的免费 Cyber Security Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cyber Security Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cyber Security Academy 课程共包含 4 节课。
什么是动态分析
动态分析会运行二进制文件并实时观察其行为:内存内容、寄存器值、系统调用和网络连接。它可以补充静态分析(Ghidra),展示实际的运行时值和控制流。
GDB 基础
GDB(GNU 调试器)是 Linux 的标准调试器:
gdb ./vuln # load binary
gdb -p 1234 # attach to running process
run [args] # start execution
break main # set breakpoint at main
continue (c) # continue execution
next (n) # step over
step (s) # step intopwndbg 增强功能
pwndbg 是一个 GDB 插件,增加了漏洞利用开发辅助功能:
- 每次暂停时显示可视化的栈和寄存器信息
cyclic模式生成- 用于堆可视化的
heap命令 - 用于查找 ROP 小工具的
rop命令 - 用于检查二进制文件保护机制的
checksec命令
git clone https://github.com/pwndbg/pwndbg && ./setup.sh断点与观察点
控制执行:
# Break at address:
break *0x401234
# Break at function:
break strncpy
# Watch memory address:
watch *0x7ffd1234 # break when value changes
# Conditional break:
break *0x401234 if $rax == 0
# List and delete:
info break
delete 1检查内存和寄存器
检查程序状态:
info registers # show all registers
print $rax # print register value
x/10xg $rsp # examine 10 qwords at RSP
x/s 0x402000 # examine as string
x/20i $rip # disassemble 20 instructions at RIP
pwndbg: telescope $rsp 20 # smart stack display单步执行代码
导航命令:
ni (nexti) # step over (instruction level)
si (stepi) # step into (instruction level)
finish # run until function returns
until 0x401234 # run until address为 GDB 编写脚本
使用 Python 自动化 GDB:
# GDB Python script:
gdb ./vuln << EOF
python
for i in range(10):
gdb.execute("continue")
gdb.execute("x/4xg $rsp")
end
EOF使用 pwndbg 分析堆
pwndbg 中用于检查堆的命令:
heap # show all heap chunks
heap -a # show all allocations
bin # show free list bins
tcachebins # show tcache entries
vis_heap_chunks # visual heap map跟踪系统调用
使用 strace 跟踪系统调用,无需进行完整调试:
strace ./vuln # trace all syscalls
strace -e trace=open,read,write ./vuln # filter syscalls
strace -f ./vuln # follow forks
# ltrace for library calls:
ltrace ./vuln设置调试环境
漏洞利用开发的重要设置:
# Disable ASLR for testing:
echo 0 | sudo tee /proc/sys/kernel/randomize_va_space
# Or per-process:
setarch $(uname -m) -R gdb ./vuln
# Verify with:
ldd ./vuln # check libc base调试去除符号的二进制文件
许多生产环境中的二进制文件都会去除调试符号。可采用以下技巧:
- 使用
file和readelf了解二进制文件 - 在地址而不是符号处设置断点
- 使用函数签名识别常见的库调用
- 如果有可用的 libc 符号,则单独加载它们
快速检查:GDB
GDB 中的哪个命令可以设置仅在满足特定条件时才触发的断点?
课程回顾
GDB 配合 pwndbg 可以进行动态分析:设置断点、检查寄存器和内存,以及跟踪执行过程。主要命令包括:break、run、ni/si、x/format、info registers。pwndbg 增加了堆可视化、栈查看和模式工具。strace/ltrace 可以在无需完整调试环境的情况下跟踪系统调用和库调用。
常见问题解答
「使用 GDB 与 pwndbg 进行动态分析」课时是免费的吗?
是的 — 「使用 GDB 与 pwndbg 进行动态分析」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cyber Security Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cyber Security Academy 课程共包含 4 节课。
「使用 GDB 与 pwndbg 进行动态分析」这节课中我会学到什么?
设置断点、检查内存、跟踪系统调用,并使用 pwndbg 自动化 GDB 会话。 你通过在浏览器中直接运行的动手代码来练习 Cyber Security Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cyber Security Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cyber Security Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「使用 GDB 与 pwndbg 进行动态分析」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cyber Security Academy 课中编写并运行代码吗?
能。每节 Cyber Security Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- Ghidra:浏览与注释二进制程序
- 逆向分析者必备的 x86/x64 汇编
- 使用 GDB 与 pwndbg 进行动态分析
- 去混淆与反分析技巧