Ikasten.IO
Learning, Aprendiendo

HackIt! 2013. Level 5. Cifrado casero 7 agosto, 2013

crackle Nos pasan un archivo .rar con la contraseña del nivel 5 cifrada. Descomprimiendo el rar nos encontramos con una estructura de archivos como la siguiente:

Los .class los podemos intentar descompilar con jd-gui para ver qué hacen. Por ejemplo, App.class descompilado tiene esta pinta:

La clase FileClassLoader carga a partir del directorio pasado como primer parámetro las clases compiladas pasadas en el array de Strings (en el ejemplo PasswordReveal, TestClass1 y TestClass2) y las cifra con la clase CryptUtil (a la que pasa como parámetro una semilla que recoge del atributo estático PasswordReveal.daKey), dejando el resultado en un fichero con el mismo nombre y extensión .clazz.

Los TestClass1 y TestClass2 nos los dan como ejemplo, pero casualmente falta PasswordReveal.class 🙂 que parece ser que es la clase que contiene el password que nos interesa. Lo que sí tenemos es la clase cifrada PasswordReveal.clazz.

Si pudiéramos descifrarla, estaríamos muy cerca de pasarnos el nivel… De hecho, tenemos el .class de CryptUtil. Si lo descompilamos, encontraremos el método de cifrado (ojo, applyCript es el código descompilado y como tal tiene algunos errores fáciles de solucionar manualmente):

Parece que applyCrypt básicamente realiza un XOR entre el contenido del .class y una semilla pasada como parámetro. Supuestamente, si cogemos por ejemplo TestClass1.class y le aplicamos applyCrypt, deberíamos obtener TestClass1.clazz (y viceversa, al ser una simple función XOR!). Habrá que comprobarlo…

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *