[๐Ÿฅ‰ ๋ธŒ๋ก ์ฆˆ 3] XOR ํ•œ ์ค„๋กœ ์ž ๊ทผ ๋žœ์„ฌ์›จ์–ด, ํ‚ค๋ฅผ ๊ฑฐ๊พธ๋กœ ๋ฝ‘์•„๋‚ด๋‹ค โ€” DreamHack darimchal_001 ํ’€์ด

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

[๐Ÿฅ‰ ๋ธŒ๋ก ์ฆˆ 3] XOR ํ•œ ์ค„๋กœ ์ž ๊ทผ ๋žœ์„ฌ์›จ์–ด, ํ‚ค๋ฅผ ๊ฑฐ๊พธ๋กœ ๋ฝ‘์•„๋‚ด๋‹ค โ€” DreamHack darimchal_001 ํ’€์ด

์ž…๋ ฅํ•œ ๋ณตํ˜ธํ™” ํ‚ค๋ฅผ ๊ณ ์ • KEY์™€ XORํ•ด JOKER ์ƒ์ˆ˜์™€ strncmpํ•˜๋Š” ๋žœ์„ฌ์›จ์–ด ์ฝ˜์…‰ํŠธ ๋ฌธ์ œ. XOR์€ ์ž๊ธฐ์—ญ์›์ด๋ผ JOKER โŠ• KEY๋ฅผ ๊ทธ๋Œ€๋กœ ๊ณ„์‚ฐํ•˜๋ฉด ํ†ต๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ pa55uc0_๊ฐ€ ๋‚˜์˜จ๋‹ค. ๋งˆ์ง€๋ง‰์— ํ”Œ๋ž˜๊ทธ๋ฅผ DH{} ์—†์ดยท์–ธ๋”๋ฐ”๋ฅผ ๋นผ๊ณ  pa55uc0๋กœ ๋‚ด์•ผ ์ •๋‹ต์œผ๋กœ ์ธ์ •๋˜๋Š” ํ•จ์ •์ด ์žˆ์—ˆ๋‹ค.

๋ฌธ์ œ: DreamHack โ€” darimchal_001 ๋ถ„๋ฅ˜: Crypto ๋‚œ์ด๋„: ๐Ÿฅ‰ Bronze 3 FLAG: pa55uc0

์นœ๊ตฌ ๋‹ค๋ฆฌ๋ฏธ๊ฐ€ ๋“œ๋ฆผ์ด์˜ ์ปดํ“จํ„ฐ์— XOR ๋žœ์„ฌ์›จ์–ด๋ฅผ ์‹ฌ์—ˆ๋‹ค. ๋ณตํ˜ธํ™” ํ‚ค๋ฅผ ์ž…๋ ฅํ•ด์„œ ์ž ๊ธˆ์„ ํ’€์–ด์•ผ ํ•œ๋‹ค๋Š”, ์ฝ˜์…‰ํŠธ๊ฐ€ ๊ท€์—ฌ์šด ๋ฌธ์ œ๋‹ค.

ํ•ต์‹ฌ์€ ๋‹จ ํ•œ ์ค„์ด๋‹ค. ์ž…๋ ฅํ•œ ํ‚ค๋ฅผ ๊ณ ์ • ๋ฌธ์ž์—ด KEY์™€ ๋ฐ”์ดํŠธ๋ณ„๋กœ XORํ•œ ๋’ค, ๋ฏธ๋ฆฌ ๋ฐ•ํ˜€ ์žˆ๋Š” JOKER์™€ ๊ฐ™์€์ง€๋งŒ ๋ณธ๋‹ค. XOR์€ ๊ฐ™์€ ๊ฐ’์œผ๋กœ ๋‘ ๋ฒˆ ๊ฑธ๋ฉด ์›๋ž˜๋Œ€๋กœ ๋Œ์•„์˜ค๋Š” ์ž๊ธฐ์—ญ์›(self-inverse) ์—ฐ์‚ฐ์ด๋ผ, JOKER๋ฅผ KEY๋กœ ํ•œ ๋ฒˆ ๋” XORํ•˜๋ฉด ํ†ต๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๊ทธ๋Œ€๋กœ ํŠ€์–ด๋‚˜์˜จ๋‹ค.

๋ณตํ˜ธํ™” ํ‚ค = JOKER โŠ• KEY โ€” ๋ฐ”์ดํŠธ๋ณ„ XOR๋กœ pa55uc0_ ๋ณต์›
๋ณตํ˜ธํ™” ํ‚ค = JOKER โŠ• KEY โ€” ๋ฐ”์ดํŠธ๋ณ„ XOR๋กœ pa55uc0_ ๋ณต์›


๋ฌธ์ œ ๊ฐœ์š”

ํ•ญ๋ชฉ๋‚ด์šฉ
๋ฌธ์ œ๋ช…darimchal_001
๋‚œ์ด๋„๐Ÿฅ‰ Bronze 3
๋ถ„๋ฅ˜Crypto
์ œ๊ณต ํŒŒ์ผchall1 (Mach-O x86-64 PIE), chall1.c (์†Œ์Šค ๋™๋ด‰)
ํ•ต์‹ฌ ๊ธฐ๋ฒ•XOR ์ž๊ธฐ์—ญ์› โ€” JOKER โŠ• KEY๋กœ ํ†ต๊ณผ ํ‚ค ์—ญ์‚ฐ
ํ•จ์ •ํ”Œ๋ž˜๊ทธ๋Š” DH{} ๋ž˜ํผ ์—†์ด, ๋ ์–ธ๋”๋ฐ”๋ฅผ ๋บ€ pa55uc0

ํ’€์ด ํ๋ฆ„์€ ์งง๋‹ค. ์†Œ์Šค์—์„œ ๊ฒ€์ฆ ํ•œ ์ค„์„ ์ฝ๊ณ  โ†’ JOKER โŠ• KEY๋ฅผ ๊ณ„์‚ฐํ•ด ๋น„๋ฐ€๋ฒˆํ˜ธ pa55uc0_๋ฅผ ์–ป๊ณ  โ†’ ์‹ค์ œ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋””์Šค์–ด์…ˆ๋ธ”๋กœ ๊ทธ XOR์ด ์ง„์งœ์ธ์ง€ ํ™•์ธํ•œ ๋’ค โ†’ ํ”Œ๋ž˜๊ทธ ํ˜•์‹๋งŒ ๋งž์ถฐ ์ œ์ถœํ•œ๋‹ค.



๐Ÿงฉ ๋ฐฐ๊ฒฝ โ€” XOR์€ ์™œ ์ž๋ฌผ์‡ ์ด์ž ์—ด์‡ ์ธ๊ฐ€

XOR(^)์€ ๋Œ€์นญ์ด๋‹ค. ์–ด๋–ค ๋ฐ”์ดํŠธ p๋ฅผ ํ‚ค k๋กœ ๊ฐ€๋ฆฌ๋ฉด c = p ^ k๊ฐ€ ๋˜๊ณ , ๊ฐ™์€ ํ‚ค๋กœ ํ•œ ๋ฒˆ ๋” XORํ•˜๋ฉด c ^ k = p ^ k ^ k = p๋กœ ์›๋ž˜ ๊ฐ’์ด ๋ณต์›๋œ๋‹ค. k ^ k = 0์ด๊ณ  p ^ 0 = p์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด ๋ฌธ์ œ๋Š” ๊ทธ ์„ฑ์งˆ์„ ๊ทธ๋Œ€๋กœ ์ž๋ฌผ์‡ ๋กœ ์“ด๋‹ค. ์ •๋‹ต ๋น„๋ฐ€๋ฒˆํ˜ธ p๋ฅผ KEY๋กœ XORํ•œ ๊ฒฐ๊ณผ JOKER = p ^ KEY๋ฅผ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ๋ฐ•์•„ ๋‘๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ๋„ฃ์€ ์ž…๋ ฅ x์— ๋Œ€ํ•ด x ^ KEY == JOKER์ธ์ง€ ๊ฒ€์‚ฌํ•œ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ x ^ KEY == JOKER๊ฐ€ ์„ฑ๋ฆฝํ•˜๋ ค๋ฉด x == JOKER ^ KEY์—ฌ์•ผ ํ•œ๋‹ค. ๊ณต๊ฒฉ์ž ์ž…์žฅ์—์„œ๋Š” ๋ธŒ๋ฃจํŠธํฌ์Šค๋„, ๋ฐฉ์ •์‹ ํ’€์ด๋„ ํ•„์š” ์—†๋‹ค. JOKER์™€ KEY๊ฐ€ ๋‘˜ ๋‹ค ๋ฐ”์ด๋„ˆ๋ฆฌ ์•ˆ์— ์žˆ์œผ๋‹ˆ ๊ทธ๋ƒฅ ๋‘˜์„ XORํ•˜๋ฉด ํ†ต๊ณผ ํ‚ค๊ฐ€ ๋‚˜์˜จ๋‹ค. ๊ฐ€๋ฆฌ๋Š” ๋ฐ ์“ด ์—ฐ์‚ฐ์ด ๊ทธ๋Œ€๋กœ ์—ฌ๋Š” ์—ด์‡ ๊ฐ€ ๋œ๋‹ค.


๐Ÿ”ฌ ์ •์ฐฐ โ€” Mach-O ๋ฐ”์ด๋„ˆ๋ฆฌ์™€ ๋ฐ•ํ˜€ ์žˆ๋Š” ์ƒ์ˆ˜

๋จผ์ € ํŒŒ์ผ ์ข…๋ฅ˜์™€, ๋ฐ”์ด๋„ˆ๋ฆฌ์— KEYยทJOKER๊ฐ€ ์‹ค์ œ๋กœ ๋“ค์–ด ์žˆ๋Š”์ง€ ๋ณธ๋‹ค.

file chall1 && strings -a chall1 | grep -nE "023661dd4|CRT;|\.success"

file/strings โ€” Mach-O x86-64 PIE, KEY 023661dd4์™€ JOKER ๊ผฌ๋ฆฌ CRT; ํ™•์ธ
file/strings โ€” Mach-O x86-64 PIE, KEY 023661dd4์™€ JOKER ๊ผฌ๋ฆฌ CRT; ํ™•์ธ

macOS์šฉ Mach-O 64-bit x86_64 ์‹คํ–‰ ํŒŒ์ผ์ด๋‹ค. ๋ฆฌ๋ˆ…์Šค์—์„œ ๋ฐ”๋กœ ์‹คํ–‰๋˜์ง„ ์•Š์ง€๋งŒ, ์†Œ์Šค๊ฐ€ ๊ฐ™์ด ์ฃผ์–ด์กŒ๊ณ  ์ƒ์ˆ˜๋„ ๊ทธ๋Œ€๋กœ ๋ฐ•ํ˜€ ์žˆ์–ด ๋ถ„์„์—๋Š” ์ง€์žฅ์ด ์—†๋‹ค. strings์— 023661dd4(= KEY)๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ณด์ด๊ณ , JOKER์˜ ์ธ์‡„ ๊ฐ€๋Šฅํ•œ ๊ผฌ๋ฆฌ์ธ CRT;(0x43 0x52 0x54 0x3b)๋„ ์žกํžŒ๋‹ค. ์„ฑ๊ณต ์‹œ ๋งŒ๋“œ๋Š” ./%s.success ํƒœ๊ทธ ํŒŒ์ผ ์ด๋ฆ„๋„ ๋ณด์ธ๋‹ค.


๐Ÿ”Ž ์ฝ”๋“œ ๋ถ„์„ โ€” ๊ฒ€์ฆ์€ ๋”ฑ ํ•œ ์ค„

๋™๋ด‰๋œ chall1.c์—์„œ ์ƒ์ˆ˜์™€ ๊ฒ€์ฆ ๋กœ์ง๋งŒ ์ถ”๋ฆฌ๋ฉด ์ด๋ ‡๋‹ค.

#define JOKER "\x40\x53\x06\x03\x43\x52\x54\x3b"   // ์ž ๊ธด ๊ฐ’ (8๋ฐ”์ดํŠธ)
#define KEY   "023661dd4"                          // XOR ํ‚ค (9๋ฐ”์ดํŠธ)
 
int __is_valid_pwd(char *pwd) {
    // pwd ๋ฅผ KEY ๋กœ XOR ํ•œ ๊ฒฐ๊ณผ๊ฐ€ JOKER ์™€ ๊ฐ™์œผ๋ฉด ํ†ต๊ณผ
    if (!strncmp(JOKER, __obfuscation(pwd, KEY), sizeof(JOKER)))
        return TRUE;
    return FALSE;
}
 
char *__obfuscation(char *pwd, char *key) {
    for (int i = 0; i < strlen(pwd); i++) {
        if (key[i] == '\0') break;      // ํ‚ค ๊ธธ์ด(9)๊นŒ์ง€๋งŒ
        pwd[i] = pwd[i] ^ key[i];       // ๋ฐ”์ดํŠธ๋ณ„ XOR
    }
    return pwd;
}

__obfuscation์€ ์ž…๋ ฅ์„ KEY๋กœ ๋ฐ”์ดํŠธ๋ณ„ XORํ•œ๋‹ค. __is_valid_pwd๋Š” ๊ทธ ๊ฒฐ๊ณผ๋ฅผ JOKER์™€ strncmp๋กœ ๋น„๊ตํ•œ๋‹ค. ํ†ต๊ณผ ์กฐ๊ฑด์€ ๋ชจ๋“  i์— ๋Œ€ํ•ด pwd[i] ^ KEY[i] == JOKER[i], ์ฆ‰ pwd[i] == JOKER[i] ^ KEY[i]๋‹ค.

๋น„๊ต ๊ธธ์ด sizeof(JOKER)๋Š” ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด์˜ ๋„ ์ข…๋‹จ๊นŒ์ง€ ํฌํ•จํ•ด 9๋‹ค. JOKER๋Š” 8๋ฐ”์ดํŠธ๋ฟ์ด๋ผ 9๋ฒˆ์งธ ์ž๋ฆฌ๋Š” ๋„(0x00)์ด๋‹ค. ๊ทธ๋ž˜์„œ ์ž…๋ ฅ์ด ์ •ํ™•ํžˆ 8๊ธ€์ž๋ฉด ๊ทธ ๋ฌธ์ž์—ด์˜ ๋„ ์ข…๋‹จ์ด 9๋ฒˆ์งธ ์ž๋ฆฌ์—์„œ JOKER์˜ ๋„๊ณผ ๋งž์•„๋–จ์–ด์ ธ, ์•ž 8๋ฐ”์ดํŠธ๋งŒ ์ผ์น˜์‹œํ‚ค๋ฉด ๊ฒ€์ฆ์„ ํ†ต๊ณผํ•œ๋‹ค.

์†Œ์Šค๋งŒ ๋ฏฟ์ง€ ๋ง๊ณ , ์‹ค์ œ ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ๋„ ์ด XOR์ด ๋„๋Š”์ง€ radare2๋กœ __obfuscation ๋ฃจํ”„ ๋ณธ์ฒด๋ฅผ ๋œฏ์–ด ๋ณธ๋‹ค.

r2 -q -c "pd 13 @ 0x100003d2f" chall1

radare2 ๋””์Šค์–ด์…ˆ๋ธ” โ€” pwd[i]์™€ key[i]๋ฅผ ๊ฐ๊ฐ ๋กœ๋“œํ•ด xor edx, esi ๋กœ XOR ํ›„ ๋˜์ €์žฅ
radare2 ๋””์Šค์–ด์…ˆ๋ธ” โ€” pwd[i]์™€ key[i]๋ฅผ ๊ฐ๊ฐ ๋กœ๋“œํ•ด xor edx, esi ๋กœ XOR ํ›„ ๋˜์ €์žฅ

