[๐Ÿฅ‰ Bronze 2] "1๋…„ ๋’ค์— ์•Œ๋ ค์ค„๊ฒŒ"๋ฅผ 1๋ฐ”์ดํŠธ๋กœ ์•ž๋‹น๊ธฐ๊ธฐ โ€” DreamHack Simple Patch Me ํ’€์ด

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

[๐Ÿฅ‰ Bronze 2] "1๋…„ ๋’ค์— ์•Œ๋ ค์ค„๊ฒŒ"๋ฅผ 1๋ฐ”์ดํŠธ๋กœ ์•ž๋‹น๊ธฐ๊ธฐ โ€” DreamHack Simple Patch Me ํ’€์ด

ํ•œ ์‹œ๊ฐ„์”ฉ sleepํ•˜๋ฉฐ 8760๋ฒˆ(1๋…„)์„ ์„ธ์•ผ flag๋ฅผ ๋ณด์—ฌ์ฃผ๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๋‹ค. ์นด์šดํ„ฐ ์ดˆ๊ธฐ๊ฐ’ 0์„ 8760์œผ๋กœ ๋ฐ”๊พธ๋Š” 4๋ฐ”์ดํŠธ ํŒจ์น˜ ํ•˜๋‚˜๋กœ ๋Œ€๊ธฐ ๋ฃจํ”„๋ฅผ ๊ฑด๋„ˆ๋›ด๋‹ค. flag๋Š” ๊ทธ ์นด์šดํ„ฐ ๊ฐ’์œผ๋กœ ๋งŒ๋“  ํ‚ค์˜ XOR์ด๋ผ, ๊ฐ’์ด ๊ณ ์ •์ด๋‹ˆ ์ •์ ์œผ๋กœ๋„ ๊ณ„์‚ฐ๋œ๋‹ค.

๋ฌธ์ œ: DreamHack โ€” Simple Patch Me ๋ถ„๋ฅ˜: Reversing ๋‚œ์ด๋„: ๐Ÿฅ‰ Bronze 2 FLAG: DH{6ad0f80a0448aee5e8615fbdea9c2775}

"1๋…„ ๋’ค์— flag๋ฅผ ๋ณด์—ฌ์ค„๊ฒŒ :p"๋ผ๋ฉฐ ํ•œ ์‹œ๊ฐ„์”ฉ sleepํ•˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๋‹ค. ์‹ค์ œ๋กœ 8760์‹œ๊ฐ„(=1๋…„)์„ ์„ธ์•ผ flag๊ฐ€ ๋‚˜์˜จ๋‹ค. ์ด๋ฆ„์ด "Patch Me"์ธ ๋งŒํผ, ๊ทธ ๋Œ€๊ธฐ ๋ฃจํ”„๋ฅผ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‚ด์ง ๊ณ ์น˜๋ฉด ๋œ๋‹ค. ์นด์šดํ„ฐ ์ดˆ๊ธฐ๊ฐ’ ํ•˜๋‚˜๋งŒ ๋๊ฐ’์œผ๋กœ ๋ฐ”๊พธ๋ฉด ๋ฃจํ”„๊ฐ€ ํ†ต์งธ๋กœ ์Šคํ‚ต๋œ๋‹ค.

์ด ๊ธ€์˜ ๋ช…๋ น์€ ๋ชจ๋‘ extracted/ ์—์„œ ์‹คํ–‰ํ•œ๋‹ค.

file simple_patch_me ; echo "--- strings ---" ; strings simple_patch_me | grep -iE "year|hour|day|flag|passed"
fileยทstrings โ€” "1 year", "hour", "The flag is" ์‹œ๊ฐ„ ๊ฒฝ๊ณผ ๋ฉ”์‹œ์ง€
fileยทstrings โ€” "1 year", "hour", "The flag is" ์‹œ๊ฐ„ ๊ฒฝ๊ณผ ๋ฉ”์‹œ์ง€

๋ฌธ์ œ ๊ฐœ์š”

ํ•ญ๋ชฉ๋‚ด์šฉ
๋ฌธ์ œ๋ช…Simple Patch Me
๋‚œ์ด๋„๐Ÿฅ‰ Bronze 2
๋ถ„๋ฅ˜Reversing (x86-64 ELF, stripped)
์ œ๊ณต ํŒŒ์ผsimple_patch_me
ํ•ต์‹ฌ ์ทจ์•ฝ์  / ๊ธฐ๋ฒ•๋Œ€๊ธฐ ๋ฃจํ”„ ์šฐํšŒ ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒจ์น˜ + ์นด์šดํ„ฐ ๊ธฐ๋ฐ˜ XOR ๋ณตํ˜ธ

