[๐ฅ Bronze 2] AES S-box ๋ธ๋ก ๋ณํ์ ์ญ์ฐํด ์
๋ ฅ ๋ณต์ โ DreamHack rev-basic-9 ํ์ด โ ZINO2026-07-08ยท1๋ถ ์ฝ๊ธฐยท
chall9.exe ๋ ์
๋ ฅ์ 8๋ฐ์ดํธ ๋ธ๋ก๋ง๋ค 16๋ผ์ด๋ ๋ณํ(AES S-box + ror + ๋ง์
ํผ๋๋ฐฑ)ํ ๋ค ํ๋์ฝ๋ฉ๋ target ๊ณผ memcmp ํ๋ค. S-box ๊ฐ ์ ๋จ์ฌ๋ผ ๊ฐ ๋ผ์ด๋๊ฐ ๊ฐ์ญ์ด๋ฏ๋ก, ๋ธ๋ก๋ณ๋ก ์ญ์ฐํ๋ฉด ์ ๋ต ์
๋ ฅ์ด ๊ทธ๋๋ก ๋ณต์๋๋ค. wine ์ผ๋ก "Correct" ๊น์ง ํ์ธ.
๋ฌธ์ : DreamHack โ rev-basic-9
๋ถ๋ฅ: Reversing (์
๋ ฅ ๊ฒ์ฆ ์ญ์ฐ)
๋์ด๋: ๐ฅ Bronze 2
FLAG: DH{Reverse__your__brain_;)}
๋ฌธ์ ๊ฐ์
| ํญ๋ชฉ | ๋ด์ฉ |
|---|
| ๋ฌธ์ ๋ช
| rev-basic-9 |
| ๋์ด๋ | ๐ฅ Bronze 2 |
| ๋ถ๋ฅ | Reversing |
| ์ ๊ณต ํ์ผ | chall9.exe (PE32+ x86-64, Windows ์ฝ์) |
| ์๋ฒ | ์์ (์คํ๋ผ์ธ ๋ฐ์ด๋๋ฆฌ) |
| ํต์ฌ ๊ธฐ๋ฒ | AES S-box ๋ธ๋ก ๋ณํ ์ญ์ฐ (๋ผ์ด๋ ๊ฐ์ญ์ฑ) |
rev-basic ์๋ฆฌ์ฆ๋ "์
๋ ฅ์ ๋ฃ์ผ๋ฉด ๊ฒ์ฆํด์ Correct/Wrong ์ ์ถ๋ ฅํ๋" ๋ฐ์ด๋๋ฆฌ๋ค. ๋ชฉํ๋ Correct ๋ฅผ ๋ง๋๋ ์
๋ ฅ์ ์ฐพ๋ ๊ฒ์ด๊ณ ,
๊ทธ ์
๋ ฅ์ด ๊ณง ํ๋๊ทธ ๋ด์ฉ์ด ๋๋ค. 9๋ฒ์ ์ ๋ฒํธ๋ค์ ๋จ์ XORยท์นํ๊ณผ ๋ฌ๋ฆฌ, ์
๋ ฅ์ ๋ธ๋ก ์ํธ์ฒ๋ผ ์ฌ๋ฌ ๋ผ์ด๋๋ก ๋ค์์ ๋ค ๋น๊ตํ๋ค.
๊ทธ๋๋ ๊ฐ ์ฐ์ฐ์ด ๊ฐ์ญ์ด๋ผ ์ฐจ๋ถํ ๋ค์ง์ผ๋ฉด ํ๋ฆฐ๋ค.
1. ์ ์ฐฐ โ main ์ ํฐ ๊ทธ๋ฆผ
file ๋ก ๋ณด๋ฉด PE32+ x86-64 ์ฝ์ ์คํํ์ผ์ด๊ณ , strings ์ Input :, Correct, , ๊ฐ ๋ณด์ธ๋ค.
์ ํ์ ์ธ rev-basic ์ด๋ค. ์ ๋์ค์ด์
๋ธํ๋ฉด ํ๋ฆ์ด ์
์ผ๋ก ๋๋๋ค.
์ด ๊ธ์ด ๋์์ด ๋๋์?
Wrong
__stdio_common_vfscanf
main
- ๊ธธ์ด ๊ฒ์ฆ:
(strlen(input) + 1) % 8 == 0 ์ด ์๋๋ฉด ์ฆ์ ์คํจ. โ ์
๋ ฅ ๊ธธ์ด๋ 7, 15, 23, โฆ ์ค ํ๋(8์ ๋ฐฐ์ - 1).
- ๋ธ๋ก ๋ฃจํ:
k = 0, 8, 16, โฆ ๋ก 8๋ฐ์ดํธ์ฉ ์๋ผ ๊ฒ์ฆ ํจ์ sub_1400010a0(input + k) ๋ฅผ ํธ์ถ. ์ด ํจ์๊ฐ ์
๋ ฅ ๋ฒํผ๋ฅผ ์ ์๋ฆฌ์์(in-place) ๋ณํํ๋ค.
- ๋น๊ต: ๋ณํ์ด ๋๋ ์
๋ ฅ์
memcmp(input, target, 0x19) ๋ก ํ๋์ฝ๋ฉ๋ 25๋ฐ์ดํธ(=24๋ฐ์ดํธ + ๋)์ ๋น๊ต. ๊ฐ์ผ๋ฉด Correct.
์ฆ "์
๋ ฅ โ ๋ณํ โ target ๊ณผ ์ผ์น?" ๊ตฌ์กฐ๋ค. ์ฐ๋ฆฌ๊ฐ ์ํ๋ ๊ฑด ๋ณํ ๊ฒฐ๊ณผ๊ฐ target ์ด ๋๋ ์๋ ์
๋ ฅ์ด๋ค.
2. ๋ณํ ๋ก์ง ๋ฆฌ๋ฒ์ฑ โ ๋ผ์ด๋ ํจ์
ํต์ฌ ๊ฒ์ฆ ํจ์ sub_1400010a0 ์ ๋์ค์ด์
๋ธํ ๊ฒ์ด๋ค. ์ด์ค ๋ฃจํ(๋ฐ๊นฅ 16ํ, ์์ชฝ 8ํ)๊ฐ ๋์ ๋ค์ด์จ๋ค.
#!/usr/bin/env bash
# chall9.exe ์
๋ ฅ๊ฒ์ฆ ๋ฃจํ ๋์ค์ด์
๋ธ (8๋ฐ์ดํธ ๋ธ๋ก 16๋ผ์ด๋ ๋ณํ)
cd extracted
objdump -d -M intel chall9.exe 2>/dev/null | sed -n '/1400010fc:/,/14000116f:/p' \
| grep -E '10(fc|f2|f6):|11(01|03|17|1c|1e|22|27|2c|30|37|3b|3f|41|4c|50|52|55|68|6c):' \
| sed -E 's#<.*>##' \
| sed -E 's/(83 7c 24 08 10).*/\1 ; i < 16 (outer, 16๋ผ์ด๋)/' \
| sed -E 's/(83 7c 24 04 08).*/\1 ; j < 8 (inner, ๋ธ๋ก 8๋ฐ์ดํธ)/' \
| sed -E 's/(33 c1).*/\1 ; eax = s ^ K[j]/' \
| sed -E 's/(0f b6 04 01).*4020.*/movzx eax,[rcx+rax] ; eax = SBOX[s ^ K[j]] (rcx=AES sbox)/' \
| sed -E 's/(03 c1).*/\1 ; += b[(j+1)\&7]/' \
| sed -E 's/(c0 c8 05).*/\1 ; ror al, 5/' \
| sed -E 's/(88 14 01).*/\1 ; b[(j+1)\&7] = s (ํผ๋๋ฐฑ ์ ์ฅ)/'
echo
echo "โ s = ror5( AES_Sbox[s ^ K[j]] + b[(j+1)&7] ); b[(j+1)&7] = s (16๋ผ์ด๋ x 8๋ฐ์ดํธ)"
chall9.exe ๊ฒ์ฆ ํจ์ ๋์ค์ด์
๋ธ: ๋ฐ๊นฅ 16๋ผ์ด๋ยท์์ชฝ 8๋ฐ์ดํธ ์ด์ค ๋ฃจํ, s xor K[j] ํ 0x140004020 ํ
์ด๋ธ(AES sbox) ๋ฃฉ์
, b[(j+1)&7] ๋ํ๊ณ ror al,5, ๊ฒฐ๊ณผ๋ฅผ b[(j+1)&7]์ ํผ๋๋ฐฑ ์ ์ฅ
์ ๋ฆฌํ๋ฉด 8๋ฐ์ดํธ ๋ธ๋ก b[0..7] ์ ๋ํด ์ด๋ ๊ฒ ๋๋ค.
s = b[0];
for (i = 0; i < 16; i++) // 16 ๋ผ์ด๋
for (j = 0; j < 8; j++) { // ๋ธ๋ก 8๋ฐ์ดํธ
p = (j + 1) & 7;
s = SBOX[s ^ K[j]]; // ์นํ
s = (s + b[p]) & 0xff; // ๋ง์
s = ror8(s, 5); // 5๋นํธ ํ์
b[p] = s; // ํผ๋๋ฐฑ: ๊ฒฐ๊ณผ๋ฅผ ๋ฒํผ์ ๋ค์ ์
}
s(๋ฌ๋ ์ํ)๋ ๋ธ๋ก ์์ ์ b[0] ์ผ๋ก ์ด๊ธฐํ๋๊ณ , ๋งค ์คํ
b[(j+1)&7] ์ ๊ฒฐ๊ณผ๋ฅผ ๋๋จน์(feedback)ํ๋ฉฐ ํ๋ฌ๊ฐ๋ค.
์คํธ๋ฆผ ์ํธ์ ์ํ ๊ฐฑ์ ๊ณผ ๋น์ทํ๋ค.
3. ์์ 3์ข
์ถ์ถ โ K, S-box, target
๋ณํ์ ์ฐ์ด๋ ์์๋ฅผ ๋ฐ์ด๋๋ฆฌ์์ ๊ทธ๋๋ก ๋ฝ์๋ค.
๋ฐ์ด๋๋ฆฌ์์ ์์ ์ถ์ถ: K@0x140003230 = "I_am_KEY", sbox@0x140004020 ์ 16๋ฐ์ดํธ๊ฐ 637c777bf2... ๋ก AES S-box ์ ์ผ์น(์ ๋จ์ฌ=์ญ์ฐ ๊ฐ๋ฅ), target@0x140004000 = 24๋ฐ์ดํธ = 8๋ฐ์ดํธ ๋ธ๋ก 3๊ฐ
K = "I_am_KEY" (8๋ฐ์ดํธ). ๋ผ์ด๋๋ง๋ค K[j] ๋ก XOR.
SBOX ๋ 63 7c 77 7b f2 6b 6f c5 โฆ ๋ก ์์ โ ๊ทธ ์ ๋ช
ํ AES S-box ๋ค. 256๊ฐ ๊ฐ์ด ์ ๋ถ ์ ์ผ(์ ๋จ์ฌ)ํ๋ฏ๋ก ์ญ์นํ์ด ์กด์ฌํ๋ค. ์ด๊ฒ ์ญ์ฐ์ ์ด์ ๋ค.
target = 7e7d9a8b252dd53d 032b3898279f4fbc 2a79007dc42a4f58 = 24๋ฐ์ดํธ = 8๋ฐ์ดํธ ๋ธ๋ก 3๊ฐ. ๊ธธ์ด ๊ฒ์ฆ(23์)๊ณผ๋ ๋ง๋๋ค.
4. ์ญ์ฐ โ ๋ผ์ด๋๋ฅผ ๊ฑฐ๊พธ๋ก ๋๊ฐ๊ธฐ
๋ธ๋ก๋ผ๋ฆฌ๋ ์๋ก ์ํฅ์ ์ฃผ์ง ์์ผ๋ฏ๋ก(๊ฐ๊ฐ ๋
๋ฆฝ ๋ณํ) ๋ธ๋ก ํ๋์ฉ ๋ค์ง์ผ๋ฉด ๋๋ค. ํ ๋ผ์ด๋ ์คํ
์ ์ญํจ์๋ฅผ ๊ตฌํ๋ ๊ฒ ํต์ฌ์ด๋ค.
์ ๋ฐฉํฅ ์คํ
์ b[p] (๋จ, p=(j+1)&7) ํ๋๋ง ๊ฐฑ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ์ ๊ฒฐ์ ์ ์ธ ๊ด์ฐฐ์ด ๋์จ๋ค โ
์ด ์คํ
์ b[j] ๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๋๋ค. ์ ๋ฐฉํฅ์์ s ๋ ๋ฐ๋ก ์ง์ ์คํ
์ด ์ด ๊ฐ(b[j])์ด๋ฏ๋ก, s_before == b[j](ํ์ฌ ๋ฒํผ๊ฐ) ์ด๋ค.
๋๋ถ์ ์ญ์ฐ์ ํ์ํ s ๋ฅผ ๋ฐ๋ก ์ถ์ ํ ํ์ ์์ด ๋ฒํผ์์ ๋ฐ๋ก ์ฝ์ ์ ์๋ค.
๋ณํ๊ณผ ์ญ์ฐ ๋ค์ด์ด๊ทธ๋จ: ์ ๋ฐฉํฅ์ s๋ฅผ ror5๋ก ๊ฐฑ์ ํ๊ณ b[p]์ ํผ๋๋ฐฑ, ์ญ๋ฐฉํฅ์ s_before๋ฅผ b[j]์์ ์ฝ์ด rol5 ํ AES S-box ์ญ์นํ์ผ๋ก b[p]๋ฅผ ๋ณต์. K๋ I_am_KEY, sbox๋ AES ์ ๋จ์ฌ, target ๊ฐ ๋ธ๋ก์ ์ญ์ฐํด ํ๋๊ทธ ๋ฌธ์์ด ๋ณต์
์ญ์คํ
์ ์ธ ์ฐ์ฐ์ ์์๋๋ก ๋๋๋ฆฐ๋ค.
ror8(ยท,5) ์ ์ญ์ rol8(ยท,5)
+ b[p] ์ ์ญ์ - SBOX[s ^ K[j]] (๋ชจ๋๋ฌ 256 ๋บ์
)
- ์นํ์ ๊ฐ ์์ฒด๋ฅผ ๋๋๋ฆด ํ์ ์์ด, ์๋
b[p] ๋ง ๋ณต์ํ๋ฉด ๋จ
for i in range(16):
for j in reversed(range(8)): # ๋ผ์ด๋๋, j ์์๋ ๊ฑฐ๊พธ๋ก
p = (j + 1) & 7
s_before = b[j] # ์ด ์คํ
์ b[j]๋ฅผ ์ ๊ฑด๋๋ฆผ โ s_before == b[j]
t = rol8(b[p], 5) # ror5 ๋๋๋ฆฌ๊ธฐ
b[p] = (t - SBOX[s_before ^ K[j]]) & 0xff
5. ์์ฒด ์๊ฒฐ solve.py
์ ๋ฐฉํฅ/์ญ๋ฐฉํฅ์ ๋ชจ๋ ๊ตฌํํ๊ณ , ์ญ์ฐ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ ๋ฐฉํฅ์ผ๋ก ๋๋ ค target ๊ณผ ์ผ์นํ๋์ง ๋ธ๋ก๋ง๋ค ๊ฒ์ฆํ๋ค.
def forward(block): # ๋ฐ์ด๋๋ฆฌ์ ๋์ผ
b = list(block); s = b[0]
for _ in range(16):
for j in range(8):
p = (j + 1) & 7
s = ror(( (SBOX[s ^ K[j]] + b[p]) & 0xff ), 5)
b[p] = s
return bytes(b)
def invert(block): # ์ญํจ์
b = list(block)
for _ in range(16):
for j in reversed(range(8)):
p = (j + 1) & 7
s_before = b[j]
b[p] = (rol(b[p], 5) - SBOX[s_before ^ K[j]]) & 0xff
return bytes(b)
solve.py ์คํ: K=I_am_KEY, sbox=AES S-box(bijection), target 24๋ฐ์ดํธ. ๋ธ๋ก0 target=7e7d9a8b252dd53dโinput=Reverse_, ๋ธ๋ก1โyour__b, ๋ธ๋ก2โrain;) ๊ฐ๊ฐ forward ์ฌ๊ฒ์ฆ OK, FLAG: Reverse__your__brain_;)
์ธ ๋ธ๋ก์ ์ญ์ฐํด ์ด์ด๋ถ์ด๋ฉด Reverse_ + _your__b + rain_;) = Reverse__your__brain_;) ์ด๊ณ , ๊ฐ ๋ธ๋ก์ ์ ๋ฐฉํฅ ์ฌ๋ณํ์ผ๋ก target ๊ณผ ์ผ์นํจ์ ํ์ธํ๋ค.
6. ๋ฐํ์ ํ์ธ โ wine ์ผ๋ก ์ง์ง "Correct"
์ญ์ฐ์ด ๋ง๋์ง ์ค์ ๋ฐ์ด๋๋ฆฌ์ ๋ฃ์ด ๋ดค๋ค. ๋ฆฌ๋
์ค๋ผ wine ์ผ๋ก ๋๋ ธ๋ค.
๋ณต์ํ ์
๋ ฅ Reverse__your__brain_;) ๋ฅผ wine chall9.exe ์ ํฌ์
ํ๋ฉด "Input : Correct", ๋์กฐ๊ตฐ AAAA... ๋ "Input : Wrong". ์ ๋ต ์
๋ ฅ์์๋ง Correct ํ์ธ
๋ณต์ํ ์
๋ ฅ์์๋ง Correct, ์๋ฌด ๋ฌธ์์ด(๋์กฐ๊ตฐ)์ Wrong. ์ญ์ฐ์ด ์ ํํ๋ค.
ํ๋๊ทธ: DH{Reverse__your__brain_;)}
7. ์ฝ์ง ๊ธฐ๋ก
โถ๐ ์ฝ์ง โ ์ญ์ฐ์์ s ๋ฅผ ์ด๋ป๊ฒ ์์๋ด๋ (feedback ์ ํจ์ )
์ญ์ฐํ ๋ ์ฒ์์ "์ ๋ฐฉํฅ์์ ํ๋ฌ๊ฐ๋ ๋ฌ๋ ์ํ s ๋ฅผ ์ด๋ป๊ฒ ๋ณต์ํ์ง?" ์์ ๋งํ๋ค. ์ ๋ฐฉํฅ์ s ๊ฐ ์คํ
๋ง๋ค ๊ฐฑ์ ๋๋๋ฐ,
๊ฑฐ๊พธ๋ก ๋ ๋ ๊ทธ s ๋ฅผ ๋ชจ๋ฅด๋ ์ญ์นํ๋ ๋ชป ํ ๊ฒ ๊ฐ์๋ค.
๊ทธ๋ฐ๋ฐ ์ฝ๋๋ฅผ ๋ค์ ๋ณด๋ ๊ฐ ์คํ
์ b[(j+1)&7] ๋ฑ ํ๋๋ง ์์ ํ๊ณ b[j] ๋ ์ ๋ ์ ๊ฑด๋๋ฆฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ฐฉํฅ์์ s ๋ ํญ์
"์ง์ ์คํ
์ด ๋ฐฉ๊ธ ์จ ๋ฃ์ ๊ฐ" = ์ง๊ธ b[j] ์ ๋ค์ด์๋ ๊ฐ์ด๋ค. ์ฆ s_before ๋ ๋ฒํผ์ ๊ทธ๋๋ก ๋จ์ ์์ด์ b[j] ๋ก ์ฝ์ผ๋ฉด ๋์ด์๋ค.
์ํ๋ฅผ ๋ฐ๋ก ์ถ์ ํ ํ์๊ฐ ์์๋ ๊ฒ. ์ด๊ฑธ ๊นจ๋ซ์ ์ญ์ฐ์ด ํ ์ค๋ก ์ค์๋ค. ํผ๋๋ฐฑ ๊ตฌ์กฐ๋ฅผ ์ ํํ ์ฝ๋ ๊ฒ ๊ด๊ฑด์ด์๋ค.
โถ๐ ์ฝ์ง โ memcmp 25๋ฐ์ดํธ vs ๋ธ๋ก 24๋ฐ์ดํธ, ๊ธธ์ด ๋ง์ถ๊ธฐ
main ์ memcmp ๊ธธ์ด๊ฐ 0x19=25์ธ๋ฐ ๋ณํ์ 8๋ฐ์ดํธ ๋ธ๋ก ๋จ์(24๋ฐ์ดํธ)๋ผ ์ฒ์์ ์ด๊ธ๋ ๋ณด์๋ค. target ์ ๋คํํด ๋ณด๋ 24๋ฒ์งธ ๋ฐ์ดํธ๊ฐ 0x00(๋ ์ข
๋ฃ๋ฌธ์)์ด๋ผ,
์ค์ ๋น๊ต ๋์์ 24๋ฐ์ดํธ(3๋ธ๋ก) + ๋์ด์๋ค. ๊ธธ์ด ๊ฒ์ฆ (strlen+1)%8==0 ๊ณผ๋ ๋ง์๋จ์ด์ง๋ค(strlen=23 โ 23์ + ๋ = 24๋ฐ์ดํธ = 3๋ธ๋ก). ๋ฐ์ดํฐ ์ค๋ฌผ์ ๋ ์ ๋ง์ถฐ ๋ณด๋ ๊ฒ ๋ต์ด์๋ค.
8. ๋ง๋ฌด๋ฆฌ โ ๋ฆฌ๋ฒ์ฑ์์ ๋ฐฐ์ฐ๋ ๊ฒ
rev-basic-9 ๋ "๋ธ๋ก ์ํธ ํ๋ด๋ฅผ ๋ธ ์
๋ ฅ ๊ฒ์ฆ"์ ์ญ์ฐํ๋ ์ฐ์ต์ด๋ค. ๋ช ๊ฐ์ง ์ผ๋ฐํํ ๊ตํ์ด ์๋ค.
- ๊ฐ์ญ ์ฐ์ฐ์ ์กฐํฉ์ ํต์งธ๋ก ๊ฐ์ญ์ด๋ค. XORยท๋ชจ๋๋ฌ ๋ง์
ยท๋นํธ ํ์ ยท์ ๋จ์ฌ ์นํ(S-box) ์ ๊ฐ๊ฐ ์ญ์ด ์์ผ๋, ์์๋ง ๊ฑฐ๊พธ๋ก ๋ฐ์ผ๋ฉด ์ ์ฒด๊ฐ ๋ค์งํ๋ค.
๊ฒ์ฆ ๋ก์ง์ด ์๋ฌด๋ฆฌ ๋ณต์กํด ๋ณด์ฌ๋ "์ถ๋ ฅ โ ์
๋ ฅ"์ด ์ ์ผํ๊ฒ ์ ํด์ง๋ฉด keygen ์ ์ฑ๋ฆฝํ๋ค.
- ์์์ ์ ์ฒด๋ฅผ ์์์ฑ๋ฉด ์ ๋ฐ์ ๋. S-box ์ ๋ช ๋ฐ์ดํธ(
63 7c 77 7b โฆ)๋ง ๋ด๋ AES ์์ ์ ์ ์๊ณ , ์ ๋จ์ฌ๋ผ๋ ์ฌ์ค์ด ๊ณง "์ญ์ฐ ๊ฐ๋ฅ"์ ๋ณด์ฅํ๋ค.
- ํผ๋๋ฐฑ/์ํ๋ฅผ ์ ํํ ์ฝ์ด๋ผ. ์ด ๋ฌธ์ ์
s_before == b[j] ์ฒ๋ผ, ์ํ๊ฐ ์ค์ ๋ฒํผ์ ๋จ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์๋ฃ ํ๋ฆ์ ์ ํํ ๋ฐ๋ผ๊ฐ๋ฉด ์ญ์ฐ์ด ๋จ์ํด์ง๋ค.
- ์ ์ ์ญ์ฐ + ๋์ ํ์ธ์ ๋ณํํ๋ผ. ์ญ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ค์ ๋ฐ์ด๋๋ฆฌ(wine)๋ก ์ฌํํด
Correct ๋ฅผ ๋ฐ์ผ๋ฉด ์ค์๋ฅผ ์ฆ์ ์ก์ ์ ์๋ค.
๋ฐฉ์ด ๊ด์ ์์, ์ด๋ฐ "๋ก์ปฌ์์ ์ ๋ต์ ๊ฒ์ฆํ๋" ๋ฐฉ์(ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๊ฒ์ฆ)์ ๋ฐ์ด๋๋ฆฌ๋ง ์์ผ๋ฉด ๋ฐ๋์ ๋ซ๋ฆฐ๋ค. ์ง์ง ๋น๋ฐ์ ์๋ฒ์ ๋๊ณ ๊ฒ์ฆ๋ ์๋ฒ์์ ํด์ผ ํ๋ค.
FLAG: DH{Reverse__your__brain_;)}
Comments
๋๊ธ
๋๊ธ์ ๋จ๊ธฐ๋ ค๋ฉด ๋ก๊ทธ์ธ์ด ํ์ํด์. (๋ค์ด๋ฒ ยท ๊ตฌ๊ธ ๊ณ์ )
๋๊ธ ๋ถ๋ฌ์ค๋ ์คโฆ