โ๐Debug(ger)๋?
CS(Computer Science)์์ ์ค์๋ก ํ์ํ ํ๋ก๊ทธ๋จ์ ๊ฒฐํจ์ bug๋ผ๊ณ ์นญํจ
์ค์น
sudo apt-get install gdb
git clone https://github.com/pwndbg/pwndbg
cd pwndbg
./setup.sh
๊ฐ๋ฐ์๋ค์ ๋ฒ๊ทธ๋ฅผ ์ฐพ๋๋ฐ ๊ฐ๋ฐ ์ ๋ฐ์ ์๊ฐ์ด ๊ฑธ๋ฆฐ๋ค๊ณ ๋งํ ์ ๋ ๋ฒ๊ทธ๋ฅผ ์ฐพ๋ ์ค์ํ ์์ !
๊ทธ๋งํผ ์์ฑ๋ ์ฝ๋์์ ๋ฒ๊ทธ๋ฅผ ์ฐพ๊ธฐ ํ๋ค๊ธฐ์ ํ์ํ ๋๋ฒ๊ฑฐ(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๊ฐ์ ์์ญ์ผ๋ก ๊ตฌ๋ถ๋จ
- registers : ๋ ์ง์คํฐ์ ์ํ๋ฅผ ๋ณด์ฌ์ค
- disasm : rip๋ถํฐ ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ๋์ค์ด์ ๋ธ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค
- stack : rsp๋ถํฐ ์ฌ๋ฌ ์ค์ ๊ฑธ์ณ ์คํ์ ๊ฐ๋ค์ ๋ณด์ฌ์ค
- backtrace : ํ์ฌ rip์ ๋๋ฌํ ๋๊น์ง ์ด๋ค ํจ์๋ค์ด ์ค์ฒฉ๋์ด ํธ์ถ๋๋์ง ๋ณด์ฌ์ค.. ๋ค์ ์์ธํ ๊ธฐ์ ํ๊ฒ ์
์ด๋ค์ ์ด์ ๋ธ๋ฆฌ๋ฅผ ์คํํ ๋๋ง๋ค ๊ฐฑ์ ๋์ด ๋ฐฉ๊ธ ์คํํ ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด๊ฐ ๋ฉ๋ชจ๋ฆฌ์
์ด๋ค ์ํฅ์ ์คฌ๋์ง ์ฝ๊ฒ ํ์ ํ ์ ์๊ฒ ๋๋ ์ญํ ํฉ๋๋ค.
break & continue ๐ฅ
gdb๋ฅผ ์ด์ฉํด ๋ถ์ ์ ์ ์ฒด ์ฝ๋๊ฐ ์๋ ์ผ๋ถ ์ฝ๋๊ฐ ๋ถ์ ํต์ฌ์ด์ ๊ด์ฌ์ด๋ค๋ ์ !
์ง์ ์ ๋ถํฐ ์ฐจ๋ก๋๋ก ์์ํ๋ฉด ๋๋ฒ๊น ์ ๊ฒฐ์ฝ ํจ์จ์ ์ด์ง ์๊ธฐ์ ์ง์ํ๋ ๊ฒ์ด ์์ด์
๊ทธ๋์ ๋ง์ ๋๋ฒ๊ฑฐ์๋ Continue์ Break๊ฐ ์กด์ฌํฉ๋๋ค.
break(b) : ํน์ ์ฃผ์์ ์ค๋จ์ (breakpoint)์ ์ค์ ํ๋ ๊ธฐ๋ฅ
continue(c) : ์ค๋จ๋ ํ๋ก๊ทธ๋จ์ ๊ณ์ ์คํ์ํค๋ ๊ธฐ๋ฅ
๊ทธ๋ฌํ๋ค๋ฉด break๋ก ์ํ๋ ํจ์์ ์ค๋จ์ ์ ์ค์ ํ, ํ๋ก๊ทธ๋จ์ ๊ณ์ ์คํํ๋ฉด
ํด๋น ํจ์๊น์ง ๋ฉ์ถ์ง ์๊ณ ์คํ ํ ๋ค์ ์ค๋จ๋๊ธฐ์ ์ค๋จ๋ ์ง์ ๋ถํฐ ๋ค์ ์ธ๋ฐํ ๋ถ์ ๊ฐ๋ฅ
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_๋ช ๋ น์ด
๊ทธ๋ฌํ๋ค๋ฉด ์๊ตฌ์ฌ์ด ๋ค๊ฑฐ๋ค printf๋ฅผ ์คํํ๋๋ฐ ์ ๋ฌธ์์ด์ด ์ ์ฐํ๋..?
๐ก์ printf๋ฅผ ์คํํ๋๋ฐ ์๋ฌด ์ผ๋ ์ผ์ด๋์ง ์์๊น?
printf๊ฐ ์ถ๋ ฅํ๊ณ ์ ํ๋ ๋ฌธ์์ด์ stdout์ ๋ฒํผ์์ ์ ์ ๋๊ธฐํ ๋ค ์ถ๋ ฅ๋ฉ๋๋ค.
์ฌ๊ธฐ์ ๋ฒํผ๋ "๋ฐ์ดํฐ๊ฐ ๋ชฉ์ ์ง๋ก ์ด๋ํ๊ธฐ ์ ์ ์ ์ ์ ์ฅ๋๋ ์ฅ์"๋ผ๋ ์๋ฏธ์ด์ฃ
stdout ๋ฒํผ๋ ํน์ ์กฐ๊ฑด์ด ๋ง์กฑ๋ ๋๋ง ๋ฐ์ดํฐ๋ฅผ ๋ชฉ์ ์ง๋ก ์ด๋์ํค๋๋ฐ ๊ทธ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ์์
์์์๋ ์ ์ด๋ ์กฐ๊ฑด๊ณผ๋ ๋ง์กฑํ์ง ์๊ธฐ ๋๋ฌธ์, ํ๋ก๊ทธ๋จ ์ข ๋ฃํ ๋๊น์ง ๋ฌธ์์ด ์ถ๋ ฅX
- ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋
- ๋ฒํผ๊ฐ ๊ฐ๋ ์ฐผ์ ๋
- fflush์ ๊ฐ์ ํจ์๋ก ๋ฒํผ๋ฅผ ๋น์ฐ๋๋ก ๋ช ์ํ์ ๋
- ๊ฐํ๋ฌธ์๊ฐ ๋ฒํผ์ ๋ค์ด์์ ๋
si_๋ช ๋ น์ด
si๋ฅผ ์ ๋ ฅํ๋ฉด ์์ ๊ฐ์ด printf ํจ์ ๋ด๋ถ๋ก rip๊ฐ ์ด๋ํ ๊ฒ์ ํ์ธ ๊ฐ๋ฅ
ํ๋ก๊ทธ๋จ์ ๋ถ์ํ๋ค๊ฐ, ์ด๋ค ํจ์์ ๋ด๋ถ๊น์ง ๊ถ๊ธํ ๋ si, ์๋๋ผ๋ฉด ni๋ฅผ ์ฌ์ฉํ๋๊ฒ์ด ํต์ฌ!
contextํ๋จ์ Backtrace๋ฅผ ๋ณด๋ฉด, mainํจ์์์ printf๋ฅผ ํธ์ถํด์ mainํจ์ ์์ printfํจ์๊ฐ ์ ์ ๋จ
finish
step info(si)์์ ๋ฐ๋ก ๋น ์ ธ๋์ค๋ ๋ช ๋ น์ด
step info(si)๋ก ํจ์ ๋ด๋ถ์ ๋ค์ด๊ฐ์ ํ์ํ ๋ถ๋ถ์ ๋ชจ๋ ํ์ ํ
ํจ์ ๊ท๋ชจ๊ฐ ๋๋ฌด ์ปค์ ni๋ก๋ ์๋ ํ๋ฆ์ ์ฐพ๊ธฐ ํ๋ค๊ธฐ์ ์ฌ์ฉํ๋ฏ๋ก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๊ฐ ์ ๊ณตํ๋ ๊ฐ๋ ฅํ ๋ฉ๋ชจ๋ฆฌ ๋คํ ๊ธฐ๋ฅ
๋ฉ๋ชจ๋ฆฌ ๋คํ๋ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ํด์ง ๋คํ ํฌ๋งท์ ๋ฐ๋ผ ๊ธฐ๋กํ ํ์ผ
ํน์ ์ฃผ์์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ๋ค์ ๋ณด์ฌ์ฃผ๋ ๊ฒ์ ๊ทธ์น์ง ์๊ณ , ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฐธ์กฐํ ์ฃผ์๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํ์
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๋ ์คํ ๋์ค์ ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ
- SO๋ ๋น์ทํ์ง๋ง ์คํ ์ ์คํํ์ผ๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋๊ณ , Lib๋ ์คํ ๋์ค์ ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ
์ด๋ ๊ฒ ์ธ๊ฐ์ง๊ฐ ์กด์ฌํฉ๋๋ค.
๋น์ฐํ ๊ฑฐ์ง๋ง static library๋ก ๋งํฌ๋์ด ์๋ ๊ฒฝ์ฐ ์คํํ์ผ๋ง ๋ฐฐํฌํ๋ฉด๋๊ณ
shared library์ dynamic library๋ก ๋งํฌ๋์ด ์๋ ๊ฒฝ์ฐ ํด๋น library๋ก ํจ๊ป ๋ฐฐํฌํด์ผ ํฉ๋๋ค.
๐ชgdb / python
gdb๋ฅผ ํตํด ๋๋ฒ๊น ํ ๋ ์ง์ ์ ๋ ฅํ ์ ์์ ๋๊ฐ ์์ผ๋ฉด?
์๋ฅผ ๋ค์ด, ์ซ์์ ์ํ๋ฒณ์ด ์๋ ๊ฐ์ ์ ๋ ฅํ ์ํฉ์ ๋๋ค.
์ด๋ฐ ๊ฐ์ ์ด์ฉ์๊ฐ ์ง์ ์ ๋ ฅํ ์ ์๋ ๊ฐ์ด๊ธฐ์ ํ์ด์ฌ์ผ๋ก ์ ๋ ฅ๊ฐ ์์ฑ, ์ฌ์ฉํด์ผํฉ๋๋ค.
ํ์ด์ฌ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ํ๊ธฐ ์ ์ ์์ ์๋ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ปดํ์ผ ํฉ์๋ค.
์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด, ํ๋ก๊ทธ๋จ์ ์ธ์๋ก ์ ๋ฌ๋ ๊ฐ๊ณผ ์ด์ฉ์๋ก๋ถํฐ ์ ๋ ฅ๋ฐ์ ๊ฐ์ ์ถ๋ ฅํ๋ ์์
๋ฐ์ ์ฐธ๊ณ ํ์๋ฉด ์ข์ ์๋ฃ(C์์ ์์ง ๋ฏธ์ํ๊ฑฐ๋ ์ต์ํ์ง ์์ ์ ๋ณด์ธ์ ๊ธฐ์ด๋๊น)
main ํจ์์ ๋งค๊ฐ๋ณ์
int argc : ๋ฉ์ธ ํจ์์ ์ ๋ฌ๋๋ ์ ๋ณด์ ๊ฐฏ์ ์๋ฏธ
char* argv[] : ๋ฉ์ธํจ์์ ์ ๋ฌ๋๋ ์ค์ง์ ์ธ ์ ๋ณด๋ก, ๋ฌธ์์ด์ ๋ฐฐ์ด์ ์๋ฏธํจ.
์ฒซ๋ฒ์งธ ๋ฌธ์์ด์ ํ๋ก๊ทธ๋จ์ ์คํ๊ฒฝ๋ก๋ก ํญ์ ๊ณ ์ ๋จ
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 : ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์ ์ถ๋ ฅ
์ฐธ๊ณ ์๋ฃ(๋จ, ์ ๋ถ๋ถ์ ์ ๊ฐ ๋ฐฐ์ด ๋ด์ฉ ์์ฝ์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ์ ๋ด์ฉ๊ณผ ๊ฐ์ต๋๋ค.)
์ฐธ๊ณ ์ด๋ฏธ์ง
'๐โSystem_Study > ๐โDreamhack_Hacking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Exploit Tech: Shellcode (0) | 2022.04.15 |
---|---|
Tool: pwntools (4) | 2022.04.04 |
Quiz: x86 Assembly (0) | 2022.03.27 |
x86 Assembly: Essential Part (0) | 2022.03.24 |
Linux Memory Layout (0) | 2022.03.21 |