1. 문제 설명 2. 문제 풀이 1. challenge.py 분석 challenge.py 코드를 살펴 보면, 초기 벡터(IV)와 키가 동일하며, CBC 모드를 사용하고 있음을 알 수 있다. 만약에 0으로 채워진 한 블록을 CBC 모드로 암호화한다면, $E_{K}(P+IV) = E_{K}(0+K) = E_{K}(K)$ 따라서 $E_{K}(K)$를 구할 수 있게 된다. 그리고 총 두 개의 블록을 복호화한다고 가정하면, CBC 모드의 마지막 암호문 블록을 복호화하는 과정은 아래와 같다. $P_{2} = D_{K}(C_{2}) + C_{1}$ 이때 $C_{1}$을 0으로, $C_{2}$를 $E_{K}(K)$라고 한다면, $P_{2} = K$가 된다. 2. 복호화 코드 작성 from pwn import * fro..
1. 문제 설명 2. 문제 풀이 1. 먼저 문제 파일의 압축을 푼다. 2. rot128.py의 코드를 확인한다. encfile이 어떻게 암호화됐는지 살펴보기 위해 rot128.py 코드를 확인해야 한다. 코드에 hex_list라는 게 먼저 나오는데, 이게 어떤 것인지 살펴봤다. 0부터 1씩 증가하는 hex 리스트인 것을 볼 수 있다. plain_list는 평문이 hex로 파싱된 list이다. 그리고 저 flag.png가 우리가 복호화해야 할 평문의 원본이다. 아래 코드에서 암호문이 카이사르 암호라는 걸 알 수 있다. 카이사르 암호는 간단한 치환암호 중 하나다. 평문의 각 단위를 일정한 거리만큼 밀어서 다른 문자로 치환하는 방식이다. 왜 카이사르 암호냐면, hex로 파싱된 평문을 순회하면서 hex_list..
1. 문제 설명 2. 문제 풀이 1. 접속 정보를 확인하여 타겟 Host와 포트 번호를 알아낸다. 2. 리눅스의 netcat (nc) 툴을 사용하여 tcp 연결을 시도한다. netcat host3.dreamhack.games 23229 3. DH{...} 형식의 플래그 응답을 확인하고 정답을 입력한다.