문제 설명
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글자씩 끊어서 바이트로 복원해 준 뒤에 같은 연산을 한번 더 적용해주자.


귀요미가 생성되었네요!
사실상 받아쓰기 문제였던,,
'모의해킹 > 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 |