1. Description
Reflections? Rotations? Translations? This is starting to sound like geometry...
Author: treap_teap
2. Write up
BBomb 문제들은 하나의 바이너리로 푸는 문제이다. 따라서 이전 BBomb -Phase 1에서 다운 받은 파일로 문제를 푼다
바이너리는 단계별로 문제를 풀도록 설정되있고 각 단계를 풀 때 이전 단계를 풀지 않아도 풀 수 있도록 구성되있다.
각 단계마다 defuse() 함수가 존재하는데 이는 각 단계별로 정답을 체크해주는 함수였다. 모든 단계의 함수의 반환값이 1인 경우 success() 함수가 실행되면서 정답임을 알려주는 문구를 출력한다. 따라서 단계별 함수 내에서 반환값이 1이 되는 조건을 만족 시켜줘야한다.
phase2() 함수는 아래와 같이 동작한다.
•
메모리를 동적으로 할당한 뒤 사용자한테 문자열을 입력 받음
•
"Dk52m6WZw@s6w0dIZh@2m5a" 문자열과 "입력받은 문자열 ^ 5" 비교하여 문자 하나라도 일치하지 않으면 0 반환
•
입력받은 문자열의 길이가 "Dk52m6WZw@s6w0dIZh@2m5a"와 일치하지 않으면 0 반환
xor 특성상 같은 숫자를 xor 연산하면 원상태로 돌아온다. 따라서 "Dk52m6WZw@s6w0dIZh@2m5a" 문자열에 각 자리를 5와 xor 연산 시킨다.
s = "Dk52m6WZw@s6w0dIZh@2m5a"
result = ""
for i in s:
result += chr(ord(i) ^ 5)
print (result)
# An07h3R_rEv3r5aL_mE7h0d
Python
복사
3. FLAG
DawgCTF{An07h3R_rEv3r5aL_mE7h0d}