Ir al contenido

BabyEncryption

Autor
Santiago Chavarro

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)