본문으로 바로가기

ROT128 문제풀이

category 모의해킹/Dreamhack Wargame 2025. 10. 22. 16:05
728x90

문제 설명

 

rot128.py는 flag.png 파일을 암호화하여 encfile로 저장하는 프로그램의 소스 코드입니다. (풀이자가 프로그램을 직접 실행할 수는 없습니다.)

주어진 encfile을 복호화하여 flag 파일 내용을 알아낸 뒤, flag.png에서 플래그를 획득하세요!

플래그의 형식은 DH{...} 입니다.


문제 풀이

 

암호화하는 방식이 코드에 전부 적혀있으니, 나는 반대로 수행하여 복호화하면 된다.

 

 

암호화를 어떻게 하는지 뜯어보자.

 

1. 0~255의 모든 값을 2자리 16진수 대문자 문자열로 만든 리스트를 생성해 hex_list에 저장한다.

2. flag.png를 바이너리 파일로 열고 읽어서 plain_s에 저장한다.

3. plain_s에 저장된 바이너리 코드들을 2자리 16진수 대문자 문자열로 만들어 plain_list에 저장한다.

4. plain_list의 길이와 같은 enc_list를 만든다.

5. plain_list의 각 요소들을 hex_list와 비교하여 같은 인덱스 값을 찾아낸다. 그 인덱스에 128을 더하고 256으로 모듈로 연산한 위치의 16진수 문자열로 치환한다. 이 연산은 자기 역원이여서 같은 연산을 한 번 더 하면 제자리로 돌아온다.

6. 2자리 16진수 문자열들의 리스트를 구분자 없이 이어붙인 하나의 긴 문자열로 만든다.

 

암호화가 자기역원인 이유는, 수식을 써보면 간단하다.

h(x) = (x + 128) mod 256

h(h(x)) = ((x + 128) mod 256) +128) mod 256

h(h(x)) = (x + 128 + 128) mod 256

h(h(x)) = (x + 256) mod 256 = x

 

이렇다면 결국, 복호화를 하려면 수식을 한번 더 적용해주면 된다는 말이다.

2글자씩 끊어서 바이트로 복원해 준 뒤에 같은 연산을 한번 더 적용해주자.

 

파일 안열어놓고 실행하고 있었으면서 png 안생긴다고 잔뜩 열내던 저였습니다

 

 

귀요미가 생성되었네요!

사실상 받아쓰기 문제였던,,

'모의해킹 > Dreamhack Wargame' 카테고리의 다른 글

xss-1 문제풀이  (0) 2025.10.27
session-basic 문제풀이  (0) 2025.10.24
baby-bof 문제풀이  (0) 2025.06.19
php7cmp4re 문제 풀이  (1) 2025.06.17
session 문제풀이  (2) 2025.06.04