xor 연산은 교환법칙, 결합법칙을 만족하고, 항등원은 0, 역원은 자기 자신이다.
이 성질들을 이용하여 아래의 식들에서 flag를 찾는 문제이다.
hex로 주어졌기 때문에 byte로 변환시켜 xor 연산해주면 될 것 같다.
bytes.fromhex 함수로 변환 후 xor 함수로 연산하면 되는 간단한 문제이다.
from pwn import *
KEY1 = 'a6c8b6733c9b22de7bc0253266a3867df55acde8635e19c73313'
KEY2_KEY1 = '37dcb292030faa90d07eec17e3b1c6d8daf94c35d4c9191a5e1e'
KEY2_KEY3 = 'c1545756687e7573db23aa1c3452a098b71a7fbf0fddddde5fc1'
FLAG_KEY1_KEY3_KEY2 = '04ee9855208a2cd59091d04767ae47963170d1660df7f56f5faf'
key1 = bytes.fromhex(KEY1)
key2_1 = bytes.fromhex(KEY2_KEY1)
key2_3 = bytes.fromhex(KEY2_KEY3)
flag_key1_2_3 = bytes.fromhex(FLAG_KEY1_KEY3_KEY2)
key2 = xor(key2_1, key1)
key3 = xor(key2_3, key2)
flag = xor(flag_key1_2_3, key1, key2, key3)
print(flag)
FLAG = crypto{x0r_i5_ass0c1at1v3}