Jastes 2022. 3. 29. 23:18

โ€‹๐Ÿ›Debug(ger)๋ž€?

CS(Computer Science)์—์„  ์‹ค์ˆ˜๋กœ ํƒ„์ƒํ•œ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ฒฐํ•จ์„ bug๋ผ๊ณ  ์นญํ•จ

์„ค์น˜
sudo apt-get install gdb
git clone https://github.com/pwndbg/pwndbg

cd pwndbg
./setup.sh
 

GitHub - pwndbg/pwndbg: Exploit Development and Reverse Engineering with GDB Made Easy

Exploit Development and Reverse Engineering with GDB Made Easy - GitHub - pwndbg/pwndbg: Exploit Development and Reverse Engineering with GDB Made Easy

github.com

๊ฐœ๋ฐœ์ž๋“ค์€ ๋ฒ„๊ทธ๋ฅผ ์ฐพ๋Š”๋ฐ ๊ฐœ๋ฐœ ์ ˆ๋ฐ˜์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค๊ณ  ๋งํ•  ์ •๋„ ๋ฒ„๊ทธ๋ฅผ ์ฐพ๋Š” ์ค‘์š”ํ•œ ์ž‘์—…!

๊ทธ๋งŒํผ ์™„์„ฑ๋œ ์ฝ”๋“œ์—์„œ ๋ฒ„๊ทธ๋ฅผ ์ฐพ๊ธฐ ํž˜๋“ค๊ธฐ์— ํƒ„์ƒํ•œ ๋””๋ฒ„๊ฑฐ(Debugger)๋ผ๋Š” ๋„๊ตฌ!!

๋””๋ฒ„๊ฑฐ๋Š” ๋ฒ„๊ทธ๋ฅผ ์—†์• ๊ธฐ ์œ„ํ•œ ๋„๊ตฌ์ผ ๋ฟ์ž„ ๊ทธ ๊ณผ์ •์— ๋งŽ์€ ๊ฐœ๋ฐœ์ž์™€ ๋ณด์•ˆ๊ด€๋ฆฌ์ž ๋“ฑ์—๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ์—ˆ์ฃ 


โ€‹๐Ÿ›gdb๋ž€?

๊ฐ„๋‹จํ•œ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ๋ฒ•์— ๋Œ€ํ•˜์—ฌ ์„œ์ˆ ํ•  ๊ฑฐ์˜ˆ์š”

 

์•„๋ž˜ ์ฝ”๋“œ๋Š” ์•ž์œผ๋กœ ์‹ค์Šตํ•  gdb ๋ช…๋ น์–ด๋ฅผ ์œ„ํ•œ ์˜ˆ์ œ ์ฝ”๋“œ

๊ทธ ๋’ค์— gcc debugg๋ฅผ ์‹คํ–‰ํ•ฉ์‹œ๋‹ค.

 


start๐Ÿšช

๋ฆฌ๋ˆ…์Šค๋Š” ์‹คํ–‰ ํŒŒ์ผ์„ ELF(Executable and Linkable Format / ์‹คํ–‰ํŒŒ์ผ)๋ฅผ ๊ทœ์ •ํ•จ

 

ELF๋Š” ํฌ๊ฒŒ ํ—ค๋”์™€ ์—ฌ๋Ÿฌ ์„น์…˜๋“ค๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ํ•ด๋”์—๋Š” ์‹คํ–‰์— ํ•„์š”ํ•œ ์—ฌ๋Ÿฌ ์ •๋ณด๊ฐ€

์„น์…˜๋“ค์—๋Š” ์ปดํŒŒ์ผ๋œ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ, ํ”„๋กœ๊ทธ๋žจ ๋ฌธ์ž์—ด์„ ๋น„๋กฏํ•œ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จ

 

ELF์˜ ํ—ค๋” ์ค‘์— ์ง„์ž…์ (Entry Point, EP)์ด๋ผ๋Š” ํ•„๋“œ๊ฐ€ ์žˆ๋Š”๋ฐ

OS๊ฐ€ ELF๋ฅผ ์‹คํ–‰ํ•  ๋•Œ,์ง„์ž…์ ์˜ ๊ฐ’๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ํ•จ

> ํ™•์ธ ๋ฐฉ๋ฒ•์€ readelf๋กœ ํ™•์ธ ๊ฐ€๋Šฅ <

Ex) readelf -h debugee | EP : 0x401040

