CTF
[Swing CTF] Reversing-EasyXOR
오호츠크해 기단
2022. 11. 25. 23:47
728x90
EasyXOR
문제 링크: http://swingctf.hspace.io:8080/
<문제 코드>
flag = "SWING{?????????????????}"
cipher = []
for i in range(0, len(flag)):
cipher.append(ord(flag[i]) ^ i)
print(cipher) # [83, 86, 75, 77, 67, 126, 126, 55, 122, 86, 114, 59, 126, 82, 119, 63, 101, 78, 117, 32, 96, 74, 98, 127, 43, 70, 124, 119, 40, 122, 63, 62, 93]
ord라는 함수를 서치해본 결과
ord()는 하나의 문자를 인자로 받고 해당 문자에 해당하는 유니코드 정수를 반환하는 함수이고,
chr()는 하나의 정수를 인자로 받고 해당 정수에 해당하는 유니코드 문자를 반환한다는 것을 알았다.
현재 주석으로 처리된 플래그 힌트는 정수이므로 ord() 함수가 아닌 chr()함수를 사용해야 한다.
ord -> chr 로 변경 후 실행을 하면 아래와 같은 오류문이 나온다.
TypeError: unsupported operand type(s) for ^: 'str' and 'int'
=타입에러: ^(XOR) 연산에 지원하지 않는 피연산자
아래 부분에서 chr(flag[i])로 flag[i]를 'str'로 변형했지만 i와 XOR (^ i)을 하라고 했기 때문에 오류가 난 것 같다.
괄호를 수정해준다.
flag = [83, 86, 75, 77, 67, 126, 126, 55, 122, 86, 114, 59, 126, 82, 119, 63, 101, 78, 117, 32, 96, 74, 98, 127, 43, 70, 124, 119, 40, 122, 63, 62, 93]
cipher = []
for i in range(0, len(flag)):
cipher.append(chr(flag[i] ^ i))
print(cipher)
플래그가 잘 출력된다!
SWING{x0r_x0r_y0u_g3t_th3_fl4g!!}