CTF/SWING CTF 2022
[Rev] EasyXOR
coderrim
2022. 11. 13. 06:16
파이썬 코드를 해석해보자.
0부터 flag의 길이, 즉 24까지 반복한다.
무엇을?
append 즉 리스트의 끝에 추가하는 것을.
ord는 문자를 넣으면 유니코드 정수를 반환한다.
flag의 i번째 배열에 i승을 한 값을 집어넣었을 때...?
게다가 문제에는 XOR 연산에 대해 알아보자고 적혀있다.
XOR 연산은 같으면 0을 다르면 1을 출력하는 연산 아닌가?
저 ^ 모양이 i 제곱이 아니라 XOR 연산을 나타내는 것이었을까?
유니코드로 저 주석에 달려있는 값이 나오게 하려고 chr로 다 문자로 바꿔서 넣어봤는데도 안된다.
SWING{svkmc~~7zvr;~rw?enu `jb+f|w(p?>]} 라고 넣었었는데.
저 아래 출력된 값을 변환해서 넣어도 안된다.
SWING{svkmc~9876543210/.-,+*)j}
Write-up을 참고해보자.
print(cipher) 하면 리스트가 연산 결과로 나오는데
xor 연산 특징을 이용해 역연산을 하면 원본값을 구할 수 있다.
enc = [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]
for i in range(0, len(enc)):
print(chr(enc[i] ^ i), end="")
SWING{x0r_x0r_y0u_g3t_th3_fl4g!!}