[๐Ÿฅ‰ Bronze 2] ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ ํฉ์–ด ๋†“์€ ๋ฐฐ์น˜ ๋‚œ๋…ํ™” ๋˜๋Œ๋ฆฌ๊ธฐ โ€” DreamHack Batch Checker ํ’€์ด

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

[๐Ÿฅ‰ Bronze 2] ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ ํฉ์–ด ๋†“์€ ๋ฐฐ์น˜ ๋‚œ๋…ํ™” ๋˜๋Œ๋ฆฌ๊ธฐ โ€” DreamHack Batch Checker ํ’€์ด

๊ฒ€์‚ฌ ๋กœ์ง์„ ์œˆ๋„์šฐ ๋ฐฐ์น˜ ํŒŒ์ผ๋กœ ๋‚œ๋…ํ™”ํ•œ ๋ฆฌ๋ฒ„์‹ฑ ๋ฌธ์ œ. 100์ž์งœ๋ฆฌ ๋ฌด์˜๋ฏธํ•œ ์ด๋ฆ„์˜ ๋ณ€์ˆ˜ 37๊ฐœ๋ฅผ ์ •์˜ํ•œ ๋’ค %VAR:~offset,1% ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ๋ฌธ๋ฒ•์œผ๋กœ ํ•œ ๊ธ€์ž์”ฉ ๋ฝ‘์•„ 7,463์ž์งœ๋ฆฌ ๋ช…๋ น ํ•œ ์ค„์„ ์กฐ๋ฆฝํ•œ๋‹ค. ์ด ์น˜ํ™˜์„ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ํ’€๋ฉด ์›๋ž˜์˜ ๋น„๊ต์‹์ด ๋“œ๋Ÿฌ๋‚˜๊ณ , ๋น„๊ต ๋Œ€์ƒ์ด ๊ณง ํ”Œ๋ž˜๊ทธ๋‹ค. "์‹คํ–‰๋งŒ ํ•˜๋ฉด ๋œ๋‹ค"๋Š” ๋ฌธ์ œ ์„ค๋ช…๊ณผ ๋‹ฌ๋ฆฌ, ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ  ์ •์ ์œผ๋กœ ํ’€์–ด์•ผ ์•ˆ์ „ํ•˜๋‹ค.

๋ฌธ์ œ: DreamHack โ€” Batch Checker ๋ถ„๋ฅ˜: Reversing ๋‚œ์ด๋„: ๐Ÿฅ‰ Bronze 2 FLAG: DH{BA7cH_cAN_hiDe_u5iNg_text}

๋ฌธ์ œ ์„ค๋ช…์€ "๊ณผ์—ฐ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ์‹คํ–‰๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค!"๋ผ๋ฉฐ ํƒœ์—ฐํ•˜๊ฒŒ ์‹คํ–‰์„ ๊ถŒํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•ด๋ด์•ผ ์–ป๋Š” ๊ฑด correct๋‚˜ wrong์ด๋ผ๋Š” ํ•œ ๋งˆ๋””๋ฟ, ํ”Œ๋ž˜๊ทธ ์ž์ฒด๋Š” ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค โ€” ๋ธŒ๋ฃจํŠธํฌ์Šค๋กœ ๋งžํžˆ๋ผ๋Š” ์†Œ๋ฆฌ์— ๊ฐ€๊น๋‹ค. ์ด ๋ฐฐ์น˜ ํŒŒ์ผ ํ•˜๋‚˜๊ฐ€ ์ „๋ถ€์ธ ๋ฆฌ๋ฒ„์‹ฑ ๋ฌธ์ œ์ธ๋ฐ, ์—ด์–ด ๋ณด๋ฉด ๋ฌด์ž‘์œ„ ์ด๋ฆ„์˜ ๊ธด ๋ณ€์ˆ˜๋“ค๊ณผ ์•Œ ์ˆ˜ ์—†๋Š” %...% ๊ธฐํ˜ธ๊ฐ€ ๋นฝ๋นฝํ•˜๋‹ค. ๋ฐฐ์น˜ ํŠน์œ ์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ๋ฌธ๋ฒ•์œผ๋กœ ๋ช…๋ น์„ ํ•œ ๊ธ€์ž์”ฉ ํฉ์–ด ๋†“์€ ๋‚œ๋…ํ™”๋‹ค.

