๋ฌธ์ : DreamHack โ emoji ๋ถ๋ฅ: Misc ๋์ด๋: ๐ฅ Bronze 3 FLAG:
DH{anemojiisatypeofsymbolthatoriginatedfromatextmessageonamobilephoneinjapan...}
"์ด๋ชจ์ง๋ ๋ฌด์์ ๋ํ๋ด๋์?" ๋ฌธ์ ์ค๋ช
์ ์ด ํ ๋ฌธ์ฅ๊ณผ ํํธ ํ๋(โ๏ธ = m), ๊ทธ๋ฆฌ๊ณ ํ๋๊ทธ ํ์์ด DH{...}์ด๊ณ DH๋ฅผ ๋บ ๋๋จธ์ง๋ ์ ๋ถ ์๋ฌธ์๋ผ๋ ๊ท์น์ ์ค๋ค. ๋ณธ๋ฌธ์ 210์์ ๋ฌํ๋ ์ด๋ชจ์ง ์ด์ด๋ค.

๋ฌธ์ ๊ฐ์
| ํญ๋ชฉ | ๋ด์ฉ |
|---|---|
| ๋ฌธ์ ๋ช | emoji |
| ๋์ด๋ | ๐ฅ Bronze 3 |
| ๋ถ๋ฅ | Misc |
| ์ ๊ณต ํ์ผ | prob.txt (์ด๋ชจ์ง ์ด + ํํธ โ๏ธ = m) |
| ํต์ฌ ๊ธฐ๋ฒ | ์ด๋ชจ์ง ๋จ์ผ์นํ + ๋ฌธ์๊ผด ์ต์ปค + ์์ด ๋ฌธ๋งฅ ๋ณต์ |
์ด๋ชจ์ง๋ฅผ ์ธ์ด ๋ณด๋ฉด ์ ํํ 26์ข
์ด๋ค. 24๊ฐ ์๋ฌธ์ + { + }, ์ฆ ์ํ๋ฒณ ๋จ์ผ์นํ์์ ์์ํ๋ค.
๐งฑ ๋ฐฐ๊ฒฝ โ ๋จ์ผ์นํ ์ํธ
๋จ์ผ์นํ(monoalphabetic substitution)์ ๊ฐ ๊ธ์๋ฅผ ๋ค๋ฅธ ๊ณ ์ ๊ธฐํธ๋ก ์ผ๋์ผ ๋ฐ๊พธ๋ ๋ฐฉ์์ด๋ค. ์ฌ๊ธฐ์๋ ๊ทธ "๊ธฐํธ"๊ฐ ์ด๋ชจ์ง์ผ ๋ฟ, ๋ณธ์ง์ ๋๊ฐ๋ค. ํค ๊ณต๊ฐ์ ํฌ์ง๋ง, ๊ธ์์ ๋น๋์ ๋ฐ๋ณต ํจํด์ด ๊ทธ๋๋ก ๋ณด์กด๋๋ฏ๋ก ์๋ ค์ง ํ๋ฌธ ์กฐ๊ฐ๋ง ์์ผ๋ฉด ํ๊ฐ ์ฐ์์ ์ผ๋ก ์ฑ์์ง๋ค.

