[๐Ÿฅˆ ์‹ค๋ฒ„ 3] ์ปค์Šคํ…€ base64๋ฅผ ์•Œ๋ ค์ง„ ํ‰๋ฌธ์œผ๋กœ ๋ณต์›ํ•˜๋‹ค โ€” DreamHack baseball ํ’€์ด

2026-07-13ยท1๋ถ„ ์ฝ๊ธฐยท

[๐Ÿฅˆ ์‹ค๋ฒ„ 3] ์ปค์Šคํ…€ base64๋ฅผ ์•Œ๋ ค์ง„ ํ‰๋ฌธ์œผ๋กœ ๋ณต์›ํ•˜๋‹ค โ€” DreamHack baseball ํ’€์ด

baseball ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” table ํŒŒ์ผ์˜ 64๊ธ€์ž๋ฅผ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ์“ฐ๋Š” ์ปค์Šคํ…€ base64 ์ธ์ฝ”๋”๋‹ค. ์ •์ž‘ table์€ ์ฃผ์–ด์ง€์ง€ ์•Š์ง€๋งŒ, ํ‰๋ฌธ text_in๊ณผ ๊ทธ ์ธ์ฝ”๋”ฉ text_out์ด๋ผ๋Š” ์•Œ๋ ค์ง„ ์Œ์ด ์žˆ๋‹ค. ํ‘œ์ค€ base64์˜ ์œ„์น˜๋ณ„ 6๋น„ํŠธ ๊ฐ’์— text_out ๋ฌธ์ž๋ฅผ ๋Œ€์‘์‹œ์ผœ ์•ŒํŒŒ๋ฒณ์„ ๋ณต์›ํ•˜๊ณ , ๊ฐ™์€ ์•ŒํŒŒ๋ฒณ์œผ๋กœ flag_out์„ ๋ณตํ˜ธํ–ˆ๋‹ค.

๋ฌธ์ œ: DreamHack โ€” baseball ๋ถ„๋ฅ˜: Reversing ๋‚œ์ด๋„: ๐Ÿฅˆ ์‹ค๋ฒ„ 3 FLAG: DH{Did_you_know_how_base64_works}

๋ฌธ์ œ ์„ค๋ช…์€ ์งง๋‹ค.

๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ํ”Œ๋ž˜๊ทธ๋ฅผ ์–ป์–ด์ฃผ์„ธ์š”. ์–ป์€ ํ”Œ๋ž˜๊ทธ๋Š” DH{<flag>} ํ˜•์‹์œผ๋กœ ์ธ์ฆํ•ด์ฃผ์„ธ์š”.

baseball ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ text_in.txtยทtext_out.txtยทflag_out.txt ์„ธ ํ…์ŠคํŠธ ํŒŒ์ผ์ด ์ฃผ์–ด์ง„๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ถ„์„ํ•ด ๋ณด๋ฉด ์ด๊ฑด ์ปค์Šคํ…€ ์•ŒํŒŒ๋ฒณ base64 ์ธ์ฝ”๋”๋‹ค. ์•ŒํŒŒ๋ฒณ(table)๋งŒ ์•Œ๋ฉด flag_out์„ ๋ณตํ˜ธํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, table์€ ์•ˆ ์ค€๋‹ค. ๋Œ€์‹  ํ‰๋ฌธ๊ณผ ๊ทธ ์ธ์ฝ”๋”ฉ ๊ฒฐ๊ณผ ํ•œ ์Œ์ด ์ฃผ์–ด์ ธ์„œ, ๊ทธ๊ฑธ๋กœ ์•ŒํŒŒ๋ฒณ์„ ์—ญ์œผ๋กœ ์บ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

baseball โ€” ์ปค์Šคํ…€ ์•ŒํŒŒ๋ฒณ base64๋ฅผ ์•Œ๋ ค์ง„ ํ‰๋ฌธ์œผ๋กœ ๋ณต์›
baseball โ€” ์ปค์Šคํ…€ ์•ŒํŒŒ๋ฒณ base64๋ฅผ ์•Œ๋ ค์ง„ ํ‰๋ฌธ์œผ๋กœ ๋ณต์›