Batch Checker ๋ฌธ์ œ ํŽ˜์ด์ง€ โ€” "์‹คํ–‰๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค!"๋ผ์ง€๋งŒ ์‹คํ–‰ํ•ด๋„ correct/wrong๋งŒ ๋‚˜์˜ฌ ๋ฟ ํ”Œ๋ž˜๊ทธ๋Š” ์•ˆ ๋ณด์ธ๋‹ค
Batch Checker ๋ฌธ์ œ ํŽ˜์ด์ง€ โ€” "์‹คํ–‰๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค!"๋ผ์ง€๋งŒ ์‹คํ–‰ํ•ด๋„ correct/wrong๋งŒ ๋‚˜์˜ฌ ๋ฟ ํ”Œ๋ž˜๊ทธ๋Š” ์•ˆ ๋ณด์ธ๋‹ค

๋ฌธ์ œ ๊ฐœ์š”

ํ•ญ๋ชฉ๋‚ด์šฉ
๋ฌธ์ œ๋ช…Batch Checker
๋‚œ์ด๋„๐Ÿฅ‰ Bronze 2
๋ถ„๋ฅ˜Reversing
์ œ๊ณต ํŒŒ์ผprob.bat (38์ค„, ๋ณ€์ˆ˜ 37๊ฐœ, ์กฐ๋ฆฝ ๋ช…๋ น ํ•œ ์ค„ 7,463์ž)
ํ•ต์‹ฌ ๊ธฐ๋ฒ•%VAR:~offset,len% ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ์น˜ํ™˜ ํ•ด์ œ

๋ฐฐ์น˜๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๊ณ ๋„, ์น˜ํ™˜ ๊ทœ์น™๋งŒ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ํ’€๋ฉด ์›๋ž˜ ๋ช…๋ น์ด ๋ณต์›๋œ๋‹ค.



๐Ÿงฉ ๋ฐฐ๊ฒฝ โ€” ๋ฐฐ์น˜์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด ๋ฌธ๋ฒ•

์œˆ๋„์šฐ ๋ฐฐ์น˜์—๋Š” ๋ณ€์ˆ˜์˜ ์ผ๋ถ€๋งŒ ์ž˜๋ผ ์“ฐ๋Š” ๋ฌธ๋ฒ•์ด ์žˆ๋‹ค. %NAME:~offset,length%๋Š” ๋ณ€์ˆ˜ NAME์˜ ๊ฐ’์—์„œ offset๋ถ€ํ„ฐ length๊ธ€์ž๋ฅผ ๋ฝ‘๋Š”๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด SET "V=abcdef" ์ƒํƒœ์—์„œ %V:~2,1%๋Š” c ํ•œ ๊ธ€์ž๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๊ทธ ๋ฌธ๋ฒ•์„ ๋‚œ๋…ํ™”์— ์“ด๋‹ค. ๋ฌด์˜๋ฏธํ•œ ์ด๋ฆ„์˜ ๊ธด ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์‹ญ ๊ฐœ ์ •์˜ํ•ด ๋†“๊ณ , ์‹คํ–‰ํ•  ๋ช…๋ น์„ ๊ทธ ๋ณ€์ˆ˜๋“ค์˜ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ ํ•œ ๊ธ€์ž์”ฉ ์ด์–ด ๋ถ™์ธ๋‹ค. ์‚ฌ๋žŒ ๋ˆˆ์—๋Š” ๋‚œ์ˆ˜์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ, ๊ฐ %VAR:~n,1%๋Š” ์ •ํ•ด์ง„ ํ•œ ๊ธ€์ž๋ฅผ ๊ฐ€๋ฆฌํ‚ฌ ๋ฟ์ด๋‹ค.


๐Ÿ”ฌ ์ •์ฐฐ โ€” ๋ฌด์—‡์„ ์กฐ๋ฆฝํ•˜๋Š”๊ฐ€