ํ’€์ด๋Š” ๋‘ ๊ฐˆ๋ž˜๋‹ค. ํ•˜๋‚˜๋Š” ์ด๋ฆ„๋Œ€๋กœ ํŒจ์น˜ โ€” 1๋…„ ๋Œ€๊ธฐ ๋ฃจํ”„๋ฅผ ๊ฑด๋„ˆ๋›ฐ๊ฒŒ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ณ ์ณ ๊ทธ๋ƒฅ ์‹คํ–‰ํ•œ๋‹ค. ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” flag๋ฅผ ๋งŒ๋“œ๋Š” ๊ณ„์‚ฐ์ด ๊ณ ์ •๋œ ์นด์šดํ„ฐ ๊ฐ’์—๋งŒ ์˜์กดํ•œ๋‹ค๋Š” ๊ฑธ ์•Œ๊ณ  ์ •์ ์œผ๋กœ ์žฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋‘˜ ๋‹ค ๊ฐ™์€ flag๋กœ ์ˆ˜๋ ดํ•œ๋‹ค.



๐Ÿ”ฌ ์ •์ฐฐ โ€” ์‹œ๊ฐ„์ด ํ๋ฅด๋Š” ์ฒ™ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ

strings๋งŒ ๋ด๋„ ์ปจ์…‰์ด ๋“œ๋Ÿฌ๋‚œ๋‹ค. "I will show you the flag after 1 year :p", "%u hours passed", "%u days have passed.", "Great xD 1 year has passed! The flag is: ". sleep์„ importํ•˜๊ณ , ์‹œ๊ฐ„์ด ํ๋ฅธ ์ฒ™ ๋ฉ”์‹œ์ง€๋ฅผ ์ฐ๋‹ค๊ฐ€ 1๋…„์ด ์ง€๋‚˜๋ฉด flag๋ฅผ ๋ณด์—ฌ์ค€๋‹ค.

ํŒŒ์ดํ”„๋กœ ์‹คํ–‰ํ•˜๋ฉด ์•„๋ฌด ์ถœ๋ ฅ ์—†์ด ๋ฉˆ์ถฐ ์žˆ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š”๋ฐ, ์ฒซ ๋ฐ˜๋ณต์—์„œ sleep์— ๊ฑธ๋ ค ๋ฒ„ํผ๊ฐ€ flush๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์‹ค์ œ๋กœ ๊ธฐ๋‹ค๋ฆด ์ˆ˜๋Š” ์—†์œผ๋‹ˆ main์„ ์—ด์–ด ๋Œ€๊ธฐ ๋ฃจํ”„๋ฅผ ์ฐพ๋Š”๋‹ค.


๐Ÿ’ฃ 1๋…„์˜ ๋ฒฝ โ€” sleep ๋ฃจํ”„

main์˜ ํ•ต์‹ฌ์€ ์นด์šดํ„ฐ ํ•˜๋‚˜(0x40404c, ์‹œ๊ฐ„ ๋‹จ์œ„)๋ฅผ ๋‘๊ณ  ๋„๋Š” ๋ฃจํ”„๋‹ค. ๋งค ๋ฐ˜๋ณต sleep(3600)(=1์‹œ๊ฐ„)์„ ๊ฑธ๊ณ  ์นด์šดํ„ฐ๋ฅผ 1 ์˜ฌ๋ฆฐ๋‹ค. ์นด์šดํ„ฐ๊ฐ€ 8759 ์ดํ•˜์ธ ๋™์•ˆ ๋ฐ˜๋ณตํ•˜๋‹ˆ, 8760๋ฒˆ(=365ร—24) ๋Œ์•„์•ผ ๋ฃจํ”„๋ฅผ ๋น ์ ธ๋‚˜์˜จ๋‹ค.

