Cyber Security Academy · บทเรียน

การวิเคราะห์แบบไดนามิกด้วย GDB และ pwndbg

ตั้งจุดพัก ตรวจสอบหน่วยความจำ ติดตามการเรียกระบบ และทำเซสชัน GDB ให้เป็นอัตโนมัติด้วย pwndbg

บทเรียน 3 จาก 413 ขั้นตอน

การวิเคราะห์แบบไดนามิกด้วย GDB และ pwndbg เป็นบทเรียน Cyber Security Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Cyber Security Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน

การวิเคราะห์แบบไดนามิกคืออะไร

การวิเคราะห์แบบไดนามิกคือการเรียกใช้ไบนารีและสังเกตพฤติกรรมแบบเรียลไทม์ ได้แก่ เนื้อหาในหน่วยความจำ ค่ารีจิสเตอร์ การเรียกระบบ และการเชื่อมต่อเครือข่าย วิธีนี้ช่วยเสริมการวิเคราะห์แบบสแตติก (Ghidra) ด้วยการแสดงค่าจริงขณะทำงานและลำดับการควบคุม

พื้นฐาน GDB

GDB (GNU Debugger) คือดีบักเกอร์มาตรฐานของ 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
  • ตรวจสอบการป้องกันไบนารีด้วย 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

ทำงานของ GDB โดยอัตโนมัติด้วย Python:

# 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 ใช้ติดตามการเรียกระบบและการเรียกใช้ไลบรารีโดยไม่ต้องตั้งค่าสภาพแวดล้อมสำหรับการดีบักแบบเต็มรูปแบบ

เริ่มต้นได้ฟรี

เรียนรู้ Cyber Security Academy ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
76
บทเรียน
303

คำถามที่พบบ่อย

บทเรียน “การวิเคราะห์แบบไดนามิกด้วย GDB และ pwndbg” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การวิเคราะห์แบบไดนามิกด้วย GDB และ pwndbg” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Cyber Security Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Cyber Security Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การวิเคราะห์แบบไดนามิกด้วย GDB และ pwndbg”

ตั้งจุดพัก ตรวจสอบหน่วยความจำ ติดตามการเรียกระบบ และทำเซสชัน GDB ให้เป็นอัตโนมัติด้วย pwndbg คุณปฏิบัติ Cyber Security Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Cyber Security Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Cyber Security Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 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