๋ฌธ์ œ ๊ฐœ์š”

ํ•ญ๋ชฉ๋‚ด์šฉ
๋ฌธ์ œ๋ช…baseball
๋‚œ์ด๋„๐Ÿฅˆ ์‹ค๋ฒ„ 3
๋ถ„๋ฅ˜Reversing (x86-64 ELF, stripped)
์ œ๊ณต ํŒŒ์ผbaseball, text_in.txt, text_out.txt, flag_out.txt
๋ชฉํ‘œ์ปค์Šคํ…€ base64 ์•ŒํŒŒ๋ฒณ ๋ณต์› โ†’ flag_out ๋ณตํ˜ธ
ํ•ต์‹ฌ ๊ธฐ๋ฒ•known-plaintext๋กœ ์ปค์Šคํ…€ ์•ŒํŒŒ๋ฒณ ์ถ”์ถœ

table ํŒŒ์ผ์ด ์—†์–ด๋„, ํ‰๋ฌธ/์•”ํ˜ธ๋ฌธ ํ•œ ์Œ์ด๋ฉด ์•ŒํŒŒ๋ฒณ์„ ํ†ต์งธ๋กœ ๋˜์‚ด๋ฆด ์ˆ˜ ์žˆ๋‹ค.



๋ฐฐ๊ฒฝ โ€” ์ปค์Šคํ…€ ์•ŒํŒŒ๋ฒณ base64์™€ known-plaintext

base64๋Š” 3๋ฐ”์ดํŠธ๋ฅผ 6๋น„ํŠธ์”ฉ ๋Š์–ด 4๊ธ€์ž๋กœ ๋ฐ”๊พธ๋Š” ์ธ์ฝ”๋”ฉ์ด๋‹ค. ํ‘œ์ค€ ์•ŒํŒŒ๋ฒณ์€ A-Z a-z 0-9 + / 64๊ธ€์ž๋กœ ์ •ํ•ด์ ธ ์žˆ์ง€๋งŒ, ๊ทธ 64๊ธ€์ž๋ฅผ ๋‹ค๋ฅธ ์ˆœ์„œ(์ปค์Šคํ…€ ์•ŒํŒŒ๋ฒณ) ๋กœ ๋ฐ”๊ฟ”์น˜๊ธฐํ•˜๋ฉด ๊ฒ‰๋ชจ์Šต๋งŒ ๋‹ค๋ฅธ base64๊ฐ€ ๋œ๋‹ค. ๋น„ํŠธ ๋ถ„ํ•ด ๋ฐฉ์‹์€ ๊ทธ๋Œ€๋กœ๊ณ , 6๋น„ํŠธ ๊ฐ’์„ ์–ด๋–ค ๊ธ€์ž๋กœ ํ‘œ๊ธฐํ•˜๋А๋ƒ๋งŒ ๋‹ฌ๋ผ์ง„๋‹ค.