echo "[์นด์šดํ„ฐ ์ดˆ๊ธฐํ™” @0x401292 โ€” ํŒจ์น˜ ๋Œ€์ƒ imm32]" ; \
objdump -d -M intel simple_patch_me --start-address=0x401292 --stop-address=0x40129c | grep "401292" ; \
echo "[๋ฃจํ”„: sleep 3600 + t++]" ; \
objdump -d -M intel simple_patch_me --start-address=0x4012a1 --stop-address=0x4012b5 | grep -E "^  40" \
  | sed -E -e "s/(edi,0xe10)/\1  ; 3600s=1h/" -e "s/(add +eax,0x1)/\1  ; t++/" ; \
echo "[์ข…๋ฃŒ: t <= 8759 ์ด๋ฉด ๋ฐ˜๋ณต, ์•„๋‹ˆ๋ฉด flag]" ; \
objdump -d -M intel simple_patch_me --start-address=0x401376 --stop-address=0x401387 | grep -E "^  40" \
  | sed -E -e "s/(cmp +eax,0x2237)/\1  ; 8759=365*24-1/"
objdump โ€” ์นด์šดํ„ฐ ์ดˆ๊ธฐํ™” + sleep(3600) ๋ฃจํ”„ + cmp 0x2237 ์ข…๋ฃŒ ์กฐ๊ฑด
objdump โ€” ์นด์šดํ„ฐ ์ดˆ๊ธฐํ™” + sleep(3600) ๋ฃจํ”„ + cmp 0x2237 ์ข…๋ฃŒ ์กฐ๊ฑด
; 0x401292  ์นด์šดํ„ฐ ์ดˆ๊ธฐํ™” (ํŒจ์น˜ ๋Œ€์ƒ)
mov   dword [0x40404c], 0          ; t = 0
 
; 0x4012a1  ๋ฃจํ”„ ๋ณธ๋ฌธ
mov   edi, 0xe10                   ; sleep ์ธ์ž = 3600์ดˆ(1์‹œ๊ฐ„)
call  sleep
add   [0x40404c], 1                ; t++
 
; 0x40137c  ์ข…๋ฃŒ ์กฐ๊ฑด
cmp   eax, 0x2237                  ; t <= 8759 (=365*24-1) ?
jbe   0x4012a1                     ; ์ฐธ์ด๋ฉด ๋ฃจํ”„, ๊ฑฐ์ง“(=8760)์ด๋ฉด flag ๋กœ

๋ฃจํ”„๋ฅผ ์ •์ƒ์ ์œผ๋กœ ํ†ต๊ณผํ•˜๋ ค๋ฉด 8760์‹œ๊ฐ„์„ ๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋ฃจํ”„๊ฐ€ ๋๋‚˜๋Š” ์ˆœ๊ฐ„ ์นด์šดํ„ฐ ๊ฐ’์€ ํ•ญ์ƒ 8760์œผ๋กœ ๊ณ ์ •์ด๋‹ค. ์ด ์ ์ด ๋‘ ๊ฐ€์ง€ ํ’€์ด์˜ ์—ด์‡ ๋‹ค.


๐Ÿฉน ํŒจ์น˜ โ€” ์นด์šดํ„ฐ๋ฅผ ๋๊ฐ’์œผ๋กœ

๊ฐ€์žฅ ๊ณง์€ ๊ธธ์€ ์นด์šดํ„ฐ ์ดˆ๊ธฐ๊ฐ’์„ 0 ๋Œ€์‹  8760์œผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฃจํ”„ ์กฐ๊ฑด t <= 8759๊ฐ€ ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฑฐ์ง“์ด๋ผ, sleep ๋ฃจํ”„๋ฅผ ํ†ต์งธ๋กœ ๊ฑด๋„ˆ๋›ฐ๊ณ  ๋ฐ”๋กœ flag ๊ณ„์‚ฐ์œผ๋กœ ๊ฐ„๋‹ค.

๋Œ€๊ธฐ ๋ฃจํ”„ ํ๋ฆ„๊ณผ ํŒจ์น˜ ์ง€์  โ€” ์นด์šดํ„ฐ ์ดˆ๊ธฐ๊ฐ’์„ ๋๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ” ๋ฃจํ”„ ์Šคํ‚ต
๋Œ€๊ธฐ ๋ฃจํ”„ ํ๋ฆ„๊ณผ ํŒจ์น˜ ์ง€์  โ€” ์นด์šดํ„ฐ ์ดˆ๊ธฐ๊ฐ’์„ ๋๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ” ๋ฃจํ”„ ์Šคํ‚ต

