You either know, XOR you don't

2023. 2. 1. 13:14·Wargame/Cryptohack
728x90
반응형

1. intro

2. code 및 분석

2.1.  code

N/A

 

2.2. 분석

이제부터 시작인가보다.

힌트로는 역시 flag 형식을 생각해보라고 한다.

 

우선 해당 문자열을 byte 값으로 바꾸고, xor로 0부터 0xff까지 연산하면서 첫 문자가 c 일 때를 출력해보았다.

e = bytes.fromhex('0e0b213f26041e480b26217f27342e175d0e070a3c5b103e2526217f27342e175d0e077e263451150104')
d = ''

for i in range(0xff):
    for j in range(len(e)):
        d += chr(e[j] ^ i)
    if d[0] == 'c':
        print(hex(i), d)
    d = ''

 

┌──(kali㉿kali)-[~/Downloads]
└─$ python solve.py
0x6d cfLRKis%fKLJYCz0cjgQ6}SHKLJYCz0cjKY<xli

flag가 crypto{???} 의 형식이기에 알 수 있는 부분은

 

c = c
r = f
y = L
p = R
t = K
o = i

인데, 뭔가 이상하다.

왜냐하면 가장 마지막 값이 i 이기 때문에 이는 }가 되어야하는데, 앞에 동일한 i의 위치는 o 이기 때문이다.

 

다시 생각해보자.

첫 바이트와 모르는 값 x를 xor 하면 "c"가 나와야한다.

이를 공식으로 풀어보면

e[0] ^ x = "c"

가 된다.

이를 다시 한번 표현하면

e[0] ^ x ^ x = "c" ^ x

e[0] = "c" ^ x

e[0] ^ "c" = "c" ^ x ^ "c"

e[0] ^ "c" = x

가 된다.

이런식으로 계산하면 crypto{ 까지는 구할 수 있을 것 같다.

 

이걸 한번 해봤더니 아래와 같았다.

e = bytes.fromhex('0e0b213f26041e480b26217f27342e175d0e070a3c5b103e2526217f27342e175d0e077e263451150104')
ch = b'crypto{'
d = ''
i = 0

while i <= len(e) - 1:
    for j in range(len(ch)):
        d += chr(e[i]^ch[j])
        i += 1

print(d)

 

┌──(kali㉿kali)-[~/Downloads]
└─$ python solve.py
myXORke+y_Q
           HOMe$~seG8bGURNDFWg)a|TM!an

 

일단 myXORke 까지는 확실한데...

그 다음은 조금 애매하지만, myXORkey로 한번 질러보자.

 

3. exploit

e = bytes.fromhex('0e0b213f26041e480b26217f27342e175d0e070a3c5b103e2526217f27342e175d0e077e263451150104')
key = b'myXORkey'
d = ''
i = 0

while i < len(e):
    for j in range(len(key)):
        d += chr(e[i]^key[j])
        i += 1
        if i >= len(e):
            break
print(d)

 

┌──(kali㉿kali)-[~/Downloads]
└─$ python solve.py
crypto{1f_y0u_Kn0w_En0uGH_y0u_Kn0w_1t_4ll}
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Wargame > Cryptohack' 카테고리의 다른 글

Extended GCD  (0) 2023.02.02
Greatest Common Divisor  (2) 2023.02.01
Favourite byte  (0) 2023.01.31
XOR properties  (0) 2023.01.31
XOR Starter  (0) 2023.01.31
'Wargame/Cryptohack' 카테고리의 다른 글
  • Extended GCD
  • Greatest Common Divisor
  • Favourite byte
  • XOR properties
wyv3rn
wyv3rn
아저씨의 흔한 취미. wyv3rn#1249
  • wyv3rn
    think storage
    wyv3rn
  • 전체
    오늘
    어제
    • 분류 전체보기 (500) N
      • To do list (7) N
        • Doing (1) N
        • Complete (6)
      • Diary (35)
      • Tips & theory (77)
      • Kernel Exploit (27) N
        • Theory (15)
        • Exercise (5) N
      • Wargame (313)
        • pwn.college (34)
        • Dreamhack (148)
        • pwnable.kr (15)
        • Lord of Sqlinjection (3)
        • Cryptohack (20)
        • Root me (27)
        • CodeEngn (4)
        • Exploit Education (22)
        • ROP Emporium (8)
        • H4C (10)
        • Hackerchool (22)
      • CTF (41) N
        • Solved (39) N
        • Unsolved (2)
      • Script (0)
  • 블로그 메뉴

    • 홈
    • 방명록
  • 링크

  • 공지사항

    • PWN wargame 모음 (및 느낀점)
    • 비공개 글들에 대해.
    • 뭐라도 하나 얻어가시길...
  • 인기 글

  • 태그

    Format String Bug
    FSB
    phoenix
    docker
    dreamhack
    ROOT ME
    tcache
    rop
    root
    la ctf
    root-me
    Buffer Overflow
    _IO_FILE
    exploit education
    heap
    64bit
    32bit
    pwnable.kr
    CANARY
    vtable
    libc
    x86
    RTL
    pwntools
    BOF
    lob
    cryptohack
    Me
    hackerschool
    x64
  • 최근 댓글

  • 최근 글

  • 250x250
    반응형
  • hELLO· Designed By정상우.v4.10.3
wyv3rn
You either know, XOR you don't
상단으로

티스토리툴바