๋ฌธ์ : DreamHack โ Snowing!
๋ถ๋ฅ: Forensics / Misc (์คํ ๊ฐ๋ ธ๊ทธ๋ํผ)
๋์ด๋: ๐ฅ Silver 4
FLAG:
DH{w0w_1t_Sn0w5}
๋ฌธ์ ๊ฐ์
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ๋ฌธ์ ๋ช | Snowing! |
| ๋์ด๋ | ๐ฅ Silver 4 |
| ๋ถ๋ฅ | Forensics / Misc |
| ์ ๊ณต ํ์ผ | DH.zip โ Snow.jpeg + flag.txt |
| ์๋ฒ | ์์ (์คํ๋ผ์ธ ํ์ผ ๋ถ์) |
| ํต์ฌ ๊ธฐ๋ฒ | SNOW ํ์ดํธ์คํ์ด์ค ์คํ ๊ฐ๋ ธ๊ทธ๋ํผ |
๋ฌธ์ ๋ช
์ด ๊ณง ํํธ๋ค. "Snowing!" โ SNOW. SNOW๋ Matthew Kwan์ด ๋ง๋ ๊ณ ์ ์คํ
๊ฐ๋
ธ๊ทธ๋ํผ ๋๊ตฌ๋ก,
ํ
์คํธ ์ค ๋์ ๋ถ๋ ๊ณต๋ฐฑ(space)๊ณผ ํญ(tab)์ ๋ฐฐ์ด์ ๋ฐ์ดํฐ๋ฅผ ์จ๊ธด๋ค. ํ๋ฉด์๋ ๊ทธ๋ฅ ๋น ์ค์ฒ๋ผ ๋ณด์ฌ์ ๋์ผ๋ก๋ ์ ๋ ๋ชป ์ฐพ๋๋ค.
๊ณ๋ค์ฌ ์จ Snow.jpeg ๋ ์ฌ๋์ ์ด๋ฏธ์ง ์คํ
๊ฐ๋
ธ ์ชฝ์ผ๋ก ์ ์ธํ๋ ๋ฏธ๋ผ ์ฑ๊ฒฉ์ด ๊ฐํ๋ค โ ๊ทธ๊ฒ๋ ํ์ธํด ๋ณผ ๊ฒ์ด๋ค.
1. ๋ฐฐ๊ฒฝ โ SNOW ํ์ดํธ์คํ์ด์ค ์คํ ๊ฐ๋ ธ๊ทธ๋ํผ
SNOW(Steganographic Nature Of Whitespace)๋ ํ ์คํธ ๊ฐ ์ค ๋ค์ ๋ถ๋ ๊ณต๋ฐฑ/ํญ์ ์กฐํฉ์ผ๋ก ๋นํธ๋ฅผ ์ธ์ฝ๋ฉํ๋ค. ํต์ฌ ํน์ง์ ์ด๋ ๋ค.
- ๋ณด์ด๋ ๋ณธ๋ฌธ์ ๊ทธ๋๋ก ๋๊ณ ์ค ๋ ์ฌ๋ฐฑ์๋ง ๋ฐ์ดํฐ๋ฅผ ์ค์ด ์๊ฐ์ ์ผ๋ก ํฐ๊ฐ ์ ๋๋ค. ํ ์คํธ ๋ทฐ์ด์์ ๊ทธ๋ฅ "๋น ์ค"๋ก ๋ณด์ธ๋ค.
- ํญ์ผ๋ก ์ฐ์ ๊ณต๋ฐฑ์ ์์ถํด ๋ด์ ์ ์๋ ์ฉ๋์ ๋๋ฆฐ๋ค(๊ทธ๋์ ๊ณต๋ฐฑ๊ณผ ํญ์ด ๋ค์์ฌ ๋์จ๋ค).
- ์ต์
์ผ๋ก ICE ์ํธ(
-pํจ์ค์๋) ์ ๋ด์ฅ ์์ถ(-C) ์ ์ง์ํ๋ค.
์ฆ "๋น ๊ณต๊ฐ์ฒ๋ผ ๋ณด์ด๋ ๊ณณ"์ด ์ฌ์ค์ ๋ฐ์ดํฐ์ ์ ์ฅ์๋ค. ์ด์ ์ด๊ฑธ ๋์ผ๋ก ํ์ธํด ๋ณด์.