gdb์˜ start ๋ช…๋ น์–ด๋Š” ์ง„์ž…์ (EP)๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” gdb์˜ ๋ช…๋ น์–ด

 [DISASM]์˜์—ญ์˜ ํ™”์‚ดํ‘œ(โ–ถ)๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ๋Š” ํ˜„์žฌ rip์˜ ๊ฐ’์ธ๋ฐ, start๋ช…๋ น์–ด๋ฅผ ๋ณด๋ฉด..

๊ฐ™์•„์•ผํ•˜์ง€๋งŒ.. ์›๋ž˜๋Š” ๊ฐ™์•„์š” ๋ญ”๊ฐ€ ์ž˜๋ชป๋ฌ๋‚˜๋ด์š” ใ…  ๊ณ ๋กœ ์•ž์„œ ์‚ดํŽด๋ณธ ํ”„๋กœ๊ทธ๋žจ ์ง„์ž…์ ์˜ ์ฃผ์†Œ์™€ ์ผ์น˜

 


context๐Ÿ“ฝ๏ธ

 

์ฃผ์š” ๋ฉ”๋ชจ๋ฆฌ๋“ค์˜ ์ƒํƒœ๋ฅผ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ๋งฅ๋ฝ์ด๋ฉฐ, ๊ฐ€๋…์„ฑ์žˆ๊ฒŒ ํ‘œํ˜„ํ•  ์ธํ„ฐํŽ˜์ด์Šค ๊ตฌ์ถ•๋จ

 

context๋Š” ํฌ๊ฒŒ 4๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๊ตฌ๋ถ„๋จ

  1. registers : ๋ ˆ์ง€์Šคํ„ฐ์˜ ์ƒํƒœ๋ฅผ ๋ณด์—ฌ์คŒ
  2. disasm : rip๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ ๋””์Šค์–ด์…ˆ๋ธ”๋œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์คŒ
  3. stack : rsp๋ถ€ํ„ฐ ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ ์Šคํƒ์˜ ๊ฐ’๋“ค์„ ๋ณด์—ฌ์คŒ
  4. backtrace : ํ˜„์žฌ rip์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ์–ด๋–ค ํ•จ์ˆ˜๋“ค์ด ์ค‘์ฒฉ๋˜์–ด ํ˜ธ์ถœ๋๋Š”์ง€ ๋ณด์—ฌ์คŒ.. ๋’ค์— ์ž์„ธํžˆ ๊ธฐ์ˆ ํ•˜๊ฒ ์Œ

์ด๋“ค์€ ์–ด์…ˆ๋ธ”๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐฑ์‹ ๋˜์–ด ๋ฐฉ๊ธˆ ์‹คํ–‰ํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ ๋ช…๋ น์–ด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— 

์–ด๋–ค ์˜ํ–ฅ์„ ์คฌ๋Š”์ง€ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋•๋Š” ์—ญํ• ํ•ฉ๋‹ˆ๋‹ค. 

 


break & continue ๐Ÿšฅ

gdb๋ฅผ ์ด์šฉํ•ด ๋ถ„์„ ์‹œ ์ „์ฒด ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ์ผ๋ถ€ ์ฝ”๋“œ๊ฐ€ ๋ถ„์„ ํ•ต์‹ฌ์ด์ž ๊ด€์‹ฌ์ด๋‹ค๋Š” ์ !

 

์ง„์ž…์ ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ์‹œ์ž‘ํ•˜๋ฉด ๋””๋ฒ„๊น…์€ ๊ฒฐ์ฝ” ํšจ์œจ์ ์ด์ง€ ์•Š๊ธฐ์— ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์žˆ์–ด์š”

๊ทธ๋ž˜์„œ ๋งŽ์€ ๋””๋ฒ„๊ฑฐ์—๋Š” Continue์™€ Break๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

break(b) : ํŠน์ • ์ฃผ์†Œ์— ์ค‘๋‹จ์ (breakpoint)์„ ์„ค์ •ํ•˜๋Š” ๊ธฐ๋Šฅ
continue(c) : ์ค‘๋‹จ๋œ ํ”„๋กœ๊ทธ๋žจ์„ ๊ณ„์† ์‹คํ–‰์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ

๊ทธ๋Ÿฌํ•˜๋‹ค๋ฉด break๋กœ ์›ํ•˜๋Š” ํ•จ์ˆ˜์— ์ค‘๋‹จ์ ์„ ์„ค์ • ํ›„, ํ”„๋กœ๊ทธ๋žจ์„ ๊ณ„์† ์‹คํ–‰ํ•˜๋ฉด

