๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ง ๋ฆฌ๋ฒ„์‹ฑ

Dreamhack ๋ฆฌ๋ฒ„์‹ฑ ๋ฌธ์ œํ’€์ด: rev-basic-0

by ๋ถˆํƒ€๋Š” ์ฐธ์ƒˆ 2023. 8. 5.

๊นŒ๋ง‰๋ˆˆ์ด๋‹ค.ใ‚ท

Dreamhack์—์„œ ํ‘ผ ๋ฆฌ๋ฒ„์‹ฑ ๋ฌธ์ œ์˜ ํ’€์ด ๊ณผ์ •์„ ์ •๋ฆฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

ํ‘ผ ๋ฌธ์ œ๋Š” ์›Œ๊ฒŒ์ž„์˜ rev-basic-0์ด๋‹ค.

๋ฌธ์ œ ์ •๋ณด

์ž…๋ ฅ๊ฐ’์— ๋”ฐ๋ผ correct ๋˜๋Š” wrong์„ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ correct๊ฐ€ ์ถœ๋ ฅ ๋˜๋Š” ์ž…๋ ฅ๊ฐ’์„ ์ฐพ๋Š” ๋ฌธ์ œ์ด๋‹ค.

๋ฌธ์ œ ํŒŒ์ผ์„ ๋‹ค์šด ๋ฐ›์•„ ์••์ถ• ํŒŒ์ผ์„ ํ•ด์ œํ•œ ๋’ค x64dbg์— ๋“ค์–ด๊ฐ€ ํŒŒ์ผ์„ ์—ด์—ˆ๋‹ค.

x64dbg๋Š” https://x64dbg.com/์—์„œ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

 

๋ฌธ์ œ ํ’€์ด ๊ณผ์ •

x64dbg์—์„œ ์œ„์ชฝ ์ขŒ์ธก 'ํŒŒ์ผ(F)'์„ ๋ˆ„๋ฅด๊ณ  'ํŒŒ์ผ ์—ด๊ธฐ'๋ฅผ ํ•ด์„œ ์••์ถ•์„ ํ•ด์ œํ•œ ํŒŒ์ผ์„ ์˜คํ”ˆํ•œ๋‹ค. 

ํŒŒ์ผ์„ ์ฒ˜์Œ ์—ด๋ฉด ์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๋งค์šฐ ์งง์€ ์ฝ”๋“œ๋„ ์–ด์…ˆ๋ธ”๋ฆฌ์—์„œ๋Š” ์ˆ˜๋งŽ์€ ์ค„์˜ ์–ธ์–ด๋กœ ๋ฒˆ์—ญ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งจ ์œ„์˜ ์ค„๋ถ€ํ„ฐ ํ•˜๋‚˜ํ•˜๋‚˜ ์‚ดํŽด๋ณผ ์ˆ˜๋Š” ์—†๋‹ค.

ํšจ๊ณผ์ ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ํ•„์š”ํ•œ ๋ถ€๋ถ„์„ ์ฐพ๊ธฐ ์œ„ํ•ด ์šฐ์„  ์ถœ๋ ฅ๊ฐ’, ์ฆ‰ printf๋ฅผ ํ–ˆ์„ ๋•Œ ๋œจ๋Š” ๋ฌธ์ž์—ด์„ ์ฐพ์•„์ค€๋‹ค.

์ถœ๋ ฅ ๋˜๋Š” ๋ฌธ์ž์—ด์ธ "correct" ๋˜๋Š” wrong"์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ฌธ์ž์—ด ์ฐธ์กฐ์— ๋“ค์–ด๊ฐ€ ๊ฒ€์ƒ‰ํ•ด์ค€๋‹ค.

๋ฌธ์ž์—ด์„ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ™”๋ฉด์— ๋œจ๋Š” 4๊ฐœ์˜ ์ฐฝ ์ค‘ ๊ฐ€์žฅ ํฐ ์ฐฝ์— ๋งˆ์šฐ์Šค๋ฅผ ๋‘๊ณ  ์šฐ์ธก ํด๋ฆญ, 

๋‹ค์Œ์„ ์ฐพ๊ธฐ, ๋ชจ๋“  ๋ชจ๋“ˆ, ๋ฌธ์ž์—ด ์ฐธ์กฐ๋ฅผ ํด๋ฆญํ•˜๋ฉด ๋œ๋‹ค.

๋ฌธ์ž์—ด ์ฐธ์กฐ์— ๋“ค์–ด๊ฐ„ ๋’ค ๋งจ ์•„๋ž˜์˜ ๊ฒ€์ƒ‰์ฐฝ์— ์ฐพ๋Š” ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

"input", "wrong", "correct" ์ค‘ ์•„๋ฌด๊ฑฐ๋‚˜ ๊ฒ€์ƒ‰ํ•ด๋„ ์ƒ๊ด€์—†๋‹ค. ๋‚˜๋Š” "wrong"์ด๋ผ๋Š” ๋ฌธ์ž์—ด๋กœ ๊ฒ€์ƒ‰ํ–ˆ๋‹ค.

3์ค„์˜ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ ๊ทธ์ค‘ ์ถœ๋ ฅ ๋œ ๋ฌธ์ž์—ด์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ€์žฅ ์ฒซ ์ค„์„ ๋”๋ธ” ํด๋ฆญํ•œ๋‹ค.