ํ•ต์‹ฌ์€ ์—ฌ๊ธฐ ์žˆ๋‹ค. base64๋Š” ์œ„์น˜๋ณ„๋กœ "๊ฐ’ โ†’ ๊ธ€์ž"๊ฐ€ ์ •ํ•ด์ง„ ์œ„์น˜ ๋…๋ฆฝ์  ์ธ์ฝ”๋”ฉ์ด๋ผ, ๊ฐ™์€ ํ‰๋ฌธ์„ ํ‘œ์ค€ base64์™€ ์ปค์Šคํ…€ base64๋กœ ๊ฐ๊ฐ ์ธ์ฝ”๋”ฉํ•˜๋ฉด ๊ฐ™์€ ์œ„์น˜์— ๊ฐ™์€ 6๋น„ํŠธ ๊ฐ’์ด ์˜จ๋‹ค. ํ‘œ๊ธฐ ๊ธ€์ž๋งŒ ๋‹ค๋ฅผ ๋ฟ์ด๋‹ค. ๊ทธ๋ž˜์„œ ํ‰๋ฌธ๊ณผ ์ปค์Šคํ…€ ์ธ์ฝ”๋”ฉ ๊ฒฐ๊ณผ๋ฅผ ๋‚˜๋ž€ํžˆ ๋†“์œผ๋ฉด, ๊ฐ ์œ„์น˜์—์„œ "์ด 6๋น„ํŠธ ๊ฐ’์€ ์ด ์ปค์Šคํ…€ ๊ธ€์ž๋กœ ํ‘œ๊ธฐ๋œ๋‹ค"๋ฅผ ํ•˜๋‚˜์”ฉ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์ด known-plaintext ๊ณต๊ฒฉ์ด๋‹ค โ€” ์•Œ๋ ค์ง„ ํ‰๋ฌธ/์•”ํ˜ธ๋ฌธ ์Œ์œผ๋กœ ํ‚ค(์—ฌ๊ธฐ์„  ์•ŒํŒŒ๋ฒณ)๋ฅผ ๋ณต์›ํ•œ๋‹ค.


๐Ÿ”ฌ ์ •์ฐฐ โ€” ์„ธ ํŒŒ์ผ๊ณผ ๋ฐ”์ด๋„ˆ๋ฆฌ

๋จผ์ € ์„ธ ํ…์ŠคํŠธ ํŒŒ์ผ์„ ๋ณธ๋‹ค.

head -c 70 text_in.txt      # ํ‰๋ฌธ (Pepero ์„ค๋ช…)
head -c 70 text_out.txt     # ์ปค์Šคํ…€ base64
cat flag_out.txt            # flag ์ธ์ฝ”๋”ฉ
text_in์€ Pepero ํ‰๋ฌธ, text_out์€ ์ปค์Šคํ…€ base64, flag_out์€ ์งง์€ ์ธ์ฝ”๋”ฉ ๋ฌธ์ž์—ด
text_in์€ Pepero ํ‰๋ฌธ, text_out์€ ์ปค์Šคํ…€ base64, flag_out์€ ์งง์€ ์ธ์ฝ”๋”ฉ ๋ฌธ์ž์—ด

text_in.txt๋Š” ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์˜์–ด ๋ฌธ์žฅ์ด๊ณ , text_out.txt๋Š” base64์ฒ˜๋Ÿผ ์ƒ๊ธด ๋ฌธ์ž์—ด์ด๋‹ค(๊ธธ์ด๋„ 149๋ฐ”์ดํŠธ โ†’ 200์ž๋กœ base64 ๋น„์œจ๊ณผ ๋งž๋‹ค). flag_out.txt๋Š” ์งง์€ ์ธ์ฝ”๋”ฉ ๋ฌธ์ž์—ด์ด๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ๋ฌด์—‡์„ ํ•˜๋Š”์ง€ ๋””์Šค์–ด์…ˆ๋ธ”๋กœ ํ™•์ธํ•œ๋‹ค.

usage๋Š” ./baseball table input, encode ํ•จ์ˆ˜ 0x1289๋Š” shr al,2 ๋“ฑ ํ‘œ์ค€ base64 ๋น„ํŠธ๋ถ„ํ•ด ํ›„ ์•ŒํŒŒ๋ฒณ table@0x4040 ์ธ๋ฑ์‹ฑ
usage๋Š” ./baseball table input, encode ํ•จ์ˆ˜ 0x1289๋Š” shr al,2 ๋“ฑ ํ‘œ์ค€ base64 ๋น„ํŠธ๋ถ„ํ•ด ํ›„ ์•ŒํŒŒ๋ฒณ table@0x4040 ์ธ๋ฑ์‹ฑ