๋‘ ๋ฒˆ์˜ movsx โ€ฆ byte [rax + rcx]๋กœ pwd[i]์™€ key[i]๋ฅผ ๊ฐ๊ฐ ์ฝ์–ด ์˜จ ๋‹ค์Œ, xor edx, esi ํ•œ ์ค„๋กœ XORํ•˜๊ณ  mov byte [rax + rcx], dl๋กœ ์ œ์ž๋ฆฌ์— ๋ฎ์–ด์“ด๋‹ค. ๊ทธ ๋’ค add eax, 1๋กœ ์ธ๋ฑ์Šค๋ฅผ ์˜ฌ๋ ค ๋ฃจํ”„๋ฅผ ๋ˆ๋‹ค. ์†Œ์Šค์˜ pwd[i] ^= key[i]๊ฐ€ ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„œ๋„ ๊ทธ๋Œ€๋กœ๋‹ค.



๐ŸŽฏ ํ’€์ด โ€” JOKER โŠ• KEY ํ•œ ๋ฒˆ

pwd[i] = JOKER[i] ^ KEY[i]๋ฅผ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์˜ฎ๊ธฐ๋ฉด ๋์ด๋‹ค.

# solve.py โ€” JOKER โŠ• KEY ์—ญ์‚ฐ
JOKER = bytes.fromhex("40 53 06 03 43 52 54 3b".replace(" ", ""))  # 8 bytes
KEY   = b"023661dd4"                                               # 9 bytes
 
pwd = bytes(j ^ k for j, k in zip(JOKER, KEY))
print("๋ณตํ˜ธํ™” ํ‚ค(pwd):", pwd.decode())      # -> pa55uc0_
 
# ๊ฒ€์ฆ: ๋‹ค์‹œ XOR ํ•ด์„œ JOKER ์™€ ์ผ์น˜ํ•˜๋Š”์ง€
check = bytes(p ^ k for p, k in zip(pwd, KEY))
print("re-XOR      :", check.hex(" "), "==JOKER?", check == JOKER)

solve.py ์‹คํ–‰ โ€” pwd = pa55uc0_, re-XOR ๊ฒฐ๊ณผ๊ฐ€ JOKER์™€ ์ผ์น˜(True), ์ œ์ถœ FLAG = pa55uc0
solve.py ์‹คํ–‰ โ€” pwd = pa55uc0_, re-XOR ๊ฒฐ๊ณผ๊ฐ€ JOKER์™€ ์ผ์น˜(True), ์ œ์ถœ FLAG = pa55uc0

JOKER โŠ• KEY = pa55uc0_. ๋‹ค์‹œ KEY๋กœ XORํ•œ ๊ฐ’์ด ์›๋ž˜ JOKER์™€ ์ •ํ™•ํžˆ ์ผ์น˜(==JOKER? True)ํ•˜๋‹ˆ, ์ด ๋ฌธ์ž์—ด์ด ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์—ฌ๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๋งž๋‹ค. 8๊ธ€์ž๋ผ strncmp 9๋ฐ”์ดํŠธ ๋น„๊ต๋„ ๋„ ์ข…๋‹จ์œผ๋กœ ์ž์—ฐํžˆ ํ†ต๊ณผํ•œ๋‹ค.


๐Ÿ› ์‚ฝ์งˆ โ€” ํ†ต๊ณผ ํ‚ค๋Š” ์ฐพ์•˜๋Š”๋ฐ ํ”Œ๋ž˜๊ทธ๊ฐ€ ์ž๊พธ ์˜ค๋‹ต

์—ฌ๊ธฐ์„œ ํ•œ์ฐธ ํ—ค๋งธ๋‹ค. ํ†ต๊ณผ ๋น„๋ฐ€๋ฒˆํ˜ธ pa55uc0_๋Š” ํ™•์‹คํ•œ๋ฐ, ๋“œ๋ฆผํ•ต์— ์ œ์ถœํ•  ํ”Œ๋ž˜๊ทธ ํ˜•์‹์ด ์˜ˆ์ƒ๊ณผ ๋‹ฌ๋ž๋‹ค.

