0Pricing
Cyber Security Academy · 课时

使用 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 into

pwndbg 增强功能

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. Ghidra:浏览与注释二进制程序
  2. 逆向分析者必备的 x86/x64 汇编
  3. 使用 GDB 与 pwndbg 进行动态分析
  4. 去混淆与反分析技巧
← 返回 Cyber Security Academy