2. ์ ์ฐฐ โ ์ ๋ณด์ด๋ ๊ณต๋ฐฑ์ ๋๋ฌ๋ด๋ค
DH.zip ์ ํ๋ฉด Snow.jpeg(๋ ๋ด๋ฆฌ๋ ํ
๋ง ์ด๋ฏธ์ง)์ flag.txt ๊ฐ ๋์จ๋ค. flag.txt ๋ฅผ ์ด๋ฉด ์ฒซ ์ค์ DH{fake_snow} ๊ฐ ๋ณด์ธ๋ค.
ํ์ง๋ง ์ด๊ฑด ๋ฏธ๋ผ(decoy) ๋ค. ์ง์ง๋ ๊ทธ ๋ค ๊ณต๋ฐฑ์ ์จ์ด ์๋ค. cat -A ๋ก ์ค ๋ ๊ณต๋ฐฑ( )๊ณผ ํญ(^I)์ ๋๋ฌ๋ด๋ฉด ์ ์ฒด๊ฐ ๋ณด์ธ๋ค.
์ ์ฐฐ์ฉ์ผ๋ก ์ด ์คํฌ๋ฆฝํธ๋ ์ด๋ ๋ค.
์ด ๊ธ์ ๋ช ๋ น์ ๋ชจ๋
analysis/์์ ์คํํ๋ค.
# analysis/cap_recon.sh
#!/usr/bin/env bash
# ์ ์ฐฐ โ ์ค์ฒฉ zip ์ flag.txt ์ ์ค๋ ๊ณต๋ฐฑ/ํญ์ ๋ฐ์ดํฐ๊ฐ ์จ์ด ์๋ค
cd extracted/inner
echo "== DH.zip ๋ด์ฉ๋ฌผ =="
echo " Snow.jpeg (JPEG, ํ
๋ง์ฉ) + flag.txt (ASCII)"
echo
echo "== flag.txt ๋ณด์ด๋ ์ฒซ ์ค =="
head -1 flag.txt | cut -c1-13
echo " โ DH{fake_snow} ๋ ๋ฏธ๋ผ(decoy). ์ง์ง๋ ์ ๋ณด์ธ๋ค."
echo
echo "== cat -A ๋ก ์ค๋ ๊ณต๋ฐฑ(์คํ์ด์ค)ยทํญ(^I) ๋๋ฌ๋ด๊ธฐ (์ 6์ค) =="
cat -A flag.txt | head -6
echo
echo "== ๋ฐ์ดํธ ํต๊ณ โ ๊ณต๋ฐฑ/ํญ์ด ์๋ฉ =="
python3 -c "d=open('flag.txt','rb').read(); print(f'์ด {len(d)}B | ์คํ์ด์ค {d.count(b\" \")} ยท ํญ {d.count(bytes([9]))} ยท ์ค๋ฐ๊ฟ {d.count(bytes([10]))}')"
echo " โ ์ค ๋ whitespace ์๋ = SNOW ์คํ
๊ฐ๋
ธ๊ทธ๋ํผ (๋ฌธ์ ๋ช
'Snowing!')"bash cap_recon.sh
3. ๋ฐ์ดํธ ๋ ๋ฒจ๋ก ํ์ธ โ ํ์ผ์ 96%๊ฐ ๊ณต๋ฐฑ/ํญ
์ ๋ง ๊ณต๋ฐฑ/ํญ์ด ๋ฐ์ดํฐ์ธ์ง hexdump ๋ก ๋ชป์ ๋ฐ๋๋ค. ๋ณด์ด๋ DH{fake_snow}(44 48 7b โฆ 7d) ๋ฐ๋ก ๋ค๋ถํฐ 09(ํญ)๊ณผ 20(์คํ์ด์ค)์ด ์ค์ค์ด ์ด์ด์ง๋ค.
# analysis/cap_hex.sh
#!/usr/bin/env bash
# flag.txt ์ค์ ๋ฐ์ดํธ โ 0x20(space)ยท0x09(tab) ์ด ์ค์ ๊ฐ๋ ์ฑ์ด๋ค
cd extracted/inner
echo "== ์ฒซ 3์ค hexdump: 44 48 7b..(DH{) ๋ค๋ก 20(space)/09(tab) ์ด ์ด์ด์ง =="
head -c 130 flag.txt | xxd
echo
echo "== ๋ฐ์ดํธ ์ข
๋ฅ๋ณ ๊ฐ์ (๊ฑฐ์ ์ ๋ถ ๊ณต๋ฐฑ/ํญ) =="
python3 -c "
from collections import Counter
d=open('flag.txt','rb').read(); c=Counter(d)
for b,n in c.most_common(6):
name={0x20:'space',0x09:'tab',0x0a:'newline'}.get(b, repr(chr(b)) if 32<=b<127 else hex(b))
print(f' 0x{b:02x} {name:8s}: {n}')
print(f' โ ๊ณต๋ฐฑ+ํญ = {c[0x20]+c[0x09]}/{len(d)} = {100*(c[0x20]+c[0x09])//len(d)}%')
"bash cap_hex.sh
์ ์ฒด 1849๋ฐ์ดํธ ์ค ์คํ์ด์ค 1372 + ํญ 416 = 1788๋ฐ์ดํธ(96%). ํ์ผ ๋๋ถ๋ถ์ด ํ์ดํธ์คํ์ด์ค๋ค. ๋์๋ ์ ๋ณด์ฌ๋ ์ ๋ณด๋์ด ์๋ฉ ์ค๋ ค ์๋ค๋ ๋ป์ด๋ค.
4. ๊ณต๋ฐฑ ํจํด ์๊ฐํ โ ์จ์ "๋ฐ์ฝ๋"
์ซ์๋ง์ผ๋ก๋ ๊ฐ์ด ์ ์ค๋, ๊ฐ ์ค์ ์ค ๋ ๊ณต๋ฐฑ/ํญ ๋ฐฐ์ด์ ์ ์นธ์ผ๋ก ๊ทธ๋ ค ๋ดค๋ค. ํ๋=์คํ์ด์ค, ์ฃผํฉ=ํญ์ด๋ค. ๊ทธ๋ฌ๋ฉด ์ฌ๋ ๋์๋ ๊ทธ๋ฅ ๋น ์ค์ด๋ ๊ฒ์ด ์ฌ์ค์ ๊ท์น์ ์ธ ํจํด(=์๋ ๋นํธ์ด) ์ด์์์ด ๋๋ฌ๋๋ค.