โ–ถ๐Ÿ› ์‚ฝ์งˆ โ€” DH ๋ž˜ํผ์™€ ์–ธ๋”๋ฐ” ๋•Œ๋ฌธ์— ์˜ค๋‹ต ๋‘ ๋ฒˆ

๋“œ๋ฆผํ•ต ํ”Œ๋ž˜๊ทธ๋Š” ๋ณดํ†ต DH{...} ๊ผด์ด๋ผ, ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ด๋ ‡๊ฒŒ ๋„ฃ์—ˆ๋‹ค.

  • DH{pa55uc0_} โ†’ ์˜ค๋‹ต (Wrong flag)
  • DH{pa55uc0_4} โ†’ ์˜ค๋‹ต (ํ˜น์‹œ 9๋ฒˆ์งธ ๋ฐ”์ดํŠธ๊นŒ์ง€ ํฌํ•จ์ธ๊ฐ€ ์‹ถ์–ด์„œ)

๋ฐ”์ด๋„ˆ๋ฆฌ ๊ฒ€์ฆ์€ ํ†ต๊ณผํ•˜๋Š” ํ‚ค์ธ๋ฐ ์™œ ์˜ค๋‹ต์ผ๊นŒ. ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์•ž 8๋ฐ”์ดํŠธ ์ ‘๋‘์‚ฌ๋งŒ ๋ณด๋‹ˆ, ์ž‘๊ฐ€๊ฐ€ ๋“ฑ๋กํ•œ ํ”Œ๋ž˜๊ทธ ๋ฌธ์ž์—ด์ด ํ˜•์‹๋งŒ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ดค๋‹ค. ๋ฌด์ž‘์ • ๋ณ€ํ˜•์„ ๋ฟŒ๋ฆฌ๋Š” ๋Œ€์‹  ์ฑŒ๋ฆฐ์ง€ ๋Œ“๊ธ€์„ ์ฝ์–ด ๋ณด๋‹ˆ ๋‹ต์ด ์žˆ์—ˆ๋‹ค.

  • "๋‚˜๋งŒ DH ์•ˆ ๋„ฃ์–ด๋„ ํ’€๋ฆฌ๋‚˜?"
  • "ใ…~ ์ด๊ฑฐ ์–ธ๋”๋ฐ” ๋นผ์•ผ ๋˜๋Š”๊ตฌ๋‚˜"
  • "์–ธ๋”๋ฐ”๋ฅผ ๋นผ์•ผ ํ•˜๋ฉด ๋ฌธ์ œ ์„ค๋ช…์— ์ข€ ์จ์ฃผ์„ธ์š”... ๋ฌธ์ œ๋Š” ์•ˆ ์–ด๋ ค์šด๋ฐ ์–ธ๋”๋ฐ” ์•ˆ ๋นผ์„œ ์™œ ์˜ค๋‹ต์ธ๊ฐ€ ํ•œ์ฐธ ๋ดค๋„ค์š”"

์ •๋ฆฌํ•˜๋ฉด ์ด ๋ฌธ์ œ์˜ ๋“ฑ๋ก ํ”Œ๋ž˜๊ทธ๋Š” DH{} ๋ž˜ํผ ์—†์ด, ๋ ์–ธ๋”๋ฐ”๊นŒ์ง€ ๋บ€ ํ˜•ํƒœ์˜€๋‹ค. ์ฆ‰ pa55uc0_ โ†’ pa55uc0.

๋Œ“๊ธ€์ด ์•Œ๋ ค์ค€ ๋Œ€๋กœ DH{}๋ฅผ ๋–ผ๊ณ  ๋ ์–ธ๋”๋ฐ”๋„ ๋บ€ **pa55uc0**๋ฅผ ์ œ์ถœํ•˜๋‹ˆ ์ •๋‹ต ์ฒ˜๋ฆฌ๋๋‹ค(์›Œ๊ฒŒ์ž„ auth API HTTP 201, ๋ฌธ์ œ ์ƒํƒœ is_completed: true).

๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์—ฌ๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ(pa55uc0_)์™€ ์ฑ„์ ์šฉ ํ”Œ๋ž˜๊ทธ(pa55uc0)๊ฐ€ ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ๋‹ค๋ฅธ, ํ˜•์‹ ํ•จ์ •์ด ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.



๐Ÿ“ ๊ฒฐ๋ก 

XOR์€ ๊ฐ€๋ฆฐ ๋ฐฉ๋ฒ•์ด ๊ณง ์—ฌ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

์ •๋‹ต์„ KEY๋กœ XORํ•ด ์ˆจ๊ฒจ ๋†จ๋‹ค๋ฉด, ๊ทธ KEY์™€ ์ˆจ๊ธด ๊ฐ’์ด ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ์•ˆ์— ์žˆ๋Š” ํ•œ XOR ํ•œ ๋ฒˆ์œผ๋กœ ๊ทธ๋Œ€๋กœ ๋ณต์›๋œ๋‹ค. ๋Œ€์นญํ‚ค๋ฅผ ํ‰๋ฌธ ์˜†์— ํ•จ๊ป˜ ๋‘๋Š” ์ˆœ๊ฐ„ ๋‚œ๋…ํ™”๋Š” ์žฅ์‹์ผ ๋ฟ์ด๋‹ค.

์†Œ์Šค๊ฐ€ ์žˆ์–ด๋„ ์‹ค์ œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ํ•œ ๋ฒˆ์€ ํ™•์ธํ•œ๋‹ค.

์ด๋ฒˆ์—” ์†Œ์Šค์™€ ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์ผ์น˜ํ–ˆ์ง€๋งŒ, ์ œ๊ณต ์†Œ์Šค๊ฐ€ ๋‹จ์ˆœํ™”ํŒ์ด๊ฑฐ๋‚˜ ์ƒ์ˆ˜๊ฐ€ ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. strings๋กœ KEYยทJOKER๊ฐ€ ์‹ค์ œ๋กœ ๋ฐ•ํ˜€ ์žˆ๋Š”์ง€, radare2๋กœ ๊ทธ XOR ๋ฃจํ”„๊ฐ€ ์ •๋ง ๋„๋Š”์ง€ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•˜๊ณ  ๋‚˜์„œ์•ผ ๊ณ„์‚ฐ์„ ๋ฏฟ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

๋งˆ์ง€๋ง‰ ๊ด€๋ฌธ์€ ์•”ํ˜ธ๊ฐ€ ์•„๋‹ˆ๋ผ ํ˜•์‹์ด์—ˆ๋‹ค.

ํ‚ค๋ฅผ ๋‹ค ํ’€๊ณ ๋„ DH{} ๋ž˜ํผ์™€ ์–ธ๋”๋ฐ” ๋•Œ๋ฌธ์— ๋‘ ๋ฒˆ ์˜ค๋‹ต์„ ๋ฐ›์•˜๋‹ค. ๊ฒ€์ฆ์„ ํ†ต๊ณผํ•˜๋Š” ํ‚ค์™€ ์ฑ„์ ์šฉ ํ”Œ๋ž˜๊ทธ๊ฐ€ ํ•ญ์ƒ ๊ฐ™์ง€๋Š” ์•Š๋‹ค๋Š” ๊ฒƒ โ€” ๋ง‰ํžˆ๋ฉด ๋ฌธ์ œ ์„ค๋ช…ยท๋Œ“๊ธ€์˜ ํ˜•์‹ ํžŒํŠธ๋ถ€ํ„ฐ ๋‹ค์‹œ ๋ณด๋Š” ๊ฒŒ ๋น ๋ฅด๋‹ค.

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

Comments

๋Œ“๊ธ€

0๊ฐœ

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

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