ํ•ด๋‹น ํ•จ์ˆ˜๊นŒ์ง€ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ์‹คํ–‰ ํ•œ ๋‹ค์Œ ์ค‘๋‹จ๋˜๊ธฐ์— ์ค‘๋‹จ๋œ ์ง€์ ๋ถ€ํ„ฐ ๋‹ค์‹œ ์„ธ๋ฐ€ํžˆ ๋ถ„์„ ๊ฐ€๋Šฅ

Continue ์‚ฌ์šฉ ์˜ˆ์ œ
BreakPoint๋ฅผ ํ™œ์šฉํ•ด ๋ณด์—ฌ์ค€ ์˜ˆ์ œ


run ๐Ÿƒ‍โ™‚๏ธ

๋‹จ์ˆœํžˆ ์‹คํ–‰๋งŒ ํ•จ

start๋Š” ์ง„์ž…์ ๋ถ€ํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž๋™์œผ๋กœ ์ค‘๋‹จ์ ์„ ์„ค์ •!
run์€ ๋‹จ์ˆœ ์‹คํ–‰ ๋”ฐ๋ผ์„œ ์ค‘๋‹จ์ ์„ ์„ค์ •X๋ผ๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ๋๊นŒ์ง€ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ์‹คํ–‰

 

 

์ง€๊ธˆ์€ ์•ž์—์„œ mainํ•จ์ˆ˜์— ์ค‘๋‹จ์ ์„ ์„ค์ •ํ•ด๋†จ๊ธฐ์— run๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด๋„, mainํ•จ์ˆ˜์—์„œ ์‹คํ–‰์ด ๋ฉˆ์ถค

 

๐Ÿ’กgdb์˜ ๋ช…๋ น์–ด ์ถ•์•ฝ
์–ด๋–ค ๋ช…๋ น์–ด๋ฅผ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ์†Œํ•œ์˜ ๋ฌธ์ž์—ด๋งŒ ์ž…๋ ฅํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ช…๋ น์–ด ํƒ์ƒ‰ ํ›„ ์‹คํ–‰
๋Œ€ํ‘œ์ ์ธ ๋ช…๋ น์–ด๋“ค(break, continue, run ๋“ฑ)์€ ํŠน์ •ํ•  ์ˆ˜ ์—†๋”๋ผ๋„ ์šฐ์„ ์œผ๋กœ ์‹คํ–‰ํ•จ
๋‹ค์Œ์€ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ช…๋ น์–ด๋“ค์˜ ๋‹จ์ถ•ํ‚ค ์˜ˆ
  • b: break
  • c: continue
  • r: run
  • si: step into
  • ni: next instruction
  • i: info
  • k: kill
  • pd: pdisas

disassembly๐Ÿ—๏ธ

๋ฐ”์ด๋„ˆ๋ฆฌ์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์ฝ”๋“œ๋กœ ๋ฐ”๊พธ๋Š” ๊ณผ์ •

 

gdb๋Š” ๊ธฐ๊ณ„์–ด๋ฅผ ๋””์Šค์–ด์…ˆ๋ธ”(Disassembly | ์—ญ์…ˆ๋ธ”)ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ธฐ๋ณธ์ ์œผ๋กœ ํƒ‘์žฌ

disassemble์€ gdb๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณตํ•˜๋Š” ๋””์Šค์–ด์…ˆ๋ธ” ๋ช…๋ น์–ด๋กœ์จ,

์•„๋ž˜์™€ ๊ฐ™์ด ํ•จ์ˆ˜ ์ด๋ฆ„์„ ์ธ์ž๋กœ ์ „๋‹ฌํ•˜๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋  ๋•Œ๊นŒ์ง€ ์ „๋ถ€ ๋””์Šค์–ด์…ˆ๋ธ”ํ•˜์—ฌ ๋ณด์—ฌ์คŒ


Tip u, nearpc, pdisassemble๋Š” pwndbg์—์„œ ์ œ๊ณตํ•˜๋Š” ๋””์Šค์—์„ฌ๋ธ” ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

๋””์Šค์–ด์…ˆ๋ธ”๋œ ์ฝ”๋“œ๋ฅผ ๊ฐ€๋…์„ฑ ์ข‹๊ฒŒ ์ถœ๋ ฅํ•จ

 


navigateโญ

