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

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

by ๋ถˆํƒ€๋Š” ์ฐธ์ƒˆ 2023. 10. 9.

๋ฌธ์ œ ์ดํ•ด

๋“œ๋ฆผํ•ต ์›Œ๊ฒŒ์ž„ ๋ฆฌ๋ฒ„์‹ฑ ๋ถ„์•ผ์—์„œ rev-basic-1 ๋ฌธ์ œ๋ฅผ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์•„์ค€๋‹ค.

[์œˆ๋„์šฐ+R] ํ‚ค๋ฅผ ๋ˆ„๋ฅด๊ณ  cmd ์ฐฝ์„ ์—ด์–ด์ค€๋‹ค. "cd (๋‚ด๊ฐ€ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ํŒŒ์ผ ์ฃผ์†Œ)" ์ž…๋ ฅํ•˜๊ณ  "(์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ).exe"๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์œ„ ํ™”๋ฉด์ฒ˜๋Ÿผ "Input : "์ด ๋œฌ๋‹ค.

 

์•„๋ฌด ์ˆซ์ž๋‚˜ ์ž…๋ ฅํ•ด์คฌ๋”๋‹ˆ "Wrong"์ด ๋–ด๋‹ค. ์ด ๋ฌธ์ œ๋Š” ์ •๋‹ต์ด ๋˜๋Š” ํŠน์ • ๋ฌธ์ž๋‚˜ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

๋ฌธ์ œ ๊ณ„ํš

  1. X64 Debuger๋กœ ํ”„๋กœ๊ทธ๋žจ์„ ์—ด์–ด ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์ธ์ง€ ๋ถ„์„ํ•  ์ค€๋น„๋ฅผ ํ•œ๋‹ค.
  2. "Wrong"์ด๋‚˜ "Input" ๊ด€๋ จ ๋ช…๋ น์–ด๊ฐ€ ์–ด๋”” ์žˆ๋Š”์ง€ ์ฐพ์•„ main ํ•จ์ˆ˜ ๋ถ€๋ถ„์„ ์•Œ์•„๋‚ธ๋‹ค.
  3. "Wrong" ๋˜๋Š” "Correct"๋ฅผ ๊ฒฐ์ •์ง“๋Š” ์ฝ”๋“œ, ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋‚ธ๋‹ค.
  4. ๊ทธ ๊ฒฐ์ •์ง“๋Š” ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•ด ์–ด๋–ค ๊ฐ’์„ ์ž…๋ ฅํ•ด์•ผ ์ถœ๋ ฅ๊ฐ’์ด "Correct"๊ฐ€ ๋˜๋Š”์ง€ ์•Œ์•„๋‚ธ๋‹ค.

๋ฌธ์ œ ์‹คํ–‰

X64 Debuger๋กœ chall1 ํŒŒ์ผ์„ ์—ด์–ด์ค€๋‹ค. ์—ด๋ฉด ์œ„์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋ณด์ธ๋‹ค.

์•„๋Š” ๊ฒƒ์€ ๋จผ์ € "Wrong" ์ถœ๋ ฅ์ด ์–ด๋””์„œ ์ด๋ฃจ์–ด์ง€๋Š”์ง€ ์ฐพ์•„์ค€๋‹ค. ("Input : "์„ ์ฐพ์•„์ค˜๋„ ์ข‹๋‹ค.)

 

์šฐ์ธก ์ƒ๋‹จ ๊ฐ€์žฅ ํฐ ํ™”๋ฉด์— ๋งˆ์šฐ์Šค ์šฐํด๋ฆญ ํ•˜๊ณ  [๋‹ค์Œ์„ ์ฐพ๊ธฐ]→ [๋ฌธ์ž์—ด ์ฐธ์กฐ(s)]→ [๋ชจ๋“  ๋ชจ๋“ˆ]๋กœ ๋“ค์–ด๊ฐ€ ์ฐพ์•„์ค€๋‹ค.

 

๋“ค์–ด๊ฐ€๋ฉด ์œ„์˜ ํ™”๋ฉด์ด ๋‚˜์˜จ๋‹ค. ์•„๋ž˜ ๊ฒ€์ƒ‰ ์ฐฝ์— "Wrong"์„ ๊ฒ€์ƒ‰ํ•œ ๋’ค ํ•ด๋‹น ๋ช…๋ น์–ด๋ฅผ ๋”๋ธ” ํด๋ฆญํ•˜์—ฌ ์ด๋™ํ•œ๋‹ค.

 