usage๋Š” ./baseball <table filename> <input filename>์ด๊ณ , ์ธ์ฝ”๋”ฉ ํ•จ์ˆ˜(0x1289)๋Š” shr al, 0x2 ๊ฐ™์€ ํ‘œ์ค€ base64 ๋น„ํŠธ ๋ถ„ํ•ด๋ฅผ ํ•œ ๋’ค ๊ฒฐ๊ณผ 6๋น„ํŠธ ๊ฐ’์œผ๋กœ ์ „์—ญ 0x4040์˜ table์„ ์ธ๋ฑ์‹ฑํ•œ๋‹ค. ์ฆ‰ table ํŒŒ์ผ์˜ 64๊ธ€์ž๊ฐ€ ๊ณง ์ถœ๋ ฅ ์•ŒํŒŒ๋ฒณ์ด๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ๊ทธ table ํŒŒ์ผ์€ ์ฃผ์–ด์ง€์ง€ ์•Š์•˜๋‹ค โ€” ์ด๊ฒŒ ์‚ฌ์‹ค์ƒ ๋น„๋ฐ€ ํ‚ค๋‹ค.


๐Ÿ’ฃ ํ•ต์‹ฌ โ€” ์•Œ๋ ค์ง„ ์Œ์œผ๋กœ ์•ŒํŒŒ๋ฒณ ๋ณต์›

text_in๊ณผ text_out์ด ๋ฐ”๋กœ ๊ทธ ์•Œ๋ ค์ง„ ์Œ์ด๋‹ค. text_in์„ ํ‘œ์ค€ base64๋กœ ์ธ์ฝ”๋”ฉํ•˜๋ฉด ์œ„์น˜๋ณ„ 6๋น„ํŠธ ๊ฐ’์„ ์•Œ ์ˆ˜ ์žˆ๊ณ , ๊ฐ™์€ ์œ„์น˜์˜ text_out ๊ธ€์ž๊ฐ€ ๊ทธ ๊ฐ’์˜ ์ปค์Šคํ…€ ํ‘œ๊ธฐ๋‹ค.

import base64
STD = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
std_b64 = base64.b64encode(open("text_in.txt","rb").read()).decode()
ct = open("text_out.txt").read().strip()
 
custom = {}
for a, b in zip(std_b64, ct):        # ๊ฐ™์€ ์œ„์น˜๋ผ๋ฆฌ
    if a == "=": continue
    custom[STD.index(a)] = b          # ๊ฐ’ STD.index(a) ๋Š” ์ปค์Šคํ…€์—์„œ b ๋กœ ํ‘œ๊ธฐ
known-plaintext ์•ŒํŒŒ๋ฒณ ๋ณต์› โ€” ํ‘œ์ค€ base64์™€ ์ปค์Šคํ…€ out์„ ์œ„์น˜๋ณ„ ๋Œ€์‘, ๊ฐ’0โ†’๋ฏธ๊ด€์ธกยท๊ฐ’1โ†’hยท๊ฐ’2โ†’s ์‹์œผ๋กœ 53/64 ๋ณต์›
known-plaintext ์•ŒํŒŒ๋ฒณ ๋ณต์› โ€” ํ‘œ์ค€ base64์™€ ์ปค์Šคํ…€ out์„ ์œ„์น˜๋ณ„ ๋Œ€์‘, ๊ฐ’0โ†’๋ฏธ๊ด€์ธกยท๊ฐ’1โ†’hยท๊ฐ’2โ†’s ์‹์œผ๋กœ 53/64 ๋ณต์›

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด 200์ž ํ…์ŠคํŠธ์—์„œ 64์นธ ์•ŒํŒŒ๋ฒณ ์ค‘ 53์นธ์ด ๋ณต์›๋œ๋‹ค(๋‚˜๋จธ์ง€ 11์นธ์€ ์ด ํ…์ŠคํŠธ์— ์•ˆ ๋‚˜์˜จ ๊ฐ’์ด๋‹ค). ๋ณต์›์ด ์ •ํ™•ํ•œ์ง€ ํ™•์ธํ•˜๋ ค๊ณ , ๋ณต์›ํ•œ ์•ŒํŒŒ๋ฒณ์œผ๋กœ text_in์„ ๋‹ค์‹œ ์ธ์ฝ”๋”ฉํ•ด text_out๊ณผ ๊ฐ™์€์ง€ ๋Œ€์กฐํ–ˆ๋‹ค.

