Ancient Encodings
1 minuto de lectura
Se nos proporciona el código fuente en Python para cifrar la flag:
from Crypto.Util.number import bytes_to_long
from base64 import b64encode
from secret import FLAG
def encode(message):
return hex(bytes_to_long(b64encode(message)))
def main():
encoded_flag = encode(FLAG)
with open("output.txt", "w") as f:
f.write(encoded_flag)
if __name__ == "__main__":
main()
Y también tenemos la salida del script:
0x53465243657a51784d56383361444e664d32356a4d475178626a6c664e44497a5832677a4d6a4e664e7a42664e5463306558303d
Análisis de código fuente
El programa coge la flag y usa encode
:
def encode(message):
return hex(bytes_to_long(b64encode(message)))
Como se puede ver, la flag se convierte a codificación Base64, luego a un número decimal y finalmente a formato hexadecimal.
Entonces, solo necesitamos transformar la cadena hexadecimal en bytes y luego decodificar el resultado en Base64.
Flag
Y ya está:
$ echo 53465243657a51784d56383361444e664d32356a4d475178626a6c664e44497a5832677a4d6a4e664e7a42664e5463306558303d | xxd -r -p
SFRCezQxMV83aDNfM25jMGQxbjlfNDIzX2gzMjNfNzBfNTc0eX0=
$ echo 53465243657a51784d56383361444e664d32356a4d475178626a6c664e44497a5832677a4d6a4e664e7a42664e5463306558303d | xxd -r -p | base64 -d
HTB{411_7h3_3nc0d1n9_423_h323_70_574y}