A raíz de mi incursión en los juegos ctf, es frecuente encontrarse en los primeros niveles con juegos de criptografía clásica. Como soy un vago, prefiero trabajar de más una vez para luego no tener que trabajar nunca más. De ahí nace FAT, Frequency Analysis Tool, no hay nada que me joda más que tener que contar letritas y parejas o trios de letras para poder descifrar un texto.
Antes de nada, ¿para qué se utiliza el análisis de frecuencias?
En la criptografía clásica se utilizaba un cifrado de sustitución en el que a cada letra le correspondía una letra del alfabeto. La manera de criptoanalizar esto es mediante el análisis de frecuencias.
Una vez con las letras contadas se utilizan las letras más repetidas en el idioma que estemos descifrando y con un poco instinto se van descifrando una a una las letras. No es una ciencia exacta pero en general si se identifica una palabra (por ejemplo en castellano es muy común que una palabra de 3 letras aisladas sea "que") el resto se saca bastante fácil.
Con estas premisas y con ganas de aprender phyton me puse a escribir un script en python que me hiciera los deberes aburridos de contar palabras. En el script, uso diccionarios alprincipio, luego listas al final, la razón de esto era porque una de las motivaciones era aprender por lo que quise tocar varias cositas.
Ahora mismo está para descifrar el alfabeto latino sin 'ñ' ni símbolos "raros", pero con una pequeña modificación cualquiera puede perfectamente adaptarlo a sus necesidades, esto no pretende ser una solución universal, es una pequeña herramienta que agilice el análisis en un ctf y como tal se debe entender.
Para usarlo simplemente:
python -t "texto a descifrar"
python -t fichero
Código @ pastebin.com