๊ฐ ์ค ๊ธธ์ด๊ฐ ๋ค์ญ๋ ์ญํ๊ณ ํ๋ยท์ฃผํฉ์ด ํน์ ๊ท์น์ผ๋ก ์์ฌ ์๋ค. ์ด ๋ฐฐ์ด ํ๋ํ๋๊ฐ SNOW๊ฐ ์ฌ์ด ๋์ ๋นํธ๋ค. "๋น ๊ณต๊ฐ"์ด ๊ณง ๋ฐ์ดํฐ์๋ ๊ฒ.
5. Snow.jpeg ๋ ํจ์ ์ธ๊ฐ โ ํฌ๋ ์์ผ๋ก ๋ฐฐ์
์คํ ๊ฐ๋ ธ ๋ฌธ์ ์์ ์ด๋ฏธ์ง๊ฐ ๊ฐ์ด ์ค๋ฉด ๋๊ฐ ๊ทธ์ชฝ(EXIFยทLSBยทappend)์ ๋จผ์ ์์ฌํ๊ฒ ๋๋ค. ๊ทธ๋์ ์ ์๋๋ก ์ ๊ฒํด ๋ ๋ํค๋ง์์ ํ์ธํ๋ค.
# analysis/cap_jpeg.sh
#!/usr/bin/env bash
# Snow.jpeg ๋ ํจ์ ์ธ๊ฐ? โ ์ด๋ฏธ์ง ์คํ
๊ฐ๋
ธ ์ ์ ์ ๊ฒ (๋ ๋ํค๋ง ํ์ธ)
cd extracted/inner
echo "== 1) exiftool ๋ฉํ๋ฐ์ดํฐ =="
exiftool Snow.jpeg 2>/dev/null | grep -iE "File Size|Image Size|Copyright|Comment|Artist|Software" | head
echo
echo "== 2) binwalk โ ๋ค์ ์จ๊ฒจ ๋ถ์ธ ํ์ผ ์๋ =="
binwalk Snow.jpeg 2>/dev/null | head -6
echo
echo "== 3) JPEG EOI(ffd9) ๋ค ์ถ๊ฐ ๋ฐ์ดํฐ =="
python3 -c "d=open('Snow.jpeg','rb').read(); e=d.rfind(b'\xff\xd9'); print(f' ํ์ผ {len(d)}B, ๋ง์ง๋ง EOI@{e}, EOI ๋ค ์์ฌ {len(d)-e-2}B')"
echo
echo "== 4) ๋ณธ๋ฌธ์ DH{ ๋ฌธ์์ด? =="
strings Snow.jpeg | grep -c 'DH{' | xargs echo " DH{ ๋ฑ์ฅ ํ์:"
echo
echo "โ ๋ฉํ/์ถ๊ฐ๋ฐ์ดํฐ/๋ฌธ์์ด ๋ชจ๋ ๊นจ๋. Snow.jpeg ๋ ํ
๋ง์ฉ ๋ ๋ํค๋ง. ์ง์ง๋ flag.txt ๊ณต๋ฐฑ."bash cap_jpeg.sh
- exiftool: ํฌ๊ธฐยท์ ์๊ถ ๋ฌธ๊ตฌ๋ฟ, ์์ํ ์ฝ๋ฉํธยท์ํฐ์คํธยท์ํํธ์จ์ด ํ๋ ์์.
- binwalk: ๋ค์ ๋ถ์ธ ํ์ผ ์๊ทธ๋์ฒ ์์.
- EOI(
ff d9) ๋ค ์์ฌ ๋ฐ์ดํฐ: 0๋ฐ์ดํธ โ append ์คํ ๊ฐ๋ ธ ์๋. - ๋ฌธ์์ด ๊ฒ์: ๋ณธ๋ฌธ์
DH{0ํ.
๋ฉํ๋ฐ์ดํฐยท์ถ๊ฐ ๋ฐ์ดํฐยท๋ฌธ์์ด์ด ๋ชจ๋ ๊นจ๋ํ๋ Snow.jpeg ๋ ๋ถ์๊ธฐ์ฉ ๋ฏธ๋ผ๋ค. ์ง์ง๋ flag.txt ์ ๊ณต๋ฐฑ์ด ๋ง๋ค.
6. ๋ณตํธ โ stegsnow
๋ฆฌ๋
์ค์์๋ stegsnow ํจํค์ง๋ก ๋ฐ๋ก ์ถ์ถํ ์ ์๋ค(apt install stegsnow). ์ต์
์ ๋ชฐ๋ผ ๋ ๋ฒ์ ๋๋ ์๋ํ๋ค.
# analysis/cap_decode.sh
#!/usr/bin/env bash
# stegsnow ๋ก whitespace ์๋ ๋ฐ์ดํฐ ์ถ์ถ
cd extracted/inner
echo "== 1) ๋ฌด์์ถ ์ต์
(stegsnow flag.txt) โ ๊นจ์ง ์ถ๋ ฅ โ ์์ถ์ด ๊ฑธ๋ ค์๋ค๋ ์ ํธ =="
stegsnow flag.txt 2>&1 | head -c 90 | cat -v; echo " ..."
echo
echo "== 2) ์์ถ ์ต์
(stegsnow -C flag.txt) โ ์ ์ ๋ณตํธ =="
stegsnow -C flag.txt 2>/dev/null | fold -w 88 | head -4
echo
echo "== 3) ์๋๋ฌธ ์ ํ๋๊ทธ๋ง ์ถ์ถ =="
stegsnow -C flag.txt 2>/dev/null | grep -oE 'DH\{[^}]*\}'
echo
echo "โ 'Snow' ๋ฐ๋ณต ์ฌ์ด์ ํ๋๊ทธ๊ฐ ๋ฐํ ์๋ค."bash cap_decode.sh
- ๋ฌด์์ถ(
stegsnow flag.txt):Warning: residual of 5 bits not output๊ณผ ํจ๊ป ๊นจ์ง ๋ฐ์ดํธ๊ฐ ์์์ง๋ค. โ ๋ฐ์ดํฐ๊ฐ ์์ถ๋์ด ์๋ค๋ ์ ํธ. - ์์ถ ์ต์
(
stegsnow -C flag.txt): ๊น๋ํ ํ ์คํธ๋ก ๋ณตํธ๋๋ค.
$ stegsnow -C flag.txt
SnowSnowSnow...SnowDH{w0w_1t_Sn0w5}SnowSnowSnow...Snow ๋ฅผ ์๋ฉ ๋ฐ๋ณตํด ๋์์์ ๋ฃ์ด ๋์ง๋ง, ๊ทธ ์ฌ์ด์ ์ง์ง ํ๋๊ทธ๊ฐ ๋ฐํ ์๋ค.
stegsnow -C flag.txt | grep -oE 'DH\{[^}]*\}'
# DH{w0w_1t_Sn0w5}ํ๋๊ทธ: DH{w0w_1t_Sn0w5}
7. ์ฝ์ง ๊ธฐ๋ก
โถ๐ ์ฝ์ง 1 โ DH{fake_snow} ๋ฏธ๋ผ์ Snow.jpeg ํ๋ค๋ฆฌ
์ฒ์ flag.txt ๋ฅผ ์ด์ DH{fake_snow} ๊ฐ ๋ฑ ๋ณด์ฌ์ "์ด๋ ๊ฒ ์ฝ๋ค๊ณ ?" ํ๊ณ ์ ์ถํ ๋ปํ๋ค. ๋น์ฐํ ๋ฏธ๋ผ์๋ค.
๊ฒ๋ค๊ฐ ์ด๋ฏธ์ง๊ฐ ๊ฐ์ด ์์ผ๋ ์์ฐํ Snow.jpeg ๋ถํฐ ํ๋ณด๊ณ ์ถ์ด์ก๋ค โ exiftoolยทbinwalkยทEOIยทLSB ๋ค ๋ดค์ง๋ง ์ ๋ถ ๊นจ๋ํ๋ค.
์คํ
๊ฐ๋
ธ ๋ฌธ์ ์ ์ ํ์ ์ธ ์ ๋(์ด๋ฏธ์ง๋ก ์์ ๋๊ธฐ)์ ์ ๊น ๋๋ ค๊ฐ์ง๋ง, ๋ฌธ์ ๋ช
"Snow" + cat -A ๋ก ๋๋ฌ๋ ๊ณต๋ฐฑ ํญํ์ด ์ ๋ต ๋ฐฉํฅ์ ํ์คํ ๊ฐ๋ฆฌ์ผฐ๋ค.
โถ๐ ์ฝ์ง 2 โ -C ์ต์ ์ฐพ๊ธฐ (์ถ๋ ฅ์ด ๊นจ์ง๋ฉด ์ต์ ์ด ๋น ์ง ๊ฒ)
์๋ฌด ์ต์
์์ด stegsnow flag.txt ๋ฅผ ๋๋ ธ๋๋ residual of 5 bits not output ๊ฒฝ๊ณ ์ ํจ๊ป ๋ฐ์ด๋๋ฆฌ ์ฐ๋ ๊ธฐ๊ฐ ๋์๋ค.
"๋ณตํธ๋ ๋๋๋ฐ ๋ด์ฉ์ด ๊นจ์ง๋ค = ์์ถ/์ํธ๊ฐ ๊ฑธ๋ ค ์๋ค" ๋ ์ ํธ๋ก ์ฝ๊ณ -C(๋ด์ฅ ์์ถ ํด์ )๋ฅผ ๋ถ์ด์ ๋ฐ๋ก ์ ์ ํ
์คํธ๊ฐ ๋์๋ค.
ํจ์ค์๋(-p)๊น์ง๋ ํ์ ์์๋ค. ์คํ
๊ฐ๋
ธ ๋๊ตฌ๋ ์ต์
์กฐํฉ์ ๋ฐ๋ผ ์ถ๋ ฅ์ด ์์ ํ ๋ฌ๋ผ์ง๋ฏ๋ก, ์ถ๋ ฅ ํํ๋ฅผ ๊ด์ฐฐํ๋ฉฐ ํ๋์ฉ ๋ฐ๊ฟ๋ณด๋ ๊ฒ ์๋ น์ด๋ค.
8. ๋ง๋ฌด๋ฆฌ โ ํ์ดํธ์คํ์ด์ค ์คํ ๊ฐ๋ ธ๊ทธ๋ํผ
Snowing! ์ "๋ณด์ด์ง ์๋ ๊ณณ์ ๋ฐ์ดํฐ๋ฅผ ์จ๊ธฐ๋" ์คํ ๊ฐ๋ ธ๊ทธ๋ํผ์ ๊ฐ์ ์ก๋ ๋ฌธ์ ๋ค. ์ ๋ฆฌํ๋ฉด ์ด๋ ๋ค.
- ์ค ๋ ๊ณต๋ฐฑ/ํญ์ ํ๋ฅญํ ์๋์ฒ๋ค. ํ ์คํธ ๋ทฐ์ดยท์ฝ๋ ๋ฆฌ๋ทฐยท๋ณต์ฌ/๋ถ์ฌ๋ฃ๊ธฐ์์๋ ์ ์ด์๋จ๊ณ ๋์ ์ ๋๋ค. ์ค๋ฌด์์ ๋ฌธ์ยท์์ค์ ์ํฐ๋งํฌ๋ ์ ์ถ ์ถ์ ์ฉ์ผ๋ก๋ ์ฐ์ธ๋ค.
- ํ์ง ์๋ น:
cat -A(๋๋cat -T,xxd,od -c)๋ก ์ค ๋ ๊ณต๋ฐฑ/ํญ์ ๋๋ฌ๋ด๊ฑฐ๋, ํ์ผ ํฌ๊ธฐ ๋๋น ํ์ดํธ์คํ์ด์ค ๋น์จ์ด ๋น์ ์์ ์ผ๋ก ๋์์ง ๋ณธ๋ค. ์ด ํ์ผ์ 1849๋ฐ์ดํธ์ 96%๊ฐ ๊ณต๋ฐฑ/ํญ์ด์๋ค. - ์๊ฐํ๊ฐ ํตํ๋ค. ๊ณต๋ฐฑ/ํญ์ ์ ์นธ์ผ๋ก ๊ทธ๋ฆฌ๋ฉด ์จ์ ํจํด์ด ํ๋์ ๋๋ฌ๋๋ค. ํฌ๋ ์์์ "์ ๋ณด์ด๋ ๊ฒ"์ ์ข ์ข ํํ ๋ฐฉ์์ ๋ฐ๊พธ๋ฉด ๋ณด์ธ๋ค.
- ๊ณ๋ค๋ฆฌ ํ์ผ๋ ๋ฐฐ์ ๊ทผ๊ฑฐ๋ฅผ ๋จ๊ฒจ๋ผ.
Snow.jpeg์ฒ๋ผ ์ ๋์ฉ ํ์ผ์ด ์์ผ๋ฉด exiftoolยทbinwalkยทEOI ์ ๊ฒ์ผ๋ก "์ฌ๊ธด ์๋ค"๋ฅผ ํ์ธํ๊ณ ๋์ด๊ฐ์ผ ํ์๊ณ ๋ฅผ ์ค์ธ๋ค. - ๋ฏธ๋ผ์ ์์ง ๋ง ๊ฒ: ๋์ ๋ฐ๋ก ๋ณด์ด๋
DH{fake_snow}๋ ํจ์ ์ด์๋ค. ์คํ ๊ฐ๋ ธ ๋ฌธ์ ์์ "๋๋ฌด ์ฌ์ด" ๊ฐ์ ๋๊ฐ decoy๋ค.
๋ฐฉ์ด/ํฌ๋ ์ ๊ด์ ์์, ํ์ดํธ์คํ์ด์ค ์คํ ๊ฐ๋ ธ๋ DLP(๋ฐ์ดํฐ ์ ์ถ ๋ฐฉ์ง)์์ ๋์น๊ธฐ ์ฌ์ด ์ฑ๋์ด๋ค. ํ ์คํธ ์ ์ถ ๊ฒ์ฌ ์ ์ค ๋ ๊ณต๋ฐฑ ์ ๊ทํยท์ํธ๋กํผ ๊ฒ์ฌ๋ฅผ ํฌํจํ๋ฉด ์ด๋ฐ ์๋์ ์ก์๋ผ ์ ์๋ค.
FLAG: DH{w0w_1t_Sn0w5}
Comments
๋๊ธ
๋๊ธ์ ๋จ๊ธฐ๋ ค๋ฉด ๋ก๊ทธ์ธ์ด ํ์ํด์. (๋ค์ด๋ฒ ยท ๊ตฌ๊ธ ๊ณ์ )
๋๊ธ ๋ถ๋ฌ์ค๋ ์คโฆ