๋ณต์›ํ•œ ์•ŒํŒŒ๋ฒณ์œผ๋กœ text_in ์žฌ์ธ์ฝ”๋”ฉ ๊ฒฐ๊ณผ๊ฐ€ text_out๊ณผ ์™„์ „ ์ผ์น˜, flag_out์€ Did you know how base64 works๋กœ ๋ณตํ˜ธ
๋ณต์›ํ•œ ์•ŒํŒŒ๋ฒณ์œผ๋กœ text_in ์žฌ์ธ์ฝ”๋”ฉ ๊ฒฐ๊ณผ๊ฐ€ text_out๊ณผ ์™„์ „ ์ผ์น˜, flag_out์€ Did you know how base64 works๋กœ ๋ณตํ˜ธ

์žฌ์ธ์ฝ”๋”ฉ ๊ฒฐ๊ณผ๊ฐ€ text_out๊ณผ ์ •ํ™•ํžˆ ์ผ์น˜ํ•œ๋‹ค โ€” ์•ŒํŒŒ๋ฒณ์ด ๋งž๋‹ค๋Š” ๋œป์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  flag_out์€ ์ด 53์นธ ์•ˆ์˜ ๊ธ€์ž๋งŒ ์“ฐ๊ณ  ์žˆ์–ด ๊ทธ๋Œ€๋กœ ๋ณตํ˜ธ๋œ๋‹ค.

โ–ถ ์‚ฝ์งˆ: ๋ณตํ˜ธ ๊ฒฐ๊ณผ๊ฐ€ DH ํ˜•์‹์ด ์•„๋‹ˆ๋ผ ๋ฌธ์žฅ, ๊ณต๋ฐฑ์งธ ์ œ์ถœํ–ˆ๋‹ค๊ฐ€ ์˜ค๋‹ต

flag_out์„ ๋ณตํ˜ธํ•˜๋‹ˆ DH{...}๊ฐ€ ์•„๋‹ˆ๋ผ "Did you know how base64 works"๋ผ๋Š” ํ‰๋ฒ”ํ•œ ์˜์–ด ๋ฌธ์žฅ์ด ๋‚˜์™”๋‹ค. ์ฒ˜์Œ์—” "flag_out์ด ์ง„์งœ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์•„๋‹ˆ๋ผ ํžŒํŠธ์ธ๊ฐ€?" ์‹ถ์–ด ๋ฐ”์ด๋„ˆ๋ฆฌ์— ์ˆจ์€ flag๊ฐ€ ์žˆ๋‚˜, table ์ž์ฒด๊ฐ€ flag์ธ๊ฐ€ ํ•œ์ฐธ ๋’ค์กŒ๋‹ค.

๊ฒฐ๊ตญ ์ด ๋ฌธ์žฅ์ด ๊ณง ํ”Œ๋ž˜๊ทธ ๋‚ด์šฉ์ด์—ˆ๋‹ค. ๋ฌธ์ œ ์„ค๋ช…์ด DH{<flag>} ํ˜•์‹์ด๋ผ ํ–ˆ์œผ๋‹ˆ ๊ฐ์‹ธ๋ฉด ๋˜๋Š”๋ฐ, ๊ณต๋ฐฑ์ด ๋ฌธ์ œ์˜€๋‹ค. DH{Did you know how base64 works}๋กœ ๋ƒˆ๋”๋‹ˆ ์˜ค๋‹ต. DreamHack ํ”Œ๋ž˜๊ทธ๋Š” ๊ณต๋ฐฑ ๋Œ€์‹  ์–ธ๋”์Šค์ฝ”์–ด๋ฅผ ์“ฐ๋Š” ๊ด€๋ก€๋ผ, DH{Did_you_know_how_base64_works}๋กœ ๋ฐ”๊พธ๋‹ˆ ํ†ต๊ณผํ–ˆ๋‹ค. ๋ณตํ˜ธ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋Œ€๋กœ ๋‚ด๊ธฐ ์ „์— ํ”Œ๋ž˜๊ทธ ํ˜•์‹(๊ณต๋ฐฑยท๋Œ€์†Œ๋ฌธ์ž)์„ ํ•œ ๋ฒˆ ์ •๊ทœํ™”ํ•˜๋Š” ์Šต๊ด€์ด ํ•„์š”ํ–ˆ๋‹ค.



