๋ฆฌ๋ฒ์ฑ ์์ :: gdb -01 file, x-executable, gdb binary file
์ด๋ฒ ์ค์ต์ ๋ชฉ์ ์ ์์ ํ์ผ์ด ์ด๋ค ํ๋ก๊ทธ๋จ์ธ์ง๋ฅผ ์์๋ด๊ณ ,
๋ฌด์์ ์ ๋ ฅํด์ผ์ง "oh great!!" ๋ผ๋ ๋ฌธ์ฅ์ด ์ถ๋ ฅ๋ ์ง ์์๋ณด๋ ๊ฒ์ด๋ค.
์๋์ฐ์์๋ ํ์ผ ํ์ฅ์๋ก ํ์ผ ์ ๋ณด๋ฅผ ํ์ ํ ์ ์๋๋ฐ,
๋ฆฌ๋ ์ค์์๋ ํ์ฅ์๊ฐ ์กด์ฌํ์ง ์์์ ์์์ ํ์ผ์ ์ข ๋ฅ๋ฅผ ์๊ธฐ ์ํด์๋ ๋ณ๊ฐ์ ์์ ์ด ํ์ํ๋ค.
๋จผ์ , readelf ๋ช ๋ น์ด๋ก ํค๋ ๋ฑ์ ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.



file ๋ช ๋ น์ด๋ก ํ์ผ์ ์ข ๋ฅ๋ฅผ ํ์ธํ ์ ์๋ค.
file filename : filename ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅ
-i ์ต์ ์ ์ฃผ๋ฉด MIME ๋ฏธ๋์ด ํ์ ๋ฌธ์์ด๋ก ํ์๋๋ค.
๋ ๊ฐ๋จํ๊ณ ํต์ฌ๋ง.. ํ์ผ ์ข ๋ฅ๋ฅผ ๋ฐ๋ก ํ์ธํ ์ ์๋ค.

์์ ํ์ผ์ binary file ์ด๊ณ x-executable ํ์ผ์์ ์ ์ ์๋ค.
binary file ์ด๋ผ ๊ทธ๋ฅ text editor ๋ก๋ ์ดํดํ ์ ์๋ ์ ๋ณด๋ค์ด ๋์ฌ ๊ฒ์ด๋ค.
hexdump ํน์ objdump ๋ก 16์ง์ ํน์ ์ด์ ๋ธ๋ฆฌ์ด๋ก ๋ฒ์ญ๋ ์ฝ๋๋ฅผ ๋ณผ ์ ์๋ค.
์ถ๊ฐ๋ก, c ์ฝ๋, ์ด์ ๋ธ๋ฆฌ์ด, ๊ทธ๋ฅ ๋น์ด์๋ ํ์ผ์ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ์ด ์ถ๋ ฅ๋๋ค.

x-executable ํ์ผ์ ๋ค์์ ๋ช ๋ น์ด๋ก ์คํ์ํฌ ์ ์๋ค.
(๋จผ์ ํด๋น ํ์ผ์ ํผ๋ฏธ์ ์ด 777์ด์ด์ผ ํ๋ค.)
sudo chmod 777 filename : filename ์ ํผ๋ฏธ์ ์ 777๋ก ๋ณ๊ฒฝ
(ํน์ ๊ทธ๋ฅ x ๋ง ๋ํด์ค๋ ๋๋ค. chmod +x filename )
./filename : filename ์คํ
( -> ์ด๊ฒ ์๋ ๋ : sh filename ํน์ head -5 filename )

objdump : ํ๋ฉด์ object file ์ ์ ๋ณด๋ฅผ ์ถ๋ ฅํด์ฃผ๋ ํ๋ก๊ทธ๋จ
-0x26(%ebp)

์ค๋ฅผ ๋ง์ถฐ์ผ ํ๋ ๊ฒ์์ ์ ์ถํ์๋ค.
(gdb) info ์์ ์ฌ๋ฌ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
ํ์ง๋ง ๋๋ ์ฌ๊ธฐ์๋ ์ ์ฉํ ์ ๋ณด๋ฅผ ์ป์ง๋ ๋ชปํ๋ค..


๋ค์ ๋์์์,
disassemble funcName ํน์ disass funcName : funcName (ํจ์) ์ ์ด์ ๋ธ๋ฆฌ ์ฝ๋ ์ถ๋ ฅ

break N ํน์ b N : N ๋ฒ์งธ ์ค์ break point
๊ทธ๋ฐ๋ฐ ์ด ์ฝ๋๋ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ผ ๊ทธ๋ฐ์ง? break 1 ๋ง ํด๋ line 1 ์ด ์๋ค๊ณ ๋์จ๋ค. ์์ธ์ง๋..
๊ทธ๋ ๋ค๋ฉด ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ฅผ gdb ์์ ๋๋ฒ๊น ํ๋ ๋ฐฉ๋ฒ์ ......

๊ทธ๋์ ์ด์ ๋ธ๋ฆฌ ์ฝ๋์์์ ์ฃผ์๋ฅผ ์ฐธ์กฐํ์ฌ break point ๋ฅผ ์ก์๋ค.
break *์ฃผ์ : ์ฃผ์ ์ break point