ํŒจ์น˜ํ•  ๋ฐ”์ดํŠธ๋Š” mov dword [0x40404c], 0 ๋ช…๋ น์˜ imm32๋‹ค. ๋ช…๋ น์ด c7 05 <disp32> 00 00 00 00 ์ด๋ฏ€๋กœ ๋งˆ์ง€๋ง‰ 4๋ฐ”์ดํŠธ(ํŒŒ์ผ ์˜คํ”„์…‹ 0x1298)๋ฅผ 0x00000000์—์„œ 0x00002238(=8760)๋กœ ๋ฐ”๊พผ๋‹ค.

import struct
OFF = 0x1298   # imm32 ํŒŒ์ผ ์˜คํ”„์…‹
data = bytearray(open("simple_patch_me", "rb").read())
data[OFF:OFF+4] = struct.pack("<I", 0x2238)   # t ์ดˆ๊ธฐ๊ฐ’ 0 -> 8760
open("simple_patch_me_patched", "wb").write(data)

ํŒจ์น˜ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋Œ€๊ธฐ ์—†์ด ๊ณง์žฅ flag๊ฐ€ ๋œฌ๋‹ค.

patch.py ๋กœ imm32 ๋ฅผ 0x2238 ๋กœ ๋ฐ”๊พผ ๋’ค ์‹คํ–‰ โ†’ ์ฆ‰์‹œ flag
patch.py ๋กœ imm32 ๋ฅผ 0x2238 ๋กœ ๋ฐ”๊พผ ๋’ค ์‹คํ–‰ โ†’ ์ฆ‰์‹œ flag
Great xD 1 year has passed! The flag is: DH{6ad0f80a0448aee5e8615fbdea9c2775}


๐Ÿ”‘ flag๋Š” ์–ด๋–ป๊ฒŒ ๋งŒ๋“ค์–ด์ง€๋‚˜ โ€” ์นด์šดํ„ฐ XOR ๋ณตํ˜ธ

ํŒจ์น˜๋กœ flag๋ฅผ ์–ป์—ˆ์ง€๋งŒ, ์™œ ์นด์šดํ„ฐ ๊ฐ’์ด ์ค‘์š”ํ•œ์ง€๋Š” ๋ณตํ˜ธ ํ•จ์ˆ˜(0x401196)๋ฅผ ๋ด์•ผ ์•ˆ๋‹ค. flag๋Š” ํ†ต์งธ๋กœ ๋ฐ•ํ˜€ ์žˆ์ง€ ์•Š๊ณ , ์นด์šดํ„ฐ ๊ฐ’์œผ๋กœ ๋งŒ๋“  ํ‚ค๋กœ XOR ๋ณตํ˜ธ๋œ๋‹ค.

objdump โ€” key = t ร— 0x1337beef31337, enc[i+3] ^= key8[i mod 8]
objdump โ€” key = t ร— 0x1337beef31337, enc[i+3] ^= key8[i mod 8]

์•”ํ˜ธ๋ฌธ์€ ์Šคํƒ์— movabs๋กœ ์‹ฌ์–ด๋‘” 37๋ฐ”์ดํŠธ๋‹ค. ์•ž 3๋ฐ”์ดํŠธ๋Š” DH{ ํ‰๋ฌธ, ๋์€ }์™€ NUL, ๊ฐ€์šด๋ฐ 32๋ฐ”์ดํŠธ๊ฐ€ ์•”ํ˜ธ๋ฌธ์ด๋‹ค. ํ‚ค๋Š” ์นด์šดํ„ฐ t๋กœ ๋งŒ๋“ ๋‹ค.

// key8 = 8๋ฐ”์ดํŠธ (๋ฆฌํ‹€์—”๋””์–ธ)
key8 = (t * 0x1337beef31337) mod 2^64;      // t = 8760
 
// ์•ž 3๋ฐ”์ดํŠธ("DH{")์™€ ๋์€ ๊ทธ๋Œ€๋กœ, ๊ฐ€์šด๋ฐ 32๋ฐ”์ดํŠธ๋งŒ XOR
for (int i = 0; i < 32; i++)
    enc[i + 3] ^= key8[i % 8];