์ด๋™ํ•˜๋ฉด ๋ฌธ์ž๋‚˜ ์ˆซ์ž๋ฅผ ์ž…๋ ฅ ๋ฐ›๊ณ  Wrong, Correct๋ฅผ ํŒ๋ณ„ํ•˜์—ฌ ๊ทธ ๊ฒฐ๊ณผ ๊ฐ’์„ ํ”„๋ฆฐํŠธ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ๋‹ค.

main ํ•จ์ˆ˜๋ฅผ ์ฐพ์€ ๊ฒƒ์ด๋‹ค. ์ด์ œ main ํ•จ์ˆ˜์—์„œ Wrong, Correct๋ฅผ ๊ฒฐ์ •์ง“๋Š” ๋ช…๋ น์–ด๋‚˜ ํ•จ์ˆ˜๋ฅผ ์ฐพ์•„์ค€๋‹ค.

 

main ํ•จ์ˆ˜๋ฅผ ๋œฏ์–ด๋ณผ ์ฐจ๋ก€์ด๋‹ค. ๋‹จ์ถ•์–ด๋ฅผ ์จ๊ฐ€๋ฉฐ ํ•จ์ˆ˜๋ฅผ ์‚ดํŽด๋ณธ๋‹ค.

cf) ํ•จ์ˆ˜ ๋‹จ์ถ•์–ด:

F7 ์ฝ”๋“œ ํ•œ ์ค„ ์‹คํ–‰ (call ํ•จ์ˆ˜ ์ง„์ž…)
F8 ์ฝ”๋“œ ํ•œ ์ค„ ์‹คํ–‰ (call ํ•จ์ˆ˜ ์ง„์ž…ํ•˜์ง€ ์•Š๊ณ  ์ง€๋‚˜๊ฐ)
F9 ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰
ctrl + g ์ฃผ์†Œ ์ด๋™

 

ํ•จ์ˆ˜๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด Input ๋‹ค์Œ์— ์ฒซ ๋ฒˆ์งธ๋กœ ํ•จ์ˆ˜๋ฅผ callํ•œ๋‹ค. Input ๋ฐ”๋กœ ๋‹ค์Œ์— ๋‚˜์˜ค๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์ž…๋ ฅ ๊ด€๋ จ ํ•จ์ˆ˜์ผ ๊ฒƒ์ด๋‹ค. %256s ๋‹ค์Œ์— call ํ•œ ํ•จ์ˆ˜๋„ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ํ•จ์ˆ˜๋กœ ์ถ”์ธกํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค์Œ์œผ๋กœ 'chall1.7FF6C9A61000' ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ์–ด๋–ค ํ•จ์ˆ˜์ธ์ง€ ์•„์ง ๋ชจ๋ฅธ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ๋‹ค์Œ ๋ช…๋ น์–ด์—์„œ test eax eax๊ฐ€ ๋‚˜์˜ค๊ณ  ๊ทธ ์•„๋žซ์ค„์— je ...613B6์ด ๋‚˜์˜จ๋‹ค.

je๋Š” 'jump equal'์˜ ์•ฝ์ž๋กœ ๊ฐ™์œผ๋ฉด  'je ...613B6' ํ•จ์ˆ˜๋กœ ์ด๋™ํ•˜๋ผ๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

eax์™€ eax๋Š” ๊ฐ™์€ ๋ ˆ์ง€์Šคํ„ฐ์ด๋ฏ€๋กœ ๊ฐ™์„ ์ˆ˜๋ฐ–์— ์—†๋‹ค. ๋”ฐ๋ผ์„œ 'je ...613B6' ํ•จ์ˆ˜๋กœ ๋ฌด์กฐ๊ฑด ์ด๋™ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ,

'je ...613B6' ํ•จ์ˆ˜๋กœ ๋“ค์–ด๊ฐ€๋ฉด "Wrong"์ด ์ถœ๋ ฅ๋˜๋Š” ๋ช…๋ น์–ด๋กœ ์ด์–ด์ง„๋‹ค.