prob.bat์€ ํฌ๊ฒŒ ๋‘ ๋ถ€๋ถ„์ด๋‹ค. ์•ž์ชฝ์€ SET "์ด๋ฆ„=๊ฐ’" ํ˜•ํƒœ๋กœ ๋ณ€์ˆ˜ 37๊ฐœ๋ฅผ ์ •์˜ํ•˜๊ณ , ๋’ค์ชฝ ํ•œ ์ค„์ด @%A:~53,1%%B:~26,1%...์ฒ˜๋Ÿผ ์ˆ˜๋งŽ์€ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ์ด์–ด ๋ถ™์—ฌ ์‹ค์ œ ๋ช…๋ น์„ ๋งŒ๋“ ๋‹ค.

wc -l prob.bat
awk '{print length}' prob.bat | sort -rn | head -3
head -c 300 prob.bat
raw ํ™•์ธ โ€” ์ด 38์ค„์ธ๋ฐ ๊ฐ€์žฅ ๊ธด ํ•œ ์ค„์ด 7463์ž, ๋ณ€์ˆ˜๊ฐ’ ์˜ˆ์‹œ(100์ž ์•ˆํŒŽ ๋ฌด์˜๋ฏธ ๋ฌธ์ž์—ด)
raw ํ™•์ธ โ€” ์ด 38์ค„์ธ๋ฐ ๊ฐ€์žฅ ๊ธด ํ•œ ์ค„์ด 7463์ž, ๋ณ€์ˆ˜๊ฐ’ ์˜ˆ์‹œ(100์ž ์•ˆํŒŽ ๋ฌด์˜๋ฏธ ๋ฌธ์ž์—ด)

ํŒŒ์ผ ์ „์ฒด๋Š” 38์ค„๋ฟ์ธ๋ฐ ๊ทธ์ค‘ ์กฐ๋ฆฝ ๋ช…๋ น ํ•œ ์ค„์ด ๋ฌด๋ ค 7,463์ž๋‹ค. ๋ณ€์ˆ˜ ์ด๋ฆ„ยท๊ฐ’๋„ ์ „๋ถ€ 100์ž ์•ˆํŒŽ์˜ ๋ฌด์˜๋ฏธํ•œ ์•ŒํŒŒ๋ฒณ ๋‚˜์—ด์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์กฐ๋ฆฝ๋œ ๋ช…๋ น์ด ์ž…๋ ฅ์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋กœ์ง์ด๋ฏ€๋กœ, ์น˜ํ™˜๋งŒ ํ’€๋ฉด ๊ฒ€์‚ฌ ๋Œ€์ƒ(=ํ”Œ๋ž˜๊ทธ)์ด ๊ทธ๋Œ€๋กœ ๋ณด์ธ๋‹ค.

์น˜ํ™˜ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์ •๋ง ๊ทธ๋ ‡๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์†์œผ๋กœ ํ•œ ๊ธ€์ž๋งŒ ๋จผ์ € ํ™•์ธํ•ด๋ดค๋‹ค. ์กฐ๋ฆฝ ๋ช…๋ น์˜ ์ฒซ ๊ธ€์ž๋Š” ๋ฆฌํ„ฐ๋Ÿด @์ด๊ณ , ๊ทธ๋‹ค์Œ ์ฒซ ๋ฒˆ์งธ %VAR:~53,1% ํŒจํ„ด์ด ๋ฌด์—‡์„ ๊ฐ€๋ฆฌํ‚ค๋Š”์ง€ ๋ดค๋‹ค.

name, off = "๊ธด ๋ณ€์ˆ˜๋ช…", 53
val = vars[name]
print(repr(val[off]))
์ฒซ ์น˜ํ™˜ ํ•œ ๊ธ€์ž ํ™•์ธ โ€” 100์ž ๋ณ€์ˆ˜์˜ 53๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ์ •ํ™•ํžˆ 'e', "@echo off..."์˜ ๋‘ ๋ฒˆ์งธ ๊ธ€์ž์™€ ์ผ์น˜
์ฒซ ์น˜ํ™˜ ํ•œ ๊ธ€์ž ํ™•์ธ โ€” 100์ž ๋ณ€์ˆ˜์˜ 53๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ์ •ํ™•ํžˆ 'e', "@echo off..."์˜ ๋‘ ๋ฒˆ์งธ ๊ธ€์ž์™€ ์ผ์น˜

