Código fuente#
import string
from secret import MSG
def encryption(msg):
ct = []
for char in msg:
ct.append((123 * char + 18) % 256)
return bytes(ct)
ct = encryption(MSG)
f = open('./msg.enc','w')
f.write(ct.hex())
f.close()
Explotación#
Lo que esta haciendo el programa es coger la flag y coger carácter por carácter convertirlo a la forma de int de ASCII y hacerle una serie de operaciones matemáticas para guardarlo como hexadecimal.
Según la matemática modular (debido a que aplicamos un modulo) para revertir la multiplicación tenemos que multiplicar por el inverso del modulo del numero multiplicado y el modulo aplicado.
pairs = []
with open('msg.enc', 'r') as file:
while True:
chars = file.read(2)
if not chars:
break
chars = int(chars, 16)
pairs.append(((chars-18) * pow(123, -1, 256)) % 256)
pairs = "".join(map(chr, pairs))
print(pairs)
