학사 나부랭이

CCE2021 Write up - rox 본문

自習/입해킹

CCE2021 Write up - rox

태양왕 해킹 (14세) 2021. 9. 27. 09:15

암호화 동작 코드가 다 나와있는 문제예요.

key="???????"

flag="cce2021{??????????????????????????????????}"

def encrypt(plain):
	res=""
	for _ in range(len(plain)):
		res+=chr(ord(key[_%7])^ord(plain[_]))
	return res
open("enc","wb").write(encrypt(flag).encode("base64"))

암호화 소스 코드.py

Bg0PXUlMTx46AgYKIRcWMR4HHCENDAMaAxwNCjoBBAomPRELCRgODQ1fGA==

enc 파일 (암호문)

일단 구동 방식부터 보면

  1. enc 파일을 열어서,
  2. flag(cce2021{xxx})를 encrypt 함수로 암호화하고,
  3. 그걸 또 base64로 다시 암호화 한 후에,
  4. enc 파일에 쓰네요.

 

중요한 건 encrypt 함수인데 안을 보면

  1. _(이하 tmp)는 0에서 plain(flag) 문자열의 길이까지 1씩 증가
  2. key의 (tmp에 7로 나눈 나머지)번 째 문자를 ord 함수에 넣어서 숫자로 바꾸고('a' => 97)
  3. plain의 tmp번 째 문자도 숫자로 바꾸고
  4. 2와 3을 xor연산하고
  5. 4를 chr 함수로 문자화 한 뒤에 res에 붙이고
  6. plain 문자열이 끝나면 res를 리턴

이런 코드예요. 여기서 간단한 xor 설명!!!

입력 0011 (3)
xor 1011 (15)
결과 1000 (8)

 2진수 기준으로 피연산자끼리 동일하면 0, 같지 않으면 1을 출력해요. 그리고 X ^ Y = Z일 때, X ^ Z = Y도 성립하죠.

그러니까

  1. '평문 ^ 키 = 암호문' 일 때,
  2. '평문 ^ 암호문 = 키' 로 키를 구하고
  3. '암호문 ^ 키 = 평문' 으로 평문을 구할 수 있죠.

※파이썬 3 이상부터 .encode('base64')가 동작하지 않으니 2.x로 작동시켜야해요!!!

#평문이 c, c, e, 2, 0, 2, 1, { 까지 알려져 있는데 키가 7글자라 다행이네요.
key="???????"

flag="cce2021{??????????????????????????????????}"

def encrypt(plain):
	res=""
	for _ in range(len(plain)):
		res+=chr(ord(key[_%7])^ord(plain[_]))
	return res
    

def test(text):
	print(text)
	tkey = ""
	tplain = "cce2021"
    #키 길이 만큼
	for i in range(0, len):
    	
        #모든 아스키 코드(j)를 대입해서
		for j in range(0, 126):
        	
            #j와 평문을 xor연산한 게 암호문과 일치하다면?
			if(chr(j^ord(tplain[i]))==text[i]):
            	#j는 키문자 입니당
				tkey += chr(j)
				break
	print(tkey)
	return tkey

#먼저 base64로 디코드해줘요.
cry = open('enc', 'rb').readline().decode('base64')
#그리고 구해져있는 plain(cce2021)의 일부분과 암호문을 이용해 키를 구해요.
key = test(cry)
#마지막으로 암호화 함수를 그대로 재이용해서 복호화시켜요.
print(encrypt(cry))

 

'自習 > 입해킹' 카테고리의 다른 글

'For you bro' SCAM  (0) 2022.02.08
CCE2021 Write up - ptmd  (0) 2021.09.27
WannaCryptor ~SMB vulnerability  (0) 2021.06.30
ANOM ~Operation Trojan Sheild  (0) 2021.06.26
Comments