ํ‚ค๊ฐ€ t์—๋งŒ ์˜์กดํ•˜๊ณ  t๋Š” ๋ฃจํ”„๊ฐ€ ๋๋‚˜๋ฉด ์–ธ์ œ๋‚˜ 8760์ด๋‹ค. ๊ทธ๋ž˜์„œ flag๋Š” ์‹คํ–‰ ํ™˜๊ฒฝ๊ณผ ๋ฌด๊ด€ํ•˜๊ฒŒ ํ•˜๋‚˜๋กœ ์ •ํ•ด์ง„๋‹ค.


๐ŸŽฏ ์ •์  ๋ณต์› โ€” solve.py

๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋Œ๋ฆฌ์ง€ ์•Š๊ณ ๋„, ์–ด์…ˆ๋ธ”๋ฆฌ์—์„œ ์ฝ์€ ์•”ํ˜ธ๋ฌธ 37๋ฐ”์ดํŠธ์™€ ์ƒ์ˆ˜ 0x1337beef31337, ๊ณ ์ • ์นด์šดํ„ฐ 8760๋งŒ ์žˆ์œผ๋ฉด flag๊ฐ€ ๋‚˜์˜จ๋‹ค.

import struct
 
t = 8760
key8 = struct.pack("<Q", (t * 0x1337beef31337) & 0xFFFFFFFFFFFFFFFF)
 
# movabs ๋กœ ์‹ฌ์–ด๋‘” ์•”ํ˜ธ๋ฌธ (๋ฆฌํ‹€์—”๋””์–ธ ๋ฐ”์ดํŠธ์—ด)
enc = bytearray(
    struct.pack("<Q", 0xbebddde33e7b4844) +
    struct.pack("<Q", 0xb9b58db638482980) +
    struct.pack("<Q", 0xedbc8fba6d1c7cdd) +
    struct.pack("<Q", 0xeaee80e36d4d7bde) +
    struct.pack("<I", 0x7d1c2e8f) + b"\x00"
)
for i in range(32):
    enc[i + 3] ^= key8[i % 8]
 
print("[+] FLAG:", enc.split(b"\x00")[0].decode())

ํŒจ์น˜ ์‹คํ–‰๊ณผ ์ •ํ™•ํžˆ ๊ฐ™์€ flag๊ฐ€ ๋‚˜์˜จ๋‹ค.

solve.py ์‹คํ–‰ ํ™”๋ฉด โ€” ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋Œ๋ฆฌ์ง€ ์•Š๊ณ  t=8760 ์„ ๊ทธ๋Œ€๋กœ ๋„ฃ์–ด key8 = 0882b98dd8b81929 ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๊ทธ ํ‚ค๋กœ ์ •์  ๋ณตํ˜ธํ•œ ํ”Œ๋ž˜๊ทธ ํ•œ ์ค„์„ ์ถœ๋ ฅํ•œ๋‹ค
solve.py ์‹คํ–‰ ํ™”๋ฉด โ€” ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋Œ๋ฆฌ์ง€ ์•Š๊ณ  t=8760 ์„ ๊ทธ๋Œ€๋กœ ๋„ฃ์–ด key8 = 0882b98dd8b81929 ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ , ๊ทธ ํ‚ค๋กœ ์ •์  ๋ณตํ˜ธํ•œ ํ”Œ๋ž˜๊ทธ ํ•œ ์ค„์„ ์ถœ๋ ฅํ•œ๋‹ค
[*] t = 8760  key8 = 0882b98dd8b81929
[+] FLAG: DH{6ad0f80a0448aee5e8615fbdea9c2775}


๐Ÿ“ ๊ฒฐ๋ก 

"๊ธฐ๋‹ค๋ ค์•ผ ํ•œ๋‹ค"๋Š” ์กฐ๊ฑด์€ ๋Œ€๊ฐœ ์ˆซ์ž ํ•˜๋‚˜๋กœ ์••์ถ•๋ผ ์žˆ๋‹ค.