Related

๊ด€๋ จ ๊ธ€

3๊ฐœ
[๐Ÿฅ‰ Bronze 3] XORยท๋ง์…ˆยท๋น„ํŠธํšŒ์ „์„ ๊ฑฐ๊พธ๋กœ ๋˜์งš๋‹ค โ€” DreamHack nub_rev01 ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 3] XORยท๋ง์…ˆยท๋น„ํŠธํšŒ์ „์„ ๊ฑฐ๊พธ๋กœ ๋˜์งš๋‹ค โ€” DreamHack nub_rev01 ํ’€์ด

์ž…๋ ฅ ํ•œ ๊ธ€์ž์”ฉ XORยท๋ง์…ˆยท๋น„ํŠธํšŒ์ „์„ ๊ฑธ์–ด ์Šคํƒ์— ๋ฐ•ํžŒ ์ƒ์ˆ˜์™€ ๋น„๊ตํ•˜๋Š” ๋ฆฌ๋ฒ„์‹ฑ ํฌ๋ž™๋ฏธ. ์„ธ ์—ฐ์‚ฐ์ด ๋ชจ๋‘ ๊ฐ€์—ญ์ด๋ผ, ๋น„๊ต ๋Œ€์ƒ(target)์—์„œ ์—ญ์ˆœ์œผ๋กœ ํšŒ์ „์„ ํ’€๊ณ  ๋ง์…ˆ์„ ๋นผ๊ณ  XOR๋ฅผ ๋˜๋Œ๋ฆฌ๋ฉด ์ •๋‹ต ์ž…๋ ฅ์ด ๊ทธ๋Œ€๋กœ ๋ณต์›๋œ๋‹ค. ๋ณต์›ํ•œ ๋ฌธ์ž์—ด์„ ๋ฐ”์ด๋„ˆ๋ฆฌ์— ๋„ฃ์–ด Correct๋กœ ํ™•์ธํ–ˆ๋‹ค.
#dreamhack#ctf#reversing+4
2026-07-14#dreamhack +5
[๐Ÿฅ‰ 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 +5
[๐Ÿฅ‰ Bronze 4] ์ž…๋ ฅ์„ XORํ•ด ๋น„๊ตํ•˜๋Š” ๊ฒ€์‚ฌ์‹ ๋’ค์ง‘๊ธฐ โ€” DreamHack Happy New Year! ํ’€์ด
blog

[๐Ÿฅ‰ Bronze 4] ์ž…๋ ฅ์„ XORํ•ด ๋น„๊ตํ•˜๋Š” ๊ฒ€์‚ฌ์‹ ๋’ค์ง‘๊ธฐ โ€” DreamHack Happy New Year! ํ’€์ด

59์ž ์ž…๋ ฅ์„ ์ฝ”๋“œ์— ๋ฐ•ํžŒ ์ƒ์ˆ˜ ๋ฒ„ํผ๋กœ XORํ•œ ๋’ค ๊ณ ์ • ๋ฌธ์ž์—ด๊ณผ strcmpํ•˜๋Š” ๋ฆฌ๋ฒ„์‹ฑ ๋ฌธ์ œ. ๋น„๊ต์‹์„ ๋’ค์ง‘์œผ๋ฉด ์ •๋‹ต ์ž…๋ ฅ = buf ^ s2 ์ด๊ณ , ๊ทธ ์ž…๋ ฅ์ด ๊ทธ๋Œ€๋กœ ํ”Œ๋ž˜๊ทธ ๋ณธ๋ฌธ์ด ๋œ๋‹ค. ์ƒ์ˆ˜ ๋ฒ„ํผ๋ฅผ ์žฌ๊ตฌ์„ฑํ•ด XOR ํ•œ ๋ฒˆ์œผ๋กœ ์ƒˆํ•ด ์ธ์‚ฌ ๋ฌธ์žฅ์„ ๋ณต์›ํ–ˆ๋‹ค.
#dreamhack#ctf#reversing+3
2026-07-13#dreamhack +5