100์ž์งœ๋ฆฌ ๋ณ€์ˆ˜์˜ 53๋ฒˆ์งธ ๋ฌธ์ž๊ฐ€ ์ •ํ™•ํžˆ 'e'๋‹ค. ๋ฆฌํ„ฐ๋Ÿด @ ๋‹ค์Œ์— ์ด e๊ฐ€ ์ด์–ด์ง€๋ฉด @e..., ์ฆ‰ ์ตœ์ข… ๋ช…๋ น์ด @echo off๋กœ ์‹œ์ž‘ํ•œ๋‹ค๋Š” ๊ฒƒ๊ณผ ๋งž์•„๋–จ์–ด์ง„๋‹ค. ๊ทœ์น™์„ ์ œ๋Œ€๋กœ ์ฝ์—ˆ๋‹ค๋Š” ํ™•์‹ ์ด ์„œ๋‹ˆ, ์ด์ œ ์ด ๊ณผ์ •์„ ์ „์ฒด ๋ฌธ์ž์—ด์— ์ž๋™์œผ๋กœ ๋ฐ˜๋ณตํ•˜๋ฉด ๋œ๋‹ค.



๐ŸŽฏ ํ’€์ด โ€” ์น˜ํ™˜์„ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ํ•ด์ œ

SET ์ •์˜๋ฅผ ๋”•์…”๋„ˆ๋ฆฌ๋กœ ํŒŒ์‹ฑํ•˜๊ณ , %NAME:~off,len% ํŒจํ„ด์„ ์‹ค์ œ ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ ๋ฐ˜๋ณต ์น˜ํ™˜ํ•œ๋‹ค.

# solve.py
import re
lines = open("prob.bat", encoding="utf-8", errors="replace").read().splitlines()
vars = {}
for l in lines:
    m = re.match(r'\s*SET\s+"([^=]+)=(.*)"\s*$', l, re.I)
    if m: vars[m.group(1)] = m.group(2)
 
def resolve(line):
    def sub(mm):
        v = vars.get(mm.group(1), ""); off = int(mm.group(2)); ln = mm.group(3)
        return v[off:] if ln == "" else v[off:off+int(ln)]
    prev = None
    while prev != line:
        prev = line; line = re.sub(r'%([A-Za-z0-9_]+):~(-?\d+),?(\d*)%', sub, line)
    return line
 
for l in lines:
    if not l.strip().lower().startswith("set ") and l.count("%") > 4:
        print("๋ณต์›๋œ ๊ฒ€์‚ฌ:", resolve(l).strip())
solve.py ์‹คํ–‰ โ€” ๋ณ€์ˆ˜ 37๊ฐœ๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ์น˜ํ™˜์„ ํ’€์–ด ๋ณต์›ํ•œ ๋ฐฐ์น˜ ๊ฒ€์‚ฌ์‹
solve.py ์‹คํ–‰ โ€” ๋ณ€์ˆ˜ 37๊ฐœ๋ฅผ ํŒŒ์‹ฑํ•˜๊ณ  ์น˜ํ™˜์„ ํ’€์–ด ๋ณต์›ํ•œ ๋ฐฐ์น˜ ๊ฒ€์‚ฌ์‹

๋ณต์›๋œ ๋ช…๋ น์€ ์ด๋ ‡๋‹ค.

@echo off && if "%FLAG%"=="BA7cH_cAN_hiDe_u5iNg_text" (echo correct) else (echo wrong) && pause
SET ๋ณ€์ˆ˜์™€ %VAR:~offset,1% ์น˜ํ™˜์„ ํ’€๋ฉด ์›๋ž˜ ๊ฒ€์‚ฌ์‹์ด ๋“œ๋Ÿฌ๋‚œ๋‹ค
SET ๋ณ€์ˆ˜์™€ %VAR:~offset,1% ์น˜ํ™˜์„ ํ’€๋ฉด ์›๋ž˜ ๊ฒ€์‚ฌ์‹์ด ๋“œ๋Ÿฌ๋‚œ๋‹ค