1๋…„ ๋Œ€๊ธฐ๋ผ๋Š” ๊ฑฐ์ฐฝํ•œ ์žฅ๋ฒฝ๋„ ์‹ค์ œ๋กœ๋Š” ์นด์šดํ„ฐ์™€ cmp ํ•œ ์ค„์ด์—ˆ๋‹ค. ๊ทธ ์นด์šดํ„ฐ์˜ ์ดˆ๊ธฐ๊ฐ’์„ ๋๊ฐ’์œผ๋กœ ๋ฐ”๊พธ๋Š” 4๋ฐ”์ดํŠธ ํŒจ์น˜๋กœ ์กฐ๊ฑด์ด ์ฒ˜์Œ๋ถ€ํ„ฐ ๋งŒ์กฑ๋ผ, ๋ฃจํ”„ ์ „์ฒด๊ฐ€ ๋ฌด์˜๋ฏธํ•ด์กŒ๋‹ค. ์‹œ๊ฐ„ยทํšŸ์ˆ˜ยทํ”Œ๋ž˜๊ทธ ๊ฒ€์‚ฌ ๊ฐ™์€ ๊ฒŒ์ดํŠธ๋Š” ๊ทธ ํŒ์ •์„ ๋‚ด๋ฆฌ๋Š” ๋ช…๋ น ํ•œ๋‘ ๊ฐœ๋งŒ ์ฐพ์œผ๋ฉด ์šฐํšŒ ์ง€์ ์ด ๋ณด์ธ๋‹ค.

ํŒจ์น˜๊ฐ€ ํ†ตํ•ด๋„ "์™œ ํ†ตํ•˜๋Š”์ง€"๋Š” ๋”ฐ๋กœ ์ดํ•ดํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ํŒจ์น˜๊ฐ€ ๋จนํžŒ ์ด์œ ๋Š” flag ํ‚ค๊ฐ€ ๋ฃจํ”„์˜ ์ตœ์ข… ์นด์šดํ„ฐ ๊ฐ’(8760)์—์„œ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งŒ์•ฝ flag๊ฐ€ ๋งค ๋ฐ˜๋ณต ์กฐ๊ธˆ์”ฉ ๊ฐฑ์‹ ๋˜๋Š” ๊ฐ’์ด์—ˆ๋‹ค๋ฉด, ๋ฃจํ”„๋ฅผ ์Šคํ‚ตํ•œ ํŒจ์น˜๋Š” ์—‰๋šฑํ•œ ๊ฐ’์„ ๋ฑ‰์—ˆ์„ ๊ฒƒ์ด๋‹ค. ๋ณตํ˜ธ ๋กœ์ง์„ ์ฝ์–ด "์นด์šดํ„ฐ๊ฐ€ 8760์œผ๋กœ ๊ณ ์ •"์ž„์„ ํ™•์ธํ–ˆ๊ธฐ์— ํŒจ์น˜์™€ ์ •์  ๊ณ„์‚ฐ์ด ๊ฐ™์€ ๋‹ต์œผ๋กœ ๋งŒ๋‚ฌ๋‹ค.

์ž…๋ ฅ์— ์˜์กดํ•˜์ง€ ์•Š๋Š” ๊ณ„์‚ฐ์€ ์‹คํ–‰์ด ์„ ํƒ์ง€์ผ ๋ฟ์ด๋‹ค.

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

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

Comments

๋Œ“๊ธ€

0๊ฐœ

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

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

Related

๊ด€๋ จ ๊ธ€

3๊ฐœ
[๐Ÿฅ‰ Bronze 3] 7๋ฒˆ ์ฃผ๋ฌด๋ฅธ ์ž…๋ ฅ์„ ๊ฑฐ๊พธ๋กœ ๋˜๊ฐ๊ธฐ โ€” DreamHack Simple Crack Me 2 ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 3] 7๋ฒˆ ์ฃผ๋ฌด๋ฅธ ์ž…๋ ฅ์„ ๊ฑฐ๊พธ๋กœ ๋˜๊ฐ๊ธฐ โ€” DreamHack Simple Crack Me 2 ํ’€์ด