๐Ÿš€ Full Exploit

๋ณต์›ํ•œ ์•ŒํŒŒ๋ฒณ์œผ๋กœ flag_out์„ ์ปค์Šคํ…€โ†’ํ‘œ์ค€ ๋ฌธ์ž๋กœ ๋˜๋Œ๋ฆฐ ๋’ค ํ‘œ์ค€ base64 ๋””์ฝ”๋“œํ•˜๊ณ , ๊ณต๋ฐฑ์„ ์–ธ๋”์Šค์ฝ”์–ด๋กœ ๋ฐ”๊ฟ” ํ”Œ๋ž˜๊ทธ ํ˜•์‹์— ๋งž์ถ˜๋‹ค.

import base64
STD = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
std_b64 = base64.b64encode(open("text_in.txt","rb").read()).decode()
ct = open("text_out.txt").read().strip()
 
custom = {}
for a, b in zip(std_b64, ct):
    if a != "=": custom[STD.index(a)] = b
 
inv = {b: STD[v] for v, b in custom.items()}       # ์ปค์Šคํ…€ ๊ธ€์ž โ†’ ํ‘œ์ค€ ๊ธ€์ž
flag_ct = open("flag_out.txt").read().strip()
std_flag = "".join("=" if c == "=" else inv[c] for c in flag_ct)
plain = base64.b64decode(std_flag).decode()
print("DH{" + plain.replace(" ", "_") + "}")
solve.py ์‹คํ–‰ โ€” ์•ŒํŒŒ๋ฒณ 53/64 ๋ณต์›, flag_out ๋ณตํ˜ธ Did you know how base64 works, ์ตœ์ข… ํ”Œ๋ž˜๊ทธ ์ถœ๋ ฅ
solve.py ์‹คํ–‰ โ€” ์•ŒํŒŒ๋ฒณ 53/64 ๋ณต์›, flag_out ๋ณตํ˜ธ Did you know how base64 works, ์ตœ์ข… ํ”Œ๋ž˜๊ทธ ์ถœ๋ ฅ
๋ณต์›ํ•œ ์ปค์Šคํ…€ ์•ŒํŒŒ๋ฒณ: 53/64 ์—”ํŠธ๋ฆฌ
flag_out ๋ณตํ˜ธ: 'Did you know how base64 works'
FLAG: DH{Did_you_know_how_base64_works}


๐Ÿ“ ๊ฒฐ๋ก 

์ปค์Šคํ…€ ์•ŒํŒŒ๋ฒณ์€ ์•Œ๋ ค์ง„ ํ‰๋ฌธ ํ•œ ์Œ์ด๋ฉด ๋ฌด๋„ˆ์ง„๋‹ค.

