본문 바로가기

CTF/SWING CTF 2022

[Rev] EasyXOR

easyxor.py
0.00MB

파이썬 코드를 해석해보자.

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!!}

'CTF > SWING CTF 2022' 카테고리의 다른 글

[Rev] Snail  (0) 2022.12.04
[Rev] Ransomware  (0) 2022.12.03
[Rev] OPEN THE DOOR  (0) 2022.12.03
[Misc] QR Discovery  (0) 2022.11.18
[Pwn] SimpleBOF  (0) 2022.11.18