๊ด€์ฐฐํ•˜๊ณ ์ž ํ•˜๋Š” ํ•จ์ˆ˜์˜ ์ค‘๋‹จ์ ์— ๋„๋‹ฌํ–ˆ์œผ๋ฉด, ๊ทธ ์ง€์ ๋ถ€ํ„ฐ๋Š” ๋ช…๋ น์–ด๋ฅผ ํ•œ ์ค„์”ฉ ์ƒ์„ธํžˆ ๋ถ„์„ํ•ด์•ผํ•จ
์ด๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด๋กœ ni์™€ si๊ฐ€ ์žˆ์Œ

ni์™€ si๋Š” ๋ชจ๋‘ ์–ด์…ˆ๋ธ”๋ฆฌ ๋ช…๋ น์–ด๋ฅผ ํ•œ ์ค„์”ฉ ์‹คํ–‰ํ•œ๋‹ค๋Š” ๊ณตํ†ต์ ์ด ์žˆ์Œ

๊ทธ๋Ÿฌ๋‚˜ ๋งŒ์•ฝ call ๋“ฑ์„ ํ†ตํ•ด ์„œ๋ธŒ๋ฃจํ‹ด์„ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ

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

์ด๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋‹จ mainํ•จ์ˆ˜์—์„œ printfํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ์ง€์ ๊นŒ์ง€ ์‹คํ–‰ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค

 

ni_๋ช…๋ น์–ด

ni๋ฅผ ์‹คํ–‰ํ•œ ๋ชจ์Šต

๊ทธ๋Ÿฌํ•˜๋‹ค๋ฉด ์˜๊ตฌ์‹ฌ์ด ๋“ค๊ฑฐ๋‹ค printf๋ฅผ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ์™œ ๋ฌธ์ž์—ด์ด ์•ˆ ์ฐํžˆ๋‚˜..?

 

๐Ÿ’ก์™œ printf๋ฅผ ์‹คํ–‰ํ–ˆ๋Š”๋ฐ ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์„๊นŒ?
printf๊ฐ€ ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฌธ์ž์—ด์€ stdout์˜ ๋ฒ„ํผ์—์„œ ์ž ์‹œ ๋Œ€๊ธฐํ•œ ๋’ค ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์„œ ๋ฒ„ํผ๋Š” "๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฉ์ ์ง€๋กœ ์ด๋™ํ•˜๊ธฐ ์ „์— ์ž ์‹œ ์ €์žฅ๋˜๋Š” ์žฅ์†Œ"๋ผ๋Š” ์˜๋ฏธ์ด์ฃ 

stdout ๋ฒ„ํผ๋Š” ํŠน์ • ์กฐ๊ฑด์ด ๋งŒ์กฑ๋  ๋•Œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชฉ์ ์ง€๋กœ ์ด๋™์‹œํ‚ค๋Š”๋ฐ ๊ทธ ์กฐ๊ฑด์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์š”
  1. ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ
  2. ๋ฒ„ํผ๊ฐ€ ๊ฐ€๋“ ์ฐผ์„ ๋•Œ
  3. fflush์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋กœ ๋ฒ„ํผ๋ฅผ ๋น„์šฐ๋„๋ก ๋ช…์‹œํ–ˆ์„ ๋•Œ
  4. ๊ฐœํ–‰๋ฌธ์ž๊ฐ€ ๋ฒ„ํผ์— ๋“ค์–ด์™”์„ ๋•Œ
์˜ˆ์‹œ์—๋Š” ์œ„ ์–ด๋Š ์กฐ๊ฑด๊ณผ๋„ ๋งŒ์กฑํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ๋ฌธ์ž์—ด ์ถœ๋ ฅX

 

si_๋ช…๋ น์–ด

si๋ฅผ ์‹คํ–‰ํ•œ ๋ชจ์Šต

si๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์œ„์™€ ๊ฐ™์ด printf ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ rip๊ฐ€ ์ด๋™ํ•œ ๊ฒƒ์„ ํ™•์ธ ๊ฐ€๋Šฅ

ํ”„๋กœ๊ทธ๋žจ์„ ๋ถ„์„ํ•˜๋‹ค๊ฐ€, ์–ด๋–ค ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€๊นŒ์ง€ ๊ถ๊ธˆํ•  ๋• si, ์•„๋‹ˆ๋ผ๋ฉด ni๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด ํ•ต์‹ฌ!

contextํ•˜๋‹จ์˜ Backtrace๋ฅผ ๋ณด๋ฉด, mainํ•จ์ˆ˜์—์„œ printf๋ฅผ ํ˜ธ์ถœํ•ด์„œ mainํ•จ์ˆ˜ ์œ„์— printfํ•จ์ˆ˜๊ฐ€ ์ ์ œ๋จ

 