32๋ฐ”์ดํŠธ ์ž…๋ ฅ์— XORยท๋ง์…ˆยท๋บ„์…ˆ์„ ์ผ๊ณฑ ๋ฒˆ ์„ž์–ด ๋ชฉํ‘œ๊ฐ’๊ณผ ๋น„๊ตํ•˜๋Š” crackme๋‹ค. ์„ž๋Š” ์—ฐ์‚ฐ์ด ์ „๋ถ€ ๋ฐ”์ดํŠธ ๋‹จ์œ„ ๊ฐ€์—ญ์ด๋ผ, ๋ชฉํ‘œ๊ฐ’์—์„œ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์—ญ์ˆœ์œผ๋กœ ํ’€๋ฉด ์ž…๋ ฅ์ด ๊ทธ๋Œ€๋กœ ๋ณต์›๋œ๋‹ค. ๋””์Šค์–ด์…ˆ๋ธ”๋กœ ์ˆœ์„œยทํ‚คยท์ƒ์ˆ˜๋ฅผ ์ฝ์–ด ๋˜๊ฐ์•˜๋‹ค.
#dreamhack#ctf#reversing+4
2026-07-13#dreamhack +4
[๐Ÿฅ‰ Bronze 2] XOR 0x42 ๋’ค์— ์ˆจ์€ ๋ช…๋ น ํ•œ ๊ฐœ โ€” DreamHack flag printer ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 2] XOR 0x42 ๋’ค์— ์ˆจ์€ ๋ช…๋ น ํ•œ ๊ฐœ โ€” DreamHack flag printer ํ’€์ด

print/id/help ์„ธ ๊ฐœ๋งŒ ๋ฐ›๋Š”๋‹ค๋˜ ํ”„๋กœ๊ทธ๋žจ์ด, ์‚ฌ์‹ค์€ ๋„ค ๋ฒˆ์งธ ๋ช…๋ น์„ ๋ชฐ๋ž˜ ๋ฐ›๊ณ  ์žˆ์—ˆ๋‹ค. ๋ชจ๋ฅด๋Š” ํ† ํฐ์„ strdup ํ•ด์„œ XOR 0x42 ํ•œ ๋’ค ์Šคํƒ์— ์กฐ๋ฆฝํ•ด ๋‘” ๋„ค ๋ฐ”์ดํŠธ์™€ ๋น„๊ตํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ๊ณ , ๊ทธ๊ฑธ ํ†ต๊ณผํ•˜๋ฉด print ๊ฐ€ art ๋Œ€์‹  flag ๋ฅผ ์—ฐ๋‹ค. objdump ๋กœ ๋น„๊ต๊ฐ’์„ ์ฝ๊ณ  gdb ๋กœ ๋Ÿฐํƒ€์ž„๊นŒ์ง€ ํ™•์ธํ•ด ํ•œ ์ค„๋กœ flag ๋ฅผ ๋ฝ‘์•˜๋‹ค.
#dreamhack#ctf#reversing+5
2026-08-11#dreamhack +4
[๐Ÿฅ‰ Bronze 2] ์•”ํ˜ธ๋„ ํ”Œ๋ž˜๊ทธ๋„ .data ์— ๋ˆ„์›Œ ์žˆ๋‹ค โ€” DreamHack Gyul Brix Calculator ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 2] ์•”ํ˜ธ๋„ ํ”Œ๋ž˜๊ทธ๋„ .data ์— ๋ˆ„์›Œ ์žˆ๋‹ค โ€” DreamHack Gyul Brix Calculator ํ’€์ด

๋‹น๋„๋ฅผ ์ž…๋ ฅ๋ฐ›๋Š” ์ฒ™ํ•˜๋Š” 32๋น„ํŠธ PE ์•ˆ์—, ๊ด€๋ฆฌ์ž ์•”ํ˜ธ์™€ ํ”Œ๋ž˜๊ทธ๊ฐ€ ๊ฐ๊ฐ ๋‹จ์ผ๋ฐ”์ดํŠธ XOR ํ•œ ๊ฒน๋งŒ ์“ด ์ฑ„ .data ์— ๋‚˜๋ž€ํžˆ ๋ˆ„์›Œ ์žˆ๋‹ค. ํ‚ค๊ฐ€ ์ฝ”๋“œ ์•ˆ ์ฆ‰์น˜๊ฐ’์ด๋ผ strings ๋กœ๋Š” ์•„๋ฌด๊ฒƒ๋„ ์•ˆ ์žกํžˆ๊ณ , ๋‘ ๋ธ”๋กญ์„ ํ‚คยท์•”ํ˜ธ๋ฌธ ์Œ์œผ๋กœ ๋„˜๊ฒจ์งš์œผ๋ฉด ๋” ํ—ค๋งจ๋‹ค. ๋””์Šค์–ด์…ˆ๋ธ”๋ฆฌ์—์„œ 0x55 ์™€ 0x77 ์„ ์ฝ์–ด๋‚ด๋ฉด ๋๋‚œ๋‹ค.
#dreamhack#ctf#reversing+6
2026-08-17#dreamhack +4