์ค๋จ์ ์ ๊ฑธ์ด๋๊ณ ๋ฐ์ด๋๋ฆฌ ์ฝ๋๋ฅผ ๋ณด๋ scanf ๋ก ์ฌ์ฉ์์๊ฒ ์ ๋ ฅ์ ๋ฐ๊ณ ๋์, strcmp ๋ฅผ ํ๊ธฐ ์ ๋น๊ต ๋์์ push ํ๋ ๊ฒ์ ๋ฐ๊ฒฌํ์๋ค.

์ ์ฃผ์์ ์๋ ๊ฐ์ด ๋ฌด์์ธ์ง๋ฅผ ์๋ฉด ๋ต์ ๊ตฌํ ์ ์๋ค !! << 0x80485ae
์ด์ ์ด๋ป๊ฒ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๊ฐ์ ์กฐ์ฌํ ์ง๋ฅผ ๋ณด๋ฉด,
x adress : adress ์ ์ ๋ณด ์ถ๋ ฅ
( ํน์ x $register : register ๊ฐ ๊ฐ์ง๊ณ ์๋ ์ฃผ์ ์ ๋ณด (?) )
์ฌ๊ธฐ์ ํ์์ ๋ฐ๋ผ ์ ์ฉํ ์ต์ ๋ค์ ์ค ์ ์๋ค.
x/format adress : adress ๋ฅผ format ํ์์ผ๋ก ์ถ๋ ฅ
x | Hexadecimal format |
o | Octal format |
u | Unsigned decimal format |
t | Binary format |
d | Decimal format |
s | string |
i | CPU instruction |
Nx | examine N words form stack |
string ๋ช ๋ น์ด๋ก ์ ์ฃผ์ (0x80485ae) ์ ์๋ ๊ฐ์ ์ดํด๋ณด๊ธฐ๋ก ํ๋ค.
๊ฒฐ๊ณผ๋..

yes!! ๋ฅผ ์ ๋ ฅํด์ผ์ง oh great!! ๊ฐ ์ถ๋ ฅ๋จ์ ์์๋ด์๋ค !!
๋ค๋ฅธ ์ต์ ๋ค๋ ํ ๋ฒ ํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.

(0x79 ๋ y , 0x65 ๋ e)
๋, eax ์ ์ ์ฅ๋, ๋ด๊ฐ ์ ๋ ฅํ ๋ฌธ์์ด์ ํ ๋ฒ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.

breakpoint ๋ก ๋ฉ์ถ ๊ฒ์ด๋ผ
gdb ๋ช ๋ น์ด๋ก step (๋ค์์ผ๋ก ๋์ด๊ฐ) ํ๊ณ continue ๋ฅผ ํ๋ ์ญ์๋ "oh no... :(" ๊ฐ ์ถ๋ ฅ๋จ์ ํ์ธํ์๋ค.

breakpoint ์๋์ด๋ 0x80485ae ์ ์ ์ฅ๋ ๊ฐ์ ์ ์ ์์ง๋ง, (๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋์ด ์์ผ๋ ~)
eax ์ ์ ์ฅ๋์๋ ์ ๋ณด๋ค์ ํ์ธํ ์ ์๋ค๋ ๊ฒ์ ํ ๋ฒ ํ์ธํด ๋ณด์๋ค.
๋ง์ผ ๋ด๊ฐ ์์์ผ ํ๋ ์ ๋ณด๊ฐ ํ๋ก๊ทธ๋จ์ด ๋์๊ฐ๋ ๋์ ๋ฐ๋๊ณ ์์ด์ง๋ ์ ๋ณด๋ผ๋ฉด break point ๋ฅผ ์ ์ก์์ผ ํ๋ค!

break point ๋ฅผ ์ญ์ ํ๋ ค๋ฉด break point ๋ฒํธ๋ฅผ ์ ๋ ฅํ๋ฉด ๋๋ค.
(์ด๋ค ๋ผ์ธ์ break point ์ญ์ ๋ฑ ๋ค๋ฅธ ๋ฐฉ๋ฒ๋ ๋ง๋ค.)
info b(reak) : break point ๋ฆฌ์คํธ ์ถ๋ ฅ
d N : N ๋ฒ์งธ break point ์ญ์
d : ๋ชจ๋ break point ์ญ์

break point ๋ ์ญ์ ๋์ด๋ ๋๋ฒ๋ง์ ์ง์๋๋ค.

1๋ฒ break point ๊ฐ ์ญ์ ๋์์ง๋ง ๋ค์์ break point ๋ 2๋ฒ์์ ์ ์ ์๋ค.
์ด์ ๋ชจ๋ break point ๋ฅผ ์ญ์ ํ๊ณ , ์ฐพ์ ๋ต์ผ๋ก ํ๋ก๊ทธ๋จ์ ๋๋ ค ๋ณด๊ฒ ๋ค.

์ฑ๊ณต!
์ฐธ๊ณ )
(๋๋ฒ๊น ์์) i r : ๋ ์ง์คํฐ ์ ๋ณด๋ค ์ถ๋ ฅ
+)
์ ๋ง ์ ์ฉํ๊ฒ ์ฐธ๊ณ ํ https://hacksland.net/debugging-binaries-with-gdb/
์ข์ ์ ๋ณด๋ค์ด ๋ง๋ค.!