finish

step info(si)์—์„œ ๋ฐ”๋กœ ๋น ์ ธ๋‚˜์˜ค๋Š” ๋ช…๋ น์–ด

 

step info(si)๋กœ ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ๋“ค์–ด๊ฐ€์„œ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ๋ชจ๋‘ ํƒ์ƒ‰ ํ›„

ํ•จ์ˆ˜ ๊ทœ๋ชจ๊ฐ€ ๋„ˆ๋ฌด ์ปค์„œ ni๋กœ๋Š” ์›๋ž˜ ํ๋ฆ„์„ ์ฐพ๊ธฐ ํž˜๋“ค๊ธฐ์— ์‚ฌ์šฉํ•˜๋ฏ€๋กœfinish๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด ํ•จ์ˆ˜์˜ ๋๊นŒ์ง€ ํ•œ ๋ฒˆ์— ์‹คํ–‰ ๊ฐ€๋Šฅ

 

finish_๋ช…๋ น์–ด

finish๋ฅผ ์‹คํ–‰ํ•œ ๋ชจ์Šต

 


examine๐Ÿ–จ๏ธ

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

 

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

์ด๋ฅผ ์œ„ํ•ด gdb์—์„  ๊ธฐ๋ณธ์ ์œผ๋กœ x๋ผ๋Š” ๋ช…๋ น์–ด๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

Format letters are o(octal), x(hex), d(decimal), u(unsigned decimal),t(binary),
f(float), a(address), i(instruction), c(char), s(string) and z(hex, zero padded on the left).

Size letters are b(byte), h(halfword), w(word), g(giant, 8 bytes).

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

์•„๋ž˜๋Š” ์˜ˆ์‹œ๋กœ์จ

 

1. rsp๋ถ€ํ„ฐ 80๋ฐ”์ดํŠธ๋ฅผ 8๋ฐ”์ดํŠธ์”ฉ hexํ˜•์‹์œผ๋กœ ์ถœ๋ ฅ

2. rip๋ถ€ํ„ฐ 5์ค„์˜ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ์ถœ๋ ฅ

3. ํŠน์ •ํ•œ ์ฃผ์†Œ์˜ ๊ฐ’ ์ถœ๋ ฅ

 


telescope๐Ÿ”ญ

pwndbg๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋คํ”„ ๊ธฐ๋Šฅ

๋ฉ”๋ชจ๋ฆฌ ๋คํ”„๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ •ํ•ด์ง„ ๋คํ”„ ํฌ๋งท์— ๋”ฐ๋ผ ๊ธฐ๋กํ•œ ํŒŒ์ผ

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

telescope๋ฅผ ์‚ฌ์šฉํ•œ ๋ชจ์Šต

 


vmmap๐Ÿ—บ๏ธ

๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ ˆ์ด์•„์›ƒ์„ ๋ณด์—ฌ์คŒ

 

์–ด๋–ค ํŒŒ์ผ์ด ๋งคํ•‘๋œ ์˜์—ญ์ผ ๊ฒฝ์šฐ, ํ•ด๋‹น ํŒŒ์ผ์˜ ๊ฒฝ๋กœ๊นŒ์ง€ ๋ณด์—ฌ์คŒ

vmmap์„ ์‹คํ–‰ํ•œ ๋ชจ์Šต

๐Ÿ’กํŒŒ์ผ ๋งคํ•‘์ด๋ž€?
 ์–ด๋–ค ํŒŒ์ผ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌํ•˜๋Š” ๊ฒƒ์„ ํŒŒ์ผ ๋งคํ•‘์ด๋ผ๊ณ  ํ•จ
์œ„ ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ์—์„  ๋นจ๊ฐ„ ์ค„ ์ณ ์žˆ๋Š” ๋ถ€๋ถ„์ด ๋งคํ•‘๋œ ํŒŒ์ผ๋“ค์ž…๋‹ˆ๋‹น
โ€‹

 ๋ฆฌ๋ˆ…์Šค์—์„  ELF๋ฅผ ์‹คํ–‰ํ•  ๋•Œ, ๋จผ์ € ELF์˜ ์ฝ”๋“œ์™€ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ƒ ๋ฉ”๋ชจ๋ฆฌ์— ๋งคํ•‘ํ•˜๊ณ ,
