Read code first, challenge.py
#!/usr/bin/python3
import os
flag = open('flag.txt', 'r').read().strip().encode()
class XOR:
def __init__(self):
self.key = os.urandom(4)
def encrypt(self, data: bytes) -> bytes:
xored = b''
for i in range(len(data)):
xored += bytes([data[i] ^ self.key[i % len(self.key)]])
return xored
def decrypt(self, data: bytes) -> bytes:
return self.encrypt(data)
def main():
global flag
crypto = XOR()
print ('Flag:', crypto.encrypt(flag).hex())
if __name__ == '__main__':
main()
Flag: 134af6e1297bc4a96f6a87fe046684e8047084ee046d84c5282dd7ef292dc9
If flag starts with HTB{ , then we can figure out the key = 5b1eb49a by:
$ echo -n HTB{ | hex
4854427b
134af6e1 xor 5b1eb49a = 4854427b = HTB{
#getflag.py
#!/usr/bin/python3
import os
flag = open('output.txt', 'r').read().strip()
flag=bytes.fromhex(flag)
class XOR:
def __init__(self):
#self.key = os.urandom(4)
self.key = b'\x5b\x1e\xb4\x9a'
def encrypt(self, data: bytes) -> bytes:
xored = b''
for i in range(len(data)):
xored += bytes([data[i] ^ self.key[i % len(self.key)]])
return xored
def decrypt(self, data: bytes) -> bytes:
return self.encrypt(data)
def main():
global flag
crypto = XOR()
print('Key: ', crypto.key)
print('Flag:', crypto.encrypt(flag))
print ('Flag:', crypto.encrypt(flag).decode('utf-8') )
if __name__ == '__main__':
main()
$ python3 getflag.py
Key: b'[\x1e\xb4\x9a'
Flag: b'HTB{rep34t3d_x0r_n0t_s0_s3cur3}'
Flag: HTB{rep34t3d_x0r_n0t_s0_s3cur3}
#getflag.py
s = '134af6e1297bc4a96f6a87fe046684e8047084ee046d84c5282dd7ef292dc9'
s = bytes.fromhex(s)
# s = b'\x13J\xf6\xe1){\xc4\xa9oj\x87\xfe\x04f\x84\xe8\x04p\x84\xee\x04m\x84\xc5(-\xd7\xef)-\xc9'
m = b'HTB{'
from itertools import cycle
k = [x ^ y for x, y in zip(s[:4], m)]
# k=[91, 30, 180, 154]
m = [x ^ y for x, y in zip(s, cycle(k))]
print(bytes(m))
#b'HTB{rep34t3d_x0r_n0t_s0_s3cur3}'