์ฆ‰ test eax eax๋ฅผ ๋งŒ๋‚˜์ง€ ์•Š๊ฒŒ ํ•ด์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ  'chall1.7FF6C9A61000' ํ•จ์ˆ˜๊ฐ€ "Wrong" ๋˜๋Š” "Correct" ์ถœ๋ ฅ์„ ๊ฒฐ์ •ํ•˜๋Š” ํ•จ์ˆ˜์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๊ฒฐ์ •์  ํ•จ์ˆ˜๋ฅผ ์ฐพ์•˜์œผ๋‹ˆ ๋”๋ธ” ํด๋ฆญํ•ด ๋” ์‚ดํŽด๋ณธ๋‹ค. ๋”๋ธ” ํด๋ฆญํ•˜๋ฉด ์œ„์˜ ํ™”๋ฉด์ด ๋ณด์ธ๋‹ค.

 

ํ•จ์ˆ˜ ์ดˆ๋ฐ˜ PUSH ๋ถ€๋ถ„์€ ๋„˜์–ด๊ฐ€๊ณ  ๊ทธ ์ดํ›„๋ถ€ํ„ฐ ์‚ดํŽด๋ณด๋ฉด, 

์œ„์˜ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ movzx, cmp, je, xor, jmp ๋ช…๋ น์–ด๊ฐ€ ๊ณ„์† ๋ฐ˜๋ณต๋˜๊ณ  ์žˆ๋‹ค.

 

movzx๋Š” ์•ž์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋’ค์˜ ๋ฐ์ดํ„ฐ๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ž‘์•„๋„ mov ๋  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

eax์— ์ž…๋ ฅํ•œ ๋ฌธ์ž์—ด ์ค‘ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž์™€ 61(a)๋ฅผ ๋น„๊ตํ•œ๋‹ค.

je์ด๋ฏ€๋กœ ๊ฐ™์œผ๋ฉด ๋‹ค์Œ ๋ฌธ์ž ๋น„๊ต ๋ถ€๋ถ„์œผ๋กœ ๋„˜์–ด๊ฐ€๊ณ , ๊ฐ™์ง€ ์•Š์œผ๋ฉด ๋ฐ”๋กœ ๋ฐ‘์ค„์ธ xor eax eax ๋ถ€๋ถ„์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๋˜๋ฉด call1.7FF6C9A612bE๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. 

call1.7FF6C9A612bE๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด main ํ•จ์ˆ˜๋กœ return ํ•œ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ž…๋ ฅํ•œ ๋ฌธ์ž์—ด๊ณผ ๋น„๊ตํ•˜๊ณ  ์žˆ๋Š” ๋ฌธ์ž์—ด์ด ๋™์ผํ•ด์•ผ ํ•œ๋‹ค.

 

์˜†์— ๋‚˜์˜จ ๋ฌธ์ž์—ด์„ ์ฐจ๋ก€๋Œ€๋กœ ์ž…๋ ฅํ•ด์ค€๋‹ค. ์ฒซ ๋ฒˆ์งธ 'C'๋Š” ๋Œ€๋ฌธ์ž์ž„์— ์ฃผ์˜ํ•œ๋‹ค.

"Correct" !!

์˜ค๋Š˜ ๋ฐฐ์šด ๊ฒƒ

  • je(jump equal) ํ•จ์ˆ˜๊ฐ€ 'test eax eax'์™€ ๋งŒ๋‚˜ ๋งˆ์น˜ ์กฐ๊ฑด๋ฌธ์ฒ˜๋Ÿผ ์—ญํ•  ํ•˜๊ณ  ์žˆ๋‹ค.
  • main ํ•จ์ˆ˜, ๊ฒฐ์ •์  ํ•จ์ˆ˜๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ฐพ์•„์ฃผ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

๋ฐ˜์„ฑํ•˜๊ธฐ

  • 'call1.7FF6C9A612bE'๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ๊ฒฐ์ •์  ํ•จ์ˆ˜๋ฅผ ๋‚˜๊ฐˆ ๋•Œ ์ •ํ™•ํžˆ ์–ด๋–ป๊ฒŒ "Wrong" ์ถœ๋ ฅ๊นŒ์ง€ ์ด์–ด์ง€๋Š”์ง€ ๊ตฌ์ฒด์  ๊ณผ์ •์„ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.