ํ•ด๋‹น ELF์— ๋งํฌ๋œ ๊ณต์œ  ์˜คํ”„์ ํŠธ(Shared Object, so)๋ฅผ ์ถ”๊ฐ€๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค
 ๊ณต์œ  obj๋Š” ์œˆ๋„์šฐ์˜ DLL(Dynamic Link Library)๊ณผ ๋Œ€์‘๋œ ๊ฐœ๋…์œผ๋กœ,
์ž์ฃผ ์‚ฌ์šฉ๋  ํ•จ์ˆ˜ ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผํ•จ

 ์˜ˆ์‹œ๋กœ C์–ธ์–ด์˜ printf, scanf ๋“ฑ์ด ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” libc(library C)์— ๊ตฌํ˜„๋จ
๊ณต์œ  ์˜ค๋ธŒ์ ํŠธ์— ์ด๋ฏธ ๊ตฌํ˜„๋œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋งคํ•‘๋œ ๋ฉ”๋ชจ๋ฆฌ์— ์กด์žฌํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋Œ€์‹  ํ˜ธ์ถœ
์ด์— ๋Œ€ํ•ด์„œ๋Š” ๋‚˜์ค‘์— .. ์ž์„ธํžˆ ํ•ฉ์‹œ๋‹ค..

๐ŸŽฏ์—ฌ๊ธฐ์„œ ์ž ๊น!


๊ณต์œ  ์˜คํ”„์ ํŠธ์™€ DDL๊ณผ ๊ฐ™์€ ๊ณ„๋…์ด๋ž€?

 

  • Static Library
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์‹คํ–‰ํŒŒ์ผ์— ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ์กด์žฌํ•˜๋Š” ๊ฒƒ!

  • Shared Library(SO, shared object)
    • ์‹คํ–‰ํŒŒ์ผ๊ณผ ๋ถ„๋ฆฌ๋˜์ง€๋งŒ, ์‹คํ–‰ ์‹œ ์‹คํ–‰ํŒŒ์ผ๊ณผ ํ•จ๊ป˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋จ!
  • Dynamic library(DLL, Dynamic Link Library)
    • SO๋ž‘ ๋น„์Šทํ•˜์ง€๋งŒ ์‹คํ–‰ ์‹œ ์‹คํ–‰ํŒŒ์ผ๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜๊ณ , Lib๋Š” ์‹คํ–‰ ๋„์ค‘์— ๋”ฐ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ

์ด๋ ‡๊ฒŒ ์„ธ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

๋‹น์—ฐํ•œ ๊ฑฐ์ง€๋งŒ static library๋กœ ๋งํฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ์‹คํ–‰ํŒŒ์ผ๋งŒ ๋ฐฐํฌํ•˜๋ฉด๋˜๊ณ 
shared library์™€ dynamic library๋กœ ๋งํฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น library๋กœ ํ•จ๊ป˜ ๋ฐฐํฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.



๐Ÿชgdb / python

gdb๋ฅผ ํ†ตํ•ด ๋””๋ฒ„๊น…ํ•  ๋•Œ ์ง์ ‘ ์ž…๋ ฅํ•  ์ˆ˜ ์—†์„ ๋•Œ๊ฐ€ ์žˆ์œผ๋ฉด?

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ˆซ์ž์™€ ์•ŒํŒŒ๋ฒณ์ด ์•„๋‹Œ ๊ฐ’์„ ์ž…๋ ฅํ•  ์ƒํ™ฉ์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฐ’์€ ์ด์šฉ์ž๊ฐ€ ์ง์ ‘ ์ž…๋ ฅํ•  ์ˆ˜ ์—†๋Š” ๊ฐ’์ด๊ธฐ์— ํŒŒ์ด์ฌ์œผ๋กœ ์ž…๋ ฅ๊ฐ’ ์ƒ์„ฑ, ์‚ฌ์šฉํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ด์ฌ์„ ์ด์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ํ•˜๊ธฐ ์ „์— ์•ž์„œ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ปดํŒŒ์ผ ํ•ฉ์‹œ๋‹ค.

์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, ํ”„๋กœ๊ทธ๋žจ์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋œ ๊ฐ’๊ณผ ์ด์šฉ์ž๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ๋ฐ›์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋Š” ์˜ˆ์ œ

๋ฐ‘์€ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ์ข‹์€ ์ž๋ฃŒ(C์—์„œ ์•„์ง ๋ฏธ์ˆ™ํ•˜๊ฑฐ๋‚˜ ์ต์ˆ™ํ•˜์ง€ ์•Š์„ ์‹œ ๋ณด์„ธ์š” ๊ธฐ์ดˆ๋‹ˆ๊นŒ)


๋”๋ณด๊ธฐ

main ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜


int argc : ๋ฉ”์ธ ํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋Š” ์ •๋ณด์˜ ๊ฐฏ์ˆ˜ ์˜๋ฏธ
char* argv[] : ๋ฉ”์ธํ•จ์ˆ˜์— ์ „๋‹ฌ๋˜๋Š” ์‹ค์งˆ์ ์ธ ์ •๋ณด๋กœ, ๋ฌธ์ž์—ด์˜ ๋ฐฐ์—ด์„ ์˜๋ฏธํ•จ.

์ฒซ๋ฒˆ์งธ ๋ฌธ์ž์—ด์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰๊ฒฝ๋กœ๋กœ ํ•ญ์ƒ ๊ณ ์ •๋จ 

 

C์–ธ์–ด main( ) ํ•จ์ˆ˜์˜ ๋ช…๋ น ์ธ์ˆ˜ (argc, argv)

* main ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋ณดํ†ต ์•„๋ฌด๊ฒƒ๋„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ(int main ( ) ) ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ๋Š” int main (int ...

blog.naver.com



gdb / python argv

argv์˜ ์ทจ์•ฝ์ ์„ ์•Œ์•„๋ณด์ž

 

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

๋‹ค์Œ์€ ํŒŒ์ด์ฌ์—์„œ printํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅ ๊ฐ’์„ run ๋ช…๋ น์–ด์˜ ์ธ์ž๋กœ ์ „๋‹ฌํ•œ ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

๋นจ๊ฐ„์ƒ‰์€ int argc์— ์ฆ‰, argv[1]์— ์‹œ์Šคํ…œ ์‹œ์ž‘ ์ฃผ์†Œ๊ฐ’์ด ์žˆ์ง€๋งŒ ์œ„ ๋นจ๊ฐ„์ค„ ์ฝ”๋“œ์—์„œ์šฉ๋Ÿ‰ ์ดˆ๊ณผ์˜ ๊ฐ’์„ ์ „๋‹ฌํ•˜์—ฌ stack overflow๊ฐ€ ์ผ์–ด๋‚˜์„œ ๊ฐ’์ด ๋ญ‰๊ฐœ์ง„ ๋Š๋‚Œ์ธ๋ฐ..

 

์ฃผํ™ฉ์ƒ‰ ์ฝ”๋“œ๋Š” r ๋‹ค์Œ์— $()๋กœ ๋ช…๋ น์–ด ์ธ์ž๋ฅผ ๊ทธ๋ƒฅ ์‚ฝ์ž…ํ–ˆ๊ธฐ์— argc๊ฐ€ ์ถ”๊ฐ€ ๋˜๋Š”๋ฐ 100๋งŒํผ ์ถ”๊ฐ€๋˜๋Š”์ง€ ํ˜น์—ฌ 1 ์ถ”๊ฐ€๋˜์–ด ์•„๋ž˜ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋กœ.. ์‹ค์ˆ˜๋กœ ์นœ ์ฝ”๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ๊ฐ€๋ฅด์ณ ์ฃผ๋„ค์š” ใ…Ž

 


gdb / python input

์ž…๋ ฅ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„  "<<<"

 

์ด์ „๊ณผ ๊ฐ™์ด $()์™€ ํ•จ๊ป˜ ํŒŒ์ด์ฌ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๊ฐ’์„ ์ž…๋ ฅ ๊ฐ€๋Šฅ

์ž…๋ ฅ๊ฐ’์œผ๋กœ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„  "<<<"๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•จ

๋‹ค์Œ์€ ์•ž์„œ ๋ฐฐ์šด argv[1]์— ์ž„์˜์˜ ๊ฐ’์„ ์ „๋‹ฌํ•˜๊ณ , ๊ฐ’์„ ์ž…๋ ฅํ•˜๋Š” ๋ช…๋ น์–ด์ด์ฃ 

๋นจ๊ฐ„์ƒ‰์€ ์›๋ž˜ ์ถ”์ฒœ์ด์ง€๋งŒ ์ฃผํ™ฉ์ƒ‰ ์„ ์œผ๋กœ ํ•ด๋„ ์ƒ๊ด€ ์—†์œผ๋ฉฐ, ๊ฒฐ๊ณผ๋Š” ์ž…๋ ฅํ•œ ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ๋จ



์ฝ”์Šค ์š”์•ฝ ๐Ÿ“œ

  • start : ์ง„์ž…์ ์— ์ค‘๋‹จ์ ์„ ์„ค์ •ํ•˜๊ณ , ์‹คํ–‰
  • break(b) : ์ค‘๋‹จ์  ์„ค์ •
  • continue(c) : ๊ณ„์† ์‹คํ–‰
  • disassemble : ๋””์Šค์–ด์…ˆ๋ธ” ๊ฒฐ๊ณผ ์ถœ๋ ฅ
  • u, nearpc, pd : ๋””์Šค์–ด์…ˆ๋ธ” ๊ฒฐ๊ณผ ๊ฐ€๋…์„ฑ ์ข‹๊ฒŒ ์ถœ๋ ฅ
  • x : ๋ฉ”๋ชจ๋ฆฌ ์กฐํšŒ
  • run(r) : ํ”„๋กœ๊ทธ๋žจ ์ฒ˜์Œ๋ถ€ํ„ฐ ์‹คํ–‰
  • context : ๋ ˆ์ง€์Šคํ„ฐ, ์ฝ”๋“œ, ์Šคํƒ, ๋ฐฑํŠธ๋ ˆ์ด์Šค์˜ ์ƒํƒœ ์ถœ๋ ฅ
  • nexti(ni) : ๋ช…๋ น์–ด ์‹คํ–‰, ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ๋Š” ๋“ค์–ด๊ฐ€์ง€ ์•Š์Œ
  • stepi(si) : ๋ช…๋ น์–ด ์‹คํ–‰, ํ•จ์ˆ˜ ๋‚ด๋ถ€๋กœ ๋“ค์–ด๊ฐ
  • telescope(tele) : ๋ฉ”๋ชจ๋ฆฌ ์กฐํšŒ, ๋ฉ”๋ชจ๋ฆฌ๊ฐ’์ด ํฌ์ธํ„ฐ์ผ ๊ฒฝ์šฐ ์žฌ๊ท€์ ์œผ๋กœ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๊ฐ’ ์ถœ๋ ฅ
  • vmmap : ๋ฉ”๋ชจ๋ฆฌ ๋ ˆ์ด์•„์›ƒ ์ถœ๋ ฅ


์ฐธ๊ณ  ์ž๋ฃŒ(๋‹จ, ์œ„ ๋ถ€๋ถ„์€ ์ œ๊ฐ€ ๋ฐฐ์šด ๋‚ด์šฉ ์š”์•ฝ์— ๊ฐ€๊น๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ์˜ ์œ„ ๋‚ด์šฉ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.)

 

Tool: gdb

๋ฆฌ๋ˆ…์Šค์˜ ๋””๋ฒ„๊ฑฐ์ธ gdb์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๊ณ , ์‚ฌ์šฉ๋ฒ•์„ ์ตํž™๋‹ˆ๋‹ค.

dreamhack.io

 

 

๊ณต์œ  ์˜ค๋ธŒ์ ํŠธ๋ž€ ๋ญ”๊ฐ€์š”?? | KLDP

dll๊ฐœ๋…ํ•˜๊ณ ๋Š” ๋˜ ๋‹ค๋ฅธ ๊ฒƒ ๊ฐ™๋˜๋ฐ ์–ด๋–ป๊ฒŒ ์ดํ•ดํ•ด์•ผํ• ๊นŒ์š”??? ๋น„์ฅฌ์–ผ ์ŠคํŠœ๋””์˜ค 2008์—์„œ ์†Œ์Šค๋ณผ ๋•Œ .objํŒŒ์ผ ๋ฌถ์Œ์ด ํ”„๋กœ์ ํŠธ์— ์ถ”๊ฐ€๋œ ๊ฑธ ๋ณธ์ ์ด ์žˆ๋Š”๋ฐ ๊ทธ๊ฒŒ ๊ณต์œ  ์˜ค๋ธŒ์ ํŠธ ๋งž๋‚˜์š”??? ์™œ dllํŒŒ์ผ๋กœ

kldp.org

 

์ฐธ๊ณ  ์ด๋ฏธ์ง€

 

Tool: gdb

๋ฆฌ๋ˆ…์Šค์˜ ๋””๋ฒ„๊ฑฐ์ธ gdb์— ๋Œ€ํ•ด ๋ฐฐ์šฐ๊ณ , ์‚ฌ์šฉ๋ฒ•์„ ์ตํž™๋‹ˆ๋‹ค.

dreamhack.io

 

 

Free Icons and Stickers - Millions of resources to download

Download Free Icons and Stickers for your projects. Resources made by and for designers. PNG, SVG, EPS, PSD and CSS formats

www.flaticon.com