SECURITY/REVERSING

๋ฆฌ๋ฒ„์‹ฑ ์˜ˆ์ œ :: gdb -01 file, x-executable, gdb binary file

\b\t 2020. 7. 21. 23:12

์ด๋ฒˆ ์‹ค์Šต์˜ ๋ชฉ์ ์€ ์˜ˆ์ œ ํŒŒ์ผ์ด ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์ธ์ง€๋ฅผ ์•Œ์•„๋‚ด๊ณ , 

๋ฌด์—‡์„ ์ž…๋ ฅํ•ด์•ผ์ง€ "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/

์ข‹์€ ์ •๋ณด๋“ค์ด ๋งŽ๋‹ค.!

๋Œ“๊ธ€์ˆ˜0