์ถ์ฒ: Wikimedia Commons, public domain
์ด ๋ฌธ์ ์ ๊ฐ๋ ฅํ crib์ ๋ ๊ฐ์ง๋ค. โ ํํธ โ๏ธ = m, โก ํ๋๊ทธ ์ ๋์ฌ DH{๊ฐ โฉ๏ธโ{์ ๋์ํ๋ค๋ ๊ฒ. ์ฌ๊ธฐ์ ๋ํด, ์ด๋ค ์ด๋ชจ์ง๋ค์ ๊ธ์ ๋ชจ์์ ๊ทธ๋๋ก ๋ด๊ณ ์๋ค.
๐ฌ ์ ์ฐฐ โ ๊ธ์๋ฅผ ํ์ ์ด๋ชจ์ง๋ค
์ด๋ชจ์ง ๋ชฉ๋ก์ ์ ๋์ฝ๋ ์ด๋ฆ์ผ๋ก ๋ณด๋ฉด ์ ๋ฐ์ ์ ์ฒด๊ฐ ๋ปํ๋ค.
| ์ด๋ชจ์ง | ์ ๋์ฝ๋ ์ด๋ฆ | ๋์ |
|---|---|---|
| ๐ ฐ๏ธ ๐ ฑ๏ธ ๐ ฟ๏ธ | NEGATIVE SQUARED LATIN CAPITAL LETTER A/B/P | a, b, p |
| ๐ง | E-MAIL SYMBOL | e |
| โน๏ธ | INFORMATION SOURCE | i |
| โญ | HEAVY LARGE CIRCLE | o |
| ยฉ๏ธ ยฎ๏ธ | COPYRIGHT / REGISTERED SIGN | c, r |
| โ | CROSS MARK | x |
| ๐พ | SILHOUETTE OF JAPAN | j |
์ฌ๊ธฐ์ ํํธ โ๏ธ=m, ์ ๋์ฌ โฉ๏ธ=d โ=h๋ฅผ ๋ํ๋ฉด 12์๊ฐ ์ต์ปค๋ก ํ๋ณด๋๋ค. ์ด๊ฑธ๋ก ๋ถ๋ถ ๋ณตํธ๋ฅผ ๋๋ฆฌ๋ฉด ์ด๋ฏธ ๋ฌธ์ฅ์ด ๋ฐ์ฏค ์ฝํ๋ค.
# recon.py โ ์ต์ปค๋ก ํ๋ณดํ 12์๋ง ์ ์ฉํด ๋ถ๋ถ ๋ณตํธ
line=open("prob.txt",encoding="utf-8").read().splitlines()[0].strip()
toks=[];i=0
while i<len(line):
ch=line[i]
if ch in "{}": toks.append(ch); i+=1; continue
t=ch;j=i+1
while j<len(line) and line[j] in "๏ธโ": t+=line[j];j+=1
toks.append(t);i=j
# ๋ฌธ์๊ผด ์ด๋ชจ์ง ์ต์ปค๋ง ์ ์ฉ (๋๋จธ์ง๋ ยท ๋ก ํ์)
A={'๐
ฐ๏ธ':'a','๐
ฑ๏ธ':'b','๐
ฟ๏ธ':'p','โ๏ธ':'m','๐ง':'e','โน๏ธ':'i','โ':'x','โญ':'o','ยฉ๏ธ':'c','ยฎ๏ธ':'r','โฉ๏ธ':'d','โ':'h'}
print("์ต์ปค 10+2์๋ง ์ ์ฉํ ๋ถ๋ถ ๋ณตํธ:")
print("".join(t if t in "{}" else A.get(t,'ยท') for t in toks))python3 recon.py
whichexpressmeaning, combiningcharacters ๊ฐ์ ์กฐ๊ฐ์ด ๋๋ ทํ๊ฒ ๋ณด์ธ๋ค. ์ด ๋ฌธ์ฅ์ ๋ค๋ฆ ์๋ "emoji"์ ์ฌ์ ์ ์ ์๋ค.
๐ฃ ํต์ฌ โ ์์ด๊ฐ ๋๋จธ์ง 12์๋ฅผ ๊ฐ์ ํ๋ค
๋ถ๋ถ ๋ณตํธ๋ ๋ฌธ์ฅ์ ์์ด๋ก ์ฝ์ด ๋๊ฐ๋ฉด ๋น์นธ์ ๊ธ์๊ฐ ์ ์ ๋ก ์ ํด์ง๋ค.
โฆ is a tยทpe of sยทmboยท -> "type of symbol" => โ๏ธ=y ๐=f ๐ข=l
originated ยทrom โฆ -> "from" => (๐=f ์ฌํ์ธ)
oriยทinated / messaยทe -> "originated/message" => โฝ=g
japan ยทnยทiยทe emoticons -> "unlike" => โ=u ๐=k
ยทhich express -> "which" => ๐=w
narratiยทe sยทstem -> "narrative system" => โ=v๋น์นธ ํ๋๋ฅผ ์ฑ์ธ ๋๋ง๋ค ๊ทธ ์ด๋ชจ์ง๊ฐ ๋ฑ์ฅํ๋ ๋ค๋ฅธ ์์น๋ ํจ๊ป ํ์ ๋๋ฏ๋ก, ๋ช ๋จ์ด๋ง ์ฝ์ผ๋ฉด 12๊ฐ ๋ฏธ์ง์๊ฐ ์ ๋ถ ํ๋ฆฐ๋ค. ์ต์ข ๋์ํ๋ ๋ค์๊ณผ ๊ฐ๋ค.
๐
ฐ๏ธa ๐
ฑ๏ธb ๐
ฟ๏ธp โ๏ธm ๐งe โน๏ธi โx โญo ยฉ๏ธc ยฎ๏ธr โฉ๏ธd โh
๐พj โn ๐ดt โกs โ๏ธy ๐f ๐ขl โฝg โu ๐k ๐w โv๐ฏ ํ์ด โ ํ๋ฅผ ์ธ์ฐ๊ณ ์ด๋ชจ์ง๋ฅผ ํ ํฐํ
์ด๋ชจ์ง๋ ์ฌ๋ฌ ์ฝ๋ํฌ์ธํธ๋ก ์ด๋ค์ง๊ณ (์: ๐
ฐ๏ธ = U+1F170 U+FE0F) variation selector๊ฐ ๋ถ์ผ๋ฏ๋ก, ๋ฒ ์ด์ค ๋ฌธ์ + ๋ค๋ฐ๋ฅด๋ FE0F/ZWJ๋ฅผ ํ๋์ ํ ํฐ์ผ๋ก ๋ฌถ์ด ์ฒ๋ฆฌํ๋ค.
# solve.py
line = open("prob.txt", encoding="utf-8").read().splitlines()[0].strip()
toks = []; i = 0
while i < len(line):
ch = line[i]
if ch in "{}": toks.append(ch); i += 1; continue
t = ch; j = i + 1
while j < len(line) and line[j] in "๏ธโ": # VS16 / ZWJ ํก์
t += line[j]; j += 1
toks.append(t); i = j
M = {'๐
ฐ๏ธ':'a','๐
ฑ๏ธ':'b','๐
ฟ๏ธ':'p','โ๏ธ':'m','๐ง':'e','โน๏ธ':'i','โ':'x','โญ':'o','ยฉ๏ธ':'c','ยฎ๏ธ':'r',
'โฉ๏ธ':'d','โ':'h','๐พ':'j','โ':'n','๐ด':'t','โก':'s','โ๏ธ':'y','๐':'f','๐ข':'l','โฝ':'g',
'โ':'u','๐':'k','๐':'w','โ':'v'}
body = "".join(t if t in "{}" else M[t] for t in toks)
inside = body[body.index("{") + 1: body.index("}")]
print("FLAG: DH{" + inside + "}") # DH ๋ง ๋๋ฌธ์, ๋๋จธ์ง ์๋ฌธ์
๋ณต์๋ ๋ฌธ์ฅ์ "an emoji is a type of symbol that originated from a text message on a mobile phone in japan, unlike emoticons which express meaning by combining characters used in a typical narrative system, it features the use of a single picture as a literal translation" โ ์ด๋ชจ์ง์ ์ ์ ๊ทธ ์์ฒด๋ค. ํ๋๊ทธ๋ ์ด ๋ฌธ์ฅ์ ๊ณต๋ฐฑ ์์ด ์ด์ด ๋ถ์ธ ๋ค DH{ }๋ก ๊ฐ์ผ ๊ฒ์ด๋ค.
FLAG: DH{anemojiisatypeofsymbolthatoriginatedfromatextmessageonamobilephoneinjapan...asaliteraltranslation}
๐ ๊ฒฐ๋ก
๊ธฐํธ๊ฐ ๋ฐ๋์ด๋ ๋จ์ผ์นํ์ ํจํด์ ๋ชป ์จ๊ธด๋ค.
์ํ๋ฒณ์ ์ด๋ชจ์ง๋ก ๋ฐ๊ฟ๋ ๊ธ์์ ๋น๋์ ๋ฐ๋ณต์ ๊ทธ๋๋ก ๋จ๋๋ค. ๊ทธ๋์ ์ต์ปค ๋ช ๊ฐ๋ง ์ก์ผ๋ฉด ํ๊ฐ ๋๋ฏธ๋ ธ์ฒ๋ผ ์ฑ์์ง๋ค. "์ด๋ชจ์ง ์ํธ"๋ผ๋ ํ๋ คํ ๊ฒ๋ชจ์ต์ ๊ฒ๋จน์ ํ์๊ฐ ์์๋ค.
ํ๋ฌธ์ ์ ์ฒด๋ฅผ ์๋ฉด ๋ฏธ์ง์๊ฐ ์ฌ๋ผ์ง๋ค.
์ ๋ฐ์ฏค ๋ณตํธ๋ ์๊ฐ "์ด๊ฑด emoji์ ์ฌ์ ์ ์ ์๋ฌธ"์ด๋ผ๋ ๊ฑธ ์์์ฑ ๊ฒ ๊ฒฐ์ ์ ์ด์๋ค. ๊ทธ ๋ค๋ก๋ ์์ด ๋ฌธ๋ฒ์ด ๋จ์ 12์๋ฅผ ๊ฐ์ ๋ก ์ฑ์ ๋ค. ์ํธ ํด๋ ์์ ํ๋ฌธ์ด ๋ฌด์์ธ์ง ์ถ์ธกํ๋ ๋ฅ๋ ฅ์ ์ข ์ข ํค๋ฅผ ์๋ ๊ฒ๋งํผ ๊ฐ๋ ฅํ๋ค.
Comments
๋๊ธ
๋๊ธ์ ๋จ๊ธฐ๋ ค๋ฉด ๋ก๊ทธ์ธ์ด ํ์ํด์. (๋ค์ด๋ฒ ยท ๊ตฌ๊ธ ๊ณ์ )
๋๊ธ ๋ถ๋ฌ์ค๋ ์คโฆ