์ž…๋ ฅ์ด BA7cH_cAN_hiDe_u5iNg_text์™€ ๊ฐ™์€์ง€ ๋น„๊ตํ•œ๋‹ค. ์ด ๊ฐ’์ด ๊ณง ํ”Œ๋ž˜๊ทธ ๋ณธ๋ฌธ์ด๋‹ค. ๋ฐฐ์น˜๋ฅผ ์‹ค์ œ๋กœ ์‹คํ–‰ํ•˜๋Š” ๋Œ€์‹ , ๊ฐ™์€ ๋น„๊ต๋ฅผ ํŒŒ์ด์ฌ์œผ๋กœ ํ‰๋‚ด ๋‚ด ์ •๋ง correct๊ฐ€ ๋‚˜์˜ค๋Š”์ง€ ํ™•์ธํ–ˆ๋‹ค.

FLAG = "BA7cH_cAN_hiDe_u5iNg_text"
target = "BA7cH_cAN_hiDe_u5iNg_text"
print("correct" if FLAG == target else "wrong")
ํŒŒ์ด์ฌ์œผ๋กœ ๋ฐฐ์น˜์˜ if ๋น„๊ต๋ฅผ ํ‰๋‚ด ๋‚ด correct ์ถœ๋ ฅ โ€” ๋ณต์›ํ•œ ๊ฐ’์ด ์ •ํ™•ํ•จ์„ ์‹คํ–‰ ์—†์ด ํ™•์ธ
ํŒŒ์ด์ฌ์œผ๋กœ ๋ฐฐ์น˜์˜ if ๋น„๊ต๋ฅผ ํ‰๋‚ด ๋‚ด correct ์ถœ๋ ฅ โ€” ๋ณต์›ํ•œ ๊ฐ’์ด ์ •ํ™•ํ•จ์„ ์‹คํ–‰ ์—†์ด ํ™•์ธ

FLAG: DH{BA7cH_cAN_hiDe_u5iNg_text}


๐Ÿ“ ๊ฒฐ๋ก 

๋‚œ๋…ํ™”๋Š” ์‹คํ–‰ ๋กœ์ง์„ ์ง€์šฐ์ง€ ๋ชปํ•œ๋‹ค. ๋ถ€๋ถ„ ๋ฌธ์ž์—ด๋กœ ์•„๋ฌด๋ฆฌ ์ž˜๊ฒŒ ํฉ์–ด ๋†“์•„๋„, ๊ทธ ์กฐ๊ฐ๋“ค์„ ํ•ฉ์น˜๋ฉด ์›๋ž˜ ๋ช…๋ น์ด ๋˜์–ด์•ผ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ž‘ํ•œ๋‹ค. ์กฐ๋ฆฝ ๊ทœ์น™(%VAR:~n,1%)๋งŒ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋˜์งš์œผ๋ฉด ๋‚œ๋…ํ™”๋Š” ๊ทธ๋Œ€๋กœ ํ’€๋ฆฐ๋‹ค. ๋ณ€์ˆ˜ 37๊ฐœ, 7,463์ž์งœ๋ฆฌ ํ•œ ์ค„์ด๋ผ๋Š” ๊ทœ๋ชจ๊ฐ€ ์œ„ํ˜‘์ ์œผ๋กœ ๋ณด์—ฌ๋„, ์น˜ํ™˜ ๊ทœ์น™ ์ž์ฒด๋Š” ์‹œ์ข…์ผ๊ด€ ๋˜‘๊ฐ™์•„์„œ ์ •์ฐฐ ํ•œ ๋ฒˆ์ด๋ฉด ์ „์ฒด๋ฅผ ์ž๋™ํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

"์‹คํ–‰๋งŒ ํ•˜๋ฉด ๋œ๋‹ค"๋Š” ๋ง์„ ๊ทธ๋Œ€๋กœ ๋ฏฟ์ง€ ์•Š๋Š”๋‹ค. ์ด ๋ฌธ์ œ์˜ ์„ค๋ช…์€ ์‹คํ–‰์„ ๊ถŒํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ ์‹คํ–‰ํ•ด๋„ correct/wrong ํ•œ ๋งˆ๋””๋งŒ ๋Œ์•„์˜ฌ ๋ฟ ํ”Œ๋ž˜๊ทธ๋Š” ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค. ์˜์‹ฌ์Šค๋Ÿฌ์šด ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹ค์ œ๋กœ ๋Œ๋ ค๋ณด๋ผ๋Š” ์œ ํ˜น์€ ์ด ๋ฌธ์ œ ๋ฐ–์—์„œ๋„ ํ”ํ•˜๋‹ค โ€” ์•…์„ฑ ๋ฐฐ์น˜ยท๋งคํฌ๋กœ๊ฐ€ ์ •ํ™•ํžˆ ์ด๋Ÿฐ ์‹์œผ๋กœ "๊ทธ๋ƒฅ ์‹คํ–‰ํ•ด๋ณด๋ผ"๊ณ  ์œ ๋„ํ•œ๋‹ค.

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

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

