C ์ฝ”๋“œ ์˜ค๋ฅ˜ ์‹๋ณ„ ๋„๊ตฌ์ธ ControlFlag 1.0 ์ถœ์‹œ

Intel์€ ๋Œ€๋Ÿ‰์˜ ๊ธฐ์กด ์ฝ”๋“œ์— ๋Œ€ํ•ด ํ›ˆ๋ จ๋œ ๊ธฐ๊ณ„ ํ•™์Šต ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค ์ฝ”๋“œ์˜ ์˜ค๋ฅ˜์™€ ์ด์ƒ์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ControlFlag 1.0 ๋„๊ตฌ์˜ ์ฒซ ๋ฒˆ์งธ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค๋ฅผ ๋ฐœํ‘œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ์กด ์ •์  ๋ถ„์„๊ธฐ์™€ ๋‹ฌ๋ฆฌ ControlFlag๋Š” ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์˜ต์…˜์„ ์ œ๊ณตํ•˜๊ธฐ ์–ด๋ ค์šด ๊ธฐ์„ฑ ๊ทœ์น™์„ ์ ์šฉํ•˜์ง€ ์•Š์ง€๋งŒ ์ˆ˜๋งŽ์€ ๊ธฐ์กด ํ”„๋กœ์ ํŠธ์—์„œ ๋‹ค์–‘ํ•œ ์–ธ์–ด ๊ตฌ์„ฑ ์‚ฌ์šฉ์— ๋Œ€ํ•œ ํ†ต๊ณ„๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค. ControlFlag ์ฝ”๋“œ๋Š” C++๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ MIT ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ์˜คํ”ˆ ์†Œ์Šค๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์ด ์‹œ์Šคํ…œ์€ GitHub ๋ฐ ์œ ์‚ฌํ•œ ๊ณต๊ฐœ ์ €์žฅ์†Œ์— ๊ฒŒ์‹œ๋œ ์˜คํ”ˆ ์†Œ์Šค ํ”„๋กœ์ ํŠธ์˜ ๊ธฐ์กด ์ฝ”๋“œ ๋ฐฐ์—ด์— ๋Œ€ํ•œ ํ†ต๊ณ„ ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•˜์—ฌ ํ•™์Šต๋ฉ๋‹ˆ๋‹ค. ํ›ˆ๋ จ ๋‹จ๊ณ„์—์„œ ์‹œ์Šคํ…œ์€ ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์ผ๋ฐ˜์ ์ธ ํŒจํ„ด์„ ๊ฒฐ์ •ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ ์‹คํ–‰ ํ๋ฆ„์„ ๋ฐ˜์˜ํ•˜์—ฌ ์ด๋Ÿฌํ•œ ํŒจํ„ด ๊ฐ„์˜ ์—ฐ๊ฒฐ์— ๋Œ€ํ•œ ๊ตฌ๋ฌธ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์ถ•ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ, ๋ถ„์„๋œ ๋ชจ๋“  ์†Œ์Šค ์ฝ”๋“œ์˜ ๊ฐœ๋ฐœ ๊ฒฝํ—˜์„ ๊ฒฐํ•ฉํ•œ ์ฐธ์กฐ ์˜์‚ฌ๊ฒฐ์ • ํŠธ๋ฆฌ๊ฐ€ ํ˜•์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฒ€ํ†  ์ค‘์ธ ์ฝ”๋“œ๋Š” ์ฐธ์กฐ ๊ฒฐ์ • ํŠธ๋ฆฌ์™€ ๋น„๊ตํ•˜์—ฌ ํ™•์ธ๋˜๋Š” ํŒจํ„ด์„ ์‹๋ณ„ํ•˜๋Š” ์œ ์‚ฌํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ์ธ์ ‘ํ•œ ๊ฐ€์ง€์™€์˜ ํฐ ๋ถˆ์ผ์น˜๋Š” ํ™•์ธ ์ค‘์ธ ํŒจํ„ด์— ์ด์ƒ์ด ์žˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

C ์ฝ”๋“œ ์˜ค๋ฅ˜ ์‹๋ณ„ ๋„๊ตฌ์ธ ControlFlag 1.0 ์ถœ์‹œ

ControlFlag ๊ธฐ๋Šฅ์˜ ์˜ˆ๋กœ ๊ฐœ๋ฐœ์ž๋Š” OpenSSL ๋ฐ cURL ํ”„๋กœ์ ํŠธ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋น„์ •์ƒ์ ์ธ ๊ตฌ๋ฌธ โ€œ(s1 == NULL) โˆง (s2 == NULL)โ€ ๋ฐ โ€œ(s1 == NULL) | (s2 == NULL)" , ์ผ๋ฐ˜์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํŒจํ„ด "(s1 == NULL) || (s2 == NULL)". ๋˜ํ•œ ์ด ์ฝ”๋“œ๋Š” "(-2 == rv)"(๋นผ๊ธฐ๋Š” ์˜คํƒ€์ž„) ๋ฐ "BIO_puts(bp, ":") <= 0)"(์„ฑ๊ณต์ ์ธ ์™„๋ฃŒ๋ฅผ ํ™•์ธํ•˜๋Š” ๋งฅ๋ฝ์—์„œ) ํ‘œํ˜„์‹์—์„œ ์˜ˆ์™ธ ์‚ฌํ•ญ์„ ์‹๋ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•จ์ˆ˜๋Š” "== 0"์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค).
  • cURL์—์„œ๋Š” ์ˆซ์žํ˜•์ธ ๊ตฌ์กฐ์š”์†Œ โ€œs->keeponโ€์„ ์‚ฌ์šฉํ•  ๋•Œ ์ •์  ๋ถ„์„๊ธฐ์—์„œ ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ–ˆ์œผ๋‚˜ ๋ถˆ๋ฆฌ์–ธ ๊ฐ’ TRUE์™€ ๋น„๊ตํ•˜๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

ControlFlag 1.0 ๋ฒ„์ „์˜ ๊ธฐ๋Šฅ ์ค‘์—๋Š” C ์–ธ์–ด์— ๋Œ€ํ•œ ํ‘œ์ค€ ํ…œํ”Œ๋ฆฟ์„ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•˜๊ณ  ์กฐ๊ฑด๋ถ€ "if" ํ‘œํ˜„์‹์—์„œ ์ด์ƒ์„ ๊ฐ์ง€ํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, "if (x = 7) y = x;" ์ฝ”๋“œ ์กฐ๊ฐ์„ ๋ถ„์„ํ•  ๋•Œ ์‹œ์Šคํ…œ์€ "if" ๋ฌธ์ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆซ์ž ๊ฐ’์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด "๋ณ€์ˆ˜ == ์ˆซ์ž" ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํŒ๋‹จํ•˜๋ฏ€๋กœ "if" ํ‘œํ˜„์‹์˜ "๋ณ€์ˆ˜ = ์ˆซ์ž"๊ฐ€ ์˜คํƒ€๋กœ ์ธํ•ด ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ํ‚คํŠธ์—๋Š” GitHub์—์„œ ๊ธฐ์กด C ์–ธ์–ด ์ €์žฅ์†Œ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ณ  ์ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰์‹œ ์ฝ”๋“œ ํ™•์ธ์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ์„ฑ ๋ชจ๋ธ๋„ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€