Tags: picoctf2022 

Rating:

Nos entregan la descripción del reto:

DESCRIPCION:

A new modular challenge!
Download the message here.
Take each number mod 41 and find the modular inverse for the result. Then map to the following character set: 1-26 are the alphabet, 27-36 are the decimal digits, and 37 is an underscore.
Wrap your decrypted message in the picoCTF flag format (i.e. picoCTF{decrypted_message}.

Al igual que en el reto anterior, nos entregan un fichero que contiene un mensaje, al abrirlo vemos que son una serie de numeros:

145 126 356 272 98 378 395 352 392 215 446 168 180 359 51 190 404 209 185 115 363 431 103
Como hemos visto en el reto anterior, debemos seguir las instrucciones que nos dan, para poder resolver el reto:

Debemos tomar cada numero entregado y calcular el inverso modular mod41
Mapear cada inverso modular obtenido en un diccionario que se compone:
a. Las posiciones 1-26 son las letras del alfabeto en mayusculas.
b. Las posiciones 27-36 son decimales.
c. La posicion 37 es el simbolo "_"
Tomamos el diccionario que obtuvimos en el reto anterior y lo reutilizamos (son los mismos parametros):
“ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_”

Python3 tiene una funcion que nos puede ayudar con este calculo del inverso modular, asi que lo utilizaremos en el script que vamos a contruir como solucion. Como se explico en el reto anterior, el script realizara los calculos y los va a adicionando a un array de acuerdo al valor correspondiente del diccionario.

Nuestro script para encontrar la flag es:

#!/usr/bin/env python3
#creamos un array con los numeros que nos dan en el mensaje
a = [145,126,356,272,98,378,395,352,392,215,446,168,180,359,51,190,404,209,185,115,363,431,103]
#Creamos un array vacio, que nos servira para guardar los resultados de la flag.
d = []
m = 41

alph = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_"

for c in a:
#Calculamos el modulo inverso
b = pow(c, -1, m)
#Guardamos los resultado en otro array
d += alph[b-1]

#Imprimimos la flag.
print("picoCTF{"+''.join(d)+"}")
Ejecutando el script obtenemos la flag:

┌──(root㉿kali)-[~/picoCTF]
└─$ python3 calculate-inverse-module.py
picoCTF{1NV3R53LY_H4RD_374BE7BB}

Original writeup (https://ch4m17ux.github.io/2022/03/30/picoCTF-2022-Crypto.html).