Comments

๋Œ“๊ธ€

0๊ฐœ

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

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

Related

๊ด€๋ จ ๊ธ€

3๊ฐœ
[๐Ÿฅ‰ Bronze 2] Duff's device๋กœ ํŽผ์นœ ์œ„์น˜๋ณ„ XOR ๋˜๋Œ๋ฆฌ๊ธฐ โ€” DreamHack legacyopt ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 2] Duff's device๋กœ ํŽผ์นœ ์œ„์น˜๋ณ„ XOR ๋˜๋Œ๋ฆฌ๊ธฐ โ€” DreamHack legacyopt ํ’€์ด

์ž…๋ ฅ์„ Duff's device๋กœ ํŽผ์นœ ๋ฃจํ”„์—์„œ ์œ„์น˜๋ณ„ ์ƒ์ˆ˜์™€ XORํ•ด hex๋กœ ์ถœ๋ ฅํ•˜๋Š” ์ธ์ฝ”๋” ๋ฌธ์ œ. ๊ฐ ์ถœ๋ ฅ ๋ฐ”์ดํŠธ๊ฐ€ ๊ทธ ์ž๋ฆฌ ์ž…๋ ฅ์—๋งŒ ๋‹ฌ๋ ค ์žˆ์–ด, ๊ฐ™์€ ๊ธธ์ด์˜ ์•Œ๋ ค์ง„ ์ž…๋ ฅ์„ ํ•œ ๋ฒˆ ๋„ฃ์–ด ์œ„์น˜๋ณ„ XOR ์ƒ์ˆ˜๋ฅผ ์บ๋‚ธ ๋’ค ์ฃผ์–ด์ง„ ์ถœ๋ ฅ์— ๊ทธ๋Œ€๋กœ ์ ์šฉํ•˜๋ฉด ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ณต์›๋œ๋‹ค. ์žฌ์ธ์ฝ”๋”ฉ์ด ์›๋ณธ๊ณผ ์ผ์น˜ํ•จ๊นŒ์ง€ ํ™•์ธํ–ˆ๋‹ค.
#dreamhack#ctf#reversing+4
2026-07-14#dreamhack +3
[๐Ÿฅ‰ Bronze 3] smali์— ํฉ์–ด ๋‘” ์ƒ์ˆ˜๋กœ ์กฐ๋ฆฝ๋˜๋Š” ํ”Œ๋ž˜๊ทธ โ€” DreamHack Summer Fan ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 3] smali์— ํฉ์–ด ๋‘” ์ƒ์ˆ˜๋กœ ์กฐ๋ฆฝ๋˜๋Š” ํ”Œ๋ž˜๊ทธ โ€” DreamHack Summer Fan ํ’€์ด

APK๋ฅผ apktool๋กœ ๋œฏ์–ด smali๋ฅผ ์ฝ๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฆฌ๋ฒ„์‹ฑ ๋ฌธ์ œ. ํ”Œ๋ž˜๊ทธ๋Š” 32๊ฐœ ์ •์ˆ˜ ๋ฆฌ์ŠคํŠธ FLAG์™€ ํ•œ ๊ธ€์ž์”ฉ ์ชผ๊ฐœ ๋†“์€ ๋ฌธ์ž์—ด KEY๋ฅผ XORยท๋บ„์…ˆ์œผ๋กœ ์กฐํ•ฉํ•ด ๋งŒ๋“ ๋‹ค. gen(i) ๋ณด์ •ํ•ญ๊นŒ์ง€ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ•˜๋ฉด BISC ํ˜•์‹์˜ ํ”Œ๋ž˜๊ทธ๊ฐ€ ๋ณต์›๋œ๋‹ค.
#dreamhack#ctf#reversing+4
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