CTF

[SEE CTF] Crypto-BabyRC4

오호츠크해 기단 2023. 6. 21. 18:53
728x90

BabyRC4

 

문제 파일을 다운로드하면 chall.py 파이썬 파일 하나가 보인다.

from Crypto.Cipher import ARC4
from os import urandom
key = urandom(16) #urandom은 원하는 길이(byte단위)의 unsigned 수치값을 만들어줌
flag = b'SEE{?????????????????????????????????}'[::-1] #b'는 바이트 문자열

def enc(ptxt):
    cipher = ARC4.new(key)
    return cipher.encrypt(ptxt)

print(f"c0 = bytes.fromhex('{enc(flag).hex()}')")
print(f"c1 = bytes.fromhex('{enc(b'a'*36).hex()}')")

#bytes.fromhex는 hex 숫자에 '\x'를 붙여 bytes 형식으로 변형
"""
c0 = bytes.fromhex('b99665ef4329b168cc1d672dd51081b719e640286e1b0fb124403cb59ddb3cc74bda4fd85dfc')
c1 = bytes.fromhex('a5c237b6102db668ce467579c702d5af4bec7e7d4c0831e3707438a6a3c818d019d555fc')
"""

 

 

우선 문제에 있는 크립토 모듈을 불러오기 위해서 크립토 모듈을 설치해준다.

pip install pycryptodome

설치 완료^^

 

 

def enc(ptxt):
    cipher = ARC4.new(key)
    return cipher.encrypt(ptxt)

def dec(ptxt):
    cipher = ARC4.new(key)
    return cipher.decrypt(ptxt)

print(f"c0 = bytes.fromhex('{enc(flag).hex()}')")
print(f"c0 = ('{dec(enc(flag)).hex()}')")

문제에 RC4를 해독하라고 나와있어서..그냥 단순하게 dec코드를 작성한 후 출력해보았다.

하지만....이건 그냥 flag를 암호화 한 후 다시 복호화 한 것이기 때문에 dec한 값은 의미가 없는 값이었다.

 

 

 

 

 

다시 코드의 흐름을 살펴봤다. 밑에 주석처리된 c0과 c1, 그리고 print에도 c0과 c1이 있다는 것이다. 이 값들을 활용해서 flag를 찾으면 될 것 같다.

 

 

RC4는 단순히 주어진 일반 텍스트로 xor에 대한 숫자 스트림을 생성한다.

 

 

 

strxor(aa, c1)

RC4(Crypto.Cipher에서 ARC4라고 함)에 사용된 키는 enc()에서 일정하므로 처음 36자에 사용된 키스트림을 얻기 위해 c1과 b'a'*36(문자 a 36개를 비트로)을 xor한다.

 

 

#KeyStream은 처음 36자에 사용된 키스트림
strxor(KeyStream, c0[:len(KeyStream)]) + b'ES'

그 후에 키스트림을 c0으로 xor하고 시작 두 문자(flag는 SEE{ ~~이므로 b'ES')를 추가한다.

 

 

 

 

 

 

전체코드

from Crypto.Util.strxor import strxor

c0 = bytes.fromhex('b99665ef4329b168cc1d672dd51081b719e640286e1b0fb124403cb59ddb3cc74bda4fd85dfc')
c1 = bytes.fromhex('a5c237b6102db668ce467579c702d5af4bec7e7d4c0831e3707438a6a3c818d019d555fc')
aa = b'a'*36

KeyStream = strxor(aa, c1)
sol = strxor(KeyStream, c0[:len(KeyStream)]) + b'ES'
print(sol[::-1])

 

SEE{n3vEr_reU53_rC4_k3y5ss5s:cafe2835}

 

 

SEE{n3vEr_reU53_rC4_k3y5ss5s:cafe2835