๋”๋ธ” ํด๋ฆญํ•˜๋ฉด ์ด๋ ‡๊ฒŒ "wrong"์˜ ์ถœ๋ ฅ๊ณผ ๊ด€๋ จ๋œ ์ฝ”๋“œ๋กœ ์ด๋™ํ•œ๋‹ค.

์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ ๋ถ€๋ถ„์ด ๋‚˜์™€ ์žˆ์œผ๋ฏ€๋กœ main ํ•จ์ˆ˜์™€ ๊ด€๋ จ๋œ ๋ถ€๋ถ„์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์ด์ œ ์กฐ๊ธˆ ์ž์„ธํžˆ ์‚ดํŽด๋ณด์•„์•ผ ํ•œ๋‹ค.

'call'์ด๋ผ๋Š” ์˜ต์ฝ”๋“œ๋Š” ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ช…๋ น์–ด์ด๋‹ค. 

main ํ•จ์ˆ˜ ์•ˆ์—์„œ ์˜ต์ฝ”๋“œ call์ด ์ด๋„๋Š” ์—ฌ๋Ÿฌ ์ฝ”๋“œ๋“ค์ด ๋ณด์ธ๋‹ค. 

๊ฐ€์žฅ ์œ„์— ๋ณด์ด๋Š” call์€ "input" ๋ฐ”๋กœ ๋‹ค์Œ ์ค„์ด๋ฏ€๋กœ ์ž…๋ ฅ๊ณผ ๊ด€๋ จ๋œ ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜จ ๊ฒƒ์ด๊ณ ,

๊ทธ ๋‹ค์Œ call๋„ "%256s" ๋’ค์ด๋ฏ€๋กœ ๋ฌธ์ž์—ด ๊ด€๋ จ ํ•จ์ˆ˜์ด๋‹ค. 

๋‘ call ๋ชจ๋‘ ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๋Š” ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š๋Š”๋‹ค. ํƒˆ๋ฝ.

๋‹ค์Œ call ๋ฐ‘์˜ ์ค„์—๋Š” test eax, eax๊ฐ€ ์žˆ๋‹ค.

test๋Š” AND ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ test ๋’ค์˜ ๋‘ ์˜คํผ๋žœ๋“œ๊ฐ€ ๊ฐ™์œผ๋ฉด 1, ๋‹ค๋ฅด๋ฉด 0 ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.

eax์™€ eax, ๊ฐ™์€ ๊ฐ’์„ ๊ฐ€์ง„ ์˜คํผ๋žœ๋“œ๋ผ๋ฆฌ ์„œ๋กœ ๋น„๊ตํ•˜๋ฏ€๋กœ AND ์—ฐ์‚ฐ๊ฒฐ๊ณผ๋Š” 1์ด๋‹ค.

์ด๋•Œ ZF๋Š” ๊ณ„์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ 0์ด๋ฉด 1์„, 1์ด๋ฉด 0์„ ์ €์žฅํ•˜๋ฏ€๋กœ, ZF๋Š” 0์ด๋‹ค.

test ๋ฐ‘์˜ ์ค„์ธ je๋Š” ZF๊ฐ€ 0์ผ๋•Œ ์ ํ”„ํ•˜๋Š” ์˜ต์ฝ”๋“œ์ด๋‹ค.

์ ํ”„๋ฅผ ํ•˜๊ฒŒ ๋˜๋ฉด "wrong"์„ ์ถœ๋ ฅํ•˜๋Š” ์ฝ”๋“œ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ 'call cha110.7FF75D181000'์ด๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ test eax, eax๋ฅผ ๋งŒ๋‚˜์ง€ ์•Š๋„๋ก ํ•ด์•ผ ํ•œ๋‹ค.

์ฆ‰, call cha110.7FF75D181000์ด "correct" ๋˜๋Š” "wrong" ์ค‘ ์–ด๋–ค ๋ฌธ์ž์—ด์„ ์ถœ๋ ฅํ• ์ง€ ์„ ํƒํ•˜๋Š” ๊ฒฐ์ •์  ์ฝ”๋“œ์ด๋‹ค.

์ด ํ•จ์ˆ˜๋ฅผ ๋”๋ธ” ํด๋ฆญ ํ•ด์„œ ์–ด๋–ค ํ•จ์ˆ˜์ธ์ง€ ์‚ดํŽด๋ณด๋ฉด ์˜†์— ๋ฌธ์ž์—ด์ด ๋ฐœ๊ฒฌ๋œ๋‹ค.

cmd ์ฐฝ์„ ์—ด์–ด "input: "์— ๋‹ต์„ ์ž…๋ ฅํ•ด์ฃผ๋ฉด

๋‚˜๋Š” ๋งจ ์•ž์˜ 'C'๋ฅผ ์ฒ˜์Œ์— ์†Œ๋ฌธ์ž๋กœ ์ž…๋ ฅํ•ด์„œ ํ•œ ๋ฒˆ ํ‹€๋ ธ์ง€๋งŒ, (¬_¬")

์ œ๋Œ€๋กœ 'compar3_the_str1ng'์„ ์ž…๋ ฅํ•ด์ฃผ๋ฉด 'Correct'๊ฐ€ ๋œฌ๋‹ค. ์ •๋‹ต์ด๋‹ค.