CTF #nullcon 2012: Crypto 2

nullcon1.jpg

En esta prueba nos daban un enlace (http://www.nullcon.net//challenge/data/shhhkoinahihai). Cuando abrías dicho enlace no se veía nada, todo blanco y lo mismo si miramos el código fuente de la página.

Nos bajamos el fichero, lo abrimos con un editor de textos y nada, todo blanco, pero sí que te podías mover por el contenido del fichero. Pero si lo abrimos con un editor hexadecimal:

Selection_001.png

Vemos que lo que contiene son el carácter 20h (espacio) y el 09h (tabulador). Mi primera idea fue convertir los tabuladores en guiones y los espacios en puntos, para así tener algún tipo de código morse, pero no me llevó a ningún sitio.

Después de cavilar un rato se me ocurrió convertir esos caracteres a 0 y 1 y así tener un texto en binario. Cuando lo hice, comprobé que la longitud del mismo era múltiplo de 8, lo que tenía buena pinta. Así que me escribí el script que pongo a continuación, dónde convierto el tabulador en 0 y el espacio en 1 y cada 8 bits imprimo el carácter ASCII correspondiente:

#!/usr/bin/env ruby

f = File.open('shhhkoinahihai','r')
bin_char = ''
f.each_byte do |b|
        if b == 9
                bin_char += '0'
        else
                bin_char += '1'
        end
        if bin_char.length == 8
                print bin_char.to_i(2).chr
                bin_char = ''
        end
end
puts
f.close

Y si ejecutamos dicho script el resultado que obtenemos es nuestro flag:

Error Message: Your Password Must Be at Least 18770 Characters and Cannot Repeat Any of Your Previous 30689 Passwords - MS KB 276304