๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

Tool: gdb

by Jenny:! 2023. 7. 13.

 

1. ๋งฅ๋ฝ(context)

์ฃผ์š” ๋ฉ”๋ชจ๋ฆฌ๋“ค์˜ ์ƒํƒœ๋ฅผ ๊ฐ€๋…์„ฑ ์žˆ๊ฒŒ ๋ณด์—ฌ์ค€๋‹ค. ํฌ๊ฒŒ 4๊ฐœ ์˜์—ญ์œผ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.

 

1. REGISTERS

๋ ˆ์ง€์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

2. DISASM

rip๋ถ€ํ„ฐ ๋””์Šค์–ด์…ˆ๋ธ”๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

3. STACK

rsp๋ถ€ํ„ฐ ์Šคํƒ์˜ ๊ฐ’๋“ค์„ ๋ณด์—ฌ์ค€๋‹ค.

4. BACKTRACE

ํ˜„์žฌ rip์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ์–ด๋–ค ํ•จ์ˆ˜๋“ค์ด ์ค‘์ฒฉ๋˜์–ด ํ˜ธ์ถœ๋๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค.

 

 

 

 

 

2. entry

entry

์ง„์ž…์ ๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค. DISASM ์˜์—ญ์˜ ํ™”์‚ดํ‘œ(โ–บ)๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ๋Š” ํ˜„์žฌ rip์˜ ๊ฐ’์ด๋‹ค.

 

 

 

3. break & continue / run / start

 

break(b)

ํŠน์ • ์ฃผ์†Œ์— ์ค‘๋‹จ์ (breakpoint)์„ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ

 

continue(c)

์ค‘๋‹จ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ณ„์† ์‹คํ–‰์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ

 

run(r)

ํ”„๋กœ๊ทธ๋žจ์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ

 

start (main ๋ช…๋ น์–ด๋„ ๋™์ผ)

main() ์‹ฌ๋ณผ์ด ์กด์žฌํ•˜๋ฉด main()์— ์ค‘๋‹จ์ ์„ ์„ค์ •ํ•œ ํ›„ ์‹คํ–‰, ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ง„์ž…์ ์— ์ค‘๋‹จ์ ์„ ์„ค์ •ํ•œ ํ›„ ์‹คํ–‰

 

 

 

 

4. disassembly

 

disassemble

gdb๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋””์Šค์–ด์…ˆ๋ธ” ๋ช…๋ น์–ด, ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋  ๋•Œ๊นŒ์ง€ ์ „๋ถ€ ๋””์Šค์–ด์…ˆ๋ธ”ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.

 

 

 

 

u, nearpc, pdisass

pwndbg์˜ ๊ธฐ๋Šฅ, ๋””์Šค์–ด์…ˆ๋ธ”๋œ ์ฝ”๋“œ๋ฅผ ๊ฐ€๋…์„ฑ์žˆ๊ฒŒ ์ถœ๋ ฅํ•ด์ค€๋‹ค.

 

 

 

5. navigate

 

ni(next instruction) & si(step into)

ni๋Š” ์„œ๋ธŒ๋ฃจํ‹ด์˜ ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ€์ง€ ์•Š์ง€๋งŒ,

si๋Š” ์„œ๋ธŒ๋ฃจํ‹ด์˜ ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ„๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค.

 

finish

si๋กœ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ๋ชจ๋‘ ๋ถ„์„ํ–ˆ๋Š”๋ฐ, ํ•จ์ˆ˜์˜ ๊ทœ๋ชจ๊ฐ€ ์ปค์„œ ni๋กœ๋Š” ์›๋ž˜ ์‹คํ–‰ ํ๋ฆ„์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿด ๋•Œ finish๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜์˜ ๋๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

6. examine

 

ํ”„๋กœ๊ทธ๋žจ์„ ๋ถ„์„ํ•˜๋‹ค ๋ณด๋ฉด ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ์ž„์˜ ์ฃผ์†Œ์˜ ๊ฐ’์„ ๊ด€์ฐฐํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์žˆ๋‹ค.

gdb์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์กฐํšŒ๋ฅผ ์œ„ํ•ด x ๋ช…๋ น์–ด๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

 

x

ํŠน์ • ์ฃผ์†Œ์—์„œ ์›ํ•˜๋Š” ๊ธธ์ด๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์›ํ•˜๋Š” ํ˜•์‹์œผ๋กœ ์ธ์ฝ”๋”ฉํ•˜์—ฌ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ1) rsp๋ถ€ํ„ฐ 80๋ฐ”์ดํŠธ๋ฅผ 8๋ฐ”์ดํŠธ์”ฉ hexํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ
x/10gx $rsp

์˜ˆ2) rip๋ถ€ํ„ฐ 5์ค„์˜ ์–ด์…ˆ๋ธ”๋ฆฌ ๋ช…๋ น์–ด ์ถœ๋ ฅ
 x/5i $rip

์˜ˆ3) ํŠน์ • ์ฃผ์†Œ์˜ ๋ฌธ์ž์—ด ์ถœ๋ ฅ
x/s 0x400000

 

 

7. telescope

telescope(tele)

pwndbg๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋คํ”„ ๊ธฐ๋Šฅ์ด๋‹ค. ํŠน์ • ์ฃผ์†Œ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ’์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฒƒ์— ๋”ํ•ด, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ์ฃผ์†Œ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜์—ฌ ๊ฐ’์„ ๋ณด์—ฌ์ค€๋‹ค.

 

 

8. vmmap

vmmap

vmmap์€ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋ณด์—ฌ์ค€๋‹ค. ์–ด๋–ค ํŒŒ์ผ์ด ๋งคํ•‘๋œ ์˜์—ญ์ผ ๊ฒฝ์šฐ, ํ•ด๋‹น ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๊นŒ์ง€ ๋ณด์—ฌ์ค€๋‹ค.

 

 

 

9. gdb / python

gdb๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ๋””๋ฒ„๊น…ํ•  ๋•Œ, ํ‚ค๋ณด๋“œ๋กœ ํƒ€์ดํ•‘ํ•˜๊ธฐ ์–ด๋ ค์šด ๋ณต์žกํ•œ ๊ฐ’์„ ์ž…๋ ฅํ•˜๊ณ  ์‹ถ์„ ๋•Œ๊ฐ€ ์žˆ๋‹ค. ์ด์šฉ์ž๊ฐ€ ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์€ ํŒŒ์ด์ฌ์œผ๋กœ ์ƒ์„ฑํ•œ ๋’ค, ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

gdb / python argv

run์˜ ๋ช…๋ น์–ด ์ธ์ž๋กœ $()์™€ ํ•จ๊ป˜ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ฐ’์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์˜ˆ) printํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅํ•œ ๊ฐ’์„ run์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ช…๋ น

r $(python3 -c "print('\xff' * 100)")

 

 

gdb / python input

 $()์™€ ํ•จ๊ป˜ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ฐ’์„ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž…๋ ฅ๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด <<<๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

์˜ˆ) argv[1]์— ์ž„์˜์˜ ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ณ , ๊ฐ’์„ ์ž…๋ ฅํ•˜๋Š” ๋ช…๋ น์–ด

r $(python3 -c "print('\xff' * 100)") <<< $(python3 -c "print('dreamhack')")

 

 

 

10. gdb์˜ ๋ช…๋ น์–ด ์ถ•์•ฝ ์ •๋ฆฌ

b: break

c: continue

r: run

si: step into

ni: next instruction

i: info

k: kill

pd: pdisas