table(์•ŒํŒŒ๋ฒณ)์„ ๋น„๋ฐ€๋กœ ๊ฐ์ท„์ง€๋งŒ, ํ‰๋ฌธ๊ณผ ๊ทธ ์ธ์ฝ”๋”ฉ ๊ฒฐ๊ณผ๊ฐ€ ํ•จ๊ป˜ ๋…ธ์ถœ๋˜๋Š” ์ˆœ๊ฐ„ ์•ŒํŒŒ๋ฒณ์€ ์œ„์น˜๋ณ„ ๋Œ€์‘์œผ๋กœ ๊ทธ๋Œ€๋กœ ๋ณต์›๋œ๋‹ค. base64์ฒ˜๋Ÿผ ์œ„์น˜ ๋…๋ฆฝ์ ์ธ ์ธ์ฝ”๋”ฉ์€ ํŠนํžˆ ์ทจ์•ฝํ•˜๋‹ค โ€” ํ•œ ์œ„์น˜์˜ ๋Œ€์‘์ด ๋‹ค๋ฅธ ์œ„์น˜์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์„ฑ๋ฆฝํ•˜๋ฏ€๋กœ, ์ถฉ๋ถ„ํžˆ ๊ธด known-plaintext๋งŒ ์žˆ์œผ๋ฉด ์•ŒํŒŒ๋ฒณ ๋Œ€๋ถ€๋ถ„์ด ๋“œ๋Ÿฌ๋‚œ๋‹ค. ์•ŒํŒŒ๋ฒณ์„ ๋ฐ”๊พผ "์ปค์Šคํ…€" base64๋Š” ๋‚œ๋…ํ™”์ผ ๋ฟ ์•”ํ˜ธ๊ฐ€ ์•„๋‹ˆ๋‹ค.

๋ณตํ˜ธ ๊ฒฐ๊ณผ๋Š” ํ”Œ๋ž˜๊ทธ ํ˜•์‹์œผ๋กœ ์ •๊ทœํ™”ํ•ด์„œ ์ œ์ถœํ•œ๋‹ค.

๋ณตํ˜ธ๋กœ ์–ป์€ ์›๋ฌธ์ด ๊ณง ๋‹ต์ด๋ผ๋„, ๋Œ€ํšŒ ํ”Œ๋ž˜๊ทธ ํ˜•์‹(๊ณต๋ฐฑโ†’์–ธ๋”์Šค์ฝ”์–ด, ๋Œ€์†Œ๋ฌธ์ž, ๊ฐ์‹ธ๋Š” DH{})์— ๋งž์ถ”๋Š” ๋งˆ์ง€๋ง‰ ํ•œ ๋‹จ๊ณ„๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ์›๋ฌธ์„ ๊ทธ๋Œ€๋กœ ๋‚ด์„œ ์˜ค๋‹ต์ด ๋‚˜์˜ค๋ฉด "ํ’€์ด๊ฐ€ ํ‹€๋ ธ๋‚˜" ์˜์‹ฌํ•˜๊ธฐ ์‰ฌ์šด๋ฐ, ํ˜•์‹ ๋ฌธ์ œ์ธ ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๋ณตํ˜ธ โ†’ ํ˜•์‹ ์ •๊ทœํ™” โ†’ ์ œ์ถœ ์ˆœ์„œ๋ฅผ ๊ธฐ์–ตํ•˜๋ฉด ์ด๋Ÿฐ ํ—›๋ฐœ์งˆ์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์ด ๊ธ€์ด ๋„์›€์ด ๋๋‚˜์š”?

Comments

๋Œ“๊ธ€

0๊ฐœ

๋Œ“๊ธ€์„ ๋‚จ๊ธฐ๋ ค๋ฉด ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ด์š”. (๋„ค์ด๋ฒ„ ยท ๊ตฌ๊ธ€ ๊ณ„์ •)

๋Œ“๊ธ€ ๋ถˆ๋Ÿฌ์˜ค๋Š” ์ค‘โ€ฆ

Related

๊ด€๋ จ ๊ธ€

3๊ฐœ
[๐Ÿฅ‰ Bronze 1] ์ŠคํŠธ๋ฆฝ๋œ PIE ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ปค์Šคํ…€ RLE ์—ญ์‚ฐ โ€” DreamHack secret message ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 1] ์ŠคํŠธ๋ฆฝ๋œ PIE ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ปค์Šคํ…€ RLE ์—ญ์‚ฐ โ€” DreamHack secret message ํ’€์ด

๋“œ๋ฆผ์ด๊ฐ€ ์ด๋ฏธ์ง€๋ฅผ ์ž๊ธฐ๊ฐ€ ๋งŒ๋“  ์ธ์ฝ”๋”ฉ์œผ๋กœ ์••์ถ•ํ•ด๋’€๋‹ค. ์ŠคํŠธ๋ฆฝ๋œ PIE ELF๋ฅผ objdump๋กœ ๋œฏ์–ด fopen/fgetc/fputc ํ˜ธ์ถœ๋งŒ์œผ๋กœ ์ปค์Šคํ…€ RLE ์ƒํƒœ๋จธ์‹ ์„ ๋ณต์›ํ•˜๊ณ , gdb ๋Ÿฐํƒ€์ž„ ๊ฒ€์ฆ๊นŒ์ง€ ๊ฑฐ์ณ ์›๋ณธ ๋น„ํŠธ๋งต์„ ๋˜์‚ด๋ฆฐ ํ’€์ด.
#dreamhack#ctf#reversing+3
2026-07-19#dreamhack +3
[๐Ÿฅ‰ Bronze 4] ๋น„๊ต์‹์„ ๋’ค์ง‘์–ด ํ‚ค๋ฅผ ๋ณต์›ํ•˜๋‹ค โ€” DreamHack Easy Assembly ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 4] ๋น„๊ต์‹์„ ๋’ค์ง‘์–ด ํ‚ค๋ฅผ ๋ณต์›ํ•˜๋‹ค โ€” DreamHack Easy Assembly ํ’€์ด

์†์œผ๋กœ ์ง  ์–ด์…ˆ๋ธ”๋ฆฌ ํฌ๋ž™๋ฏธ. check_password๊ฐ€ ์ž…๋ ฅ์„ len๊ณผ enc_flag๋กœ XORํ•ด 0์ธ์ง€ ๊ฒ€์‚ฌํ•˜๋Š”๋ฐ, ์ด ๋น„๊ต์‹์„ ๋’ค์ง‘์œผ๋ฉด ์ •๋‹ต ํ‚ค = enc_flag ^ len ์ด๋‹ค. ํ‚ค ๊ธธ์ด๊ฐ€ 48์ด๋ผ enc_flag๋ฅผ 0x30์œผ๋กœ XORํ•˜๋ฉด ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ฐ”๋กœ ๋‚˜์˜ค๊ณ , ๊ทธ ํ‚ค๋ฅผ ๋„ฃ์œผ๋ฉด "You nailed it!"์œผ๋กœ ํ™•์ธ๋œ๋‹ค.
#dreamhack#ctf#reversing+3
2026-07-13#dreamhack +3
[๐Ÿฅ‰ Bronze 2] dreamhack.exe์— ์‹ฌ๊ฒจ์•ผ ์—ด๋ฆฌ๋Š” DLL โ€” DreamHack Inject ME!!! ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 2] dreamhack.exe์— ์‹ฌ๊ฒจ์•ผ ์—ด๋ฆฌ๋Š” DLL โ€” DreamHack Inject ME!!! ํ’€์ด

์ต์ŠคํฌํŠธ๋„ ์—†๋Š” DLL์ด DllMain์—์„œ ํ˜ธ์ŠคํŠธ ํ”„๋กœ์„ธ์Šค๋ช…์„ ๊ฒ€์‚ฌํ•œ๋‹ค. ์ด๋ฆ„์ด dreamhack.exe์—ฌ์•ผ flag๋ฅผ ๊ณ„์‚ฐํ•˜๋Š”๋ฐ, ๊ทธ ๊ฐ’์€ ํ”„๋กœ์„ธ์Šค๋ช… ์ฒซ 4๋ฐ”์ดํŠธ๋ฅผ WELL512 PRNG ์‹œ๋“œ๋กœ ์‚ผ์•„ ๋งŒ๋“ ๋‹ค. ํ”„๋กœ์„ธ์Šค๋ช…์ด ๊ณ ์ •์ด๋ผ flag๋Š” ์‹คํ–‰ ์—†์ด ์ •์ ์œผ๋กœ ๋ณต์›๋œ๋‹ค.
#dreamhack#ctf#reversing+5
2026-07-13#dreamhack +3