En esta entrada la solución a uno de los retos de 'reverse' (ingeniería inversa) de la edición de 2017 de CyberOlympics, competición en modalidad 'on-line', estilo 'Capture the Flag' y formato 'Jeopardy', dirigida a centros educativos y organizada por el Instituto Nacional de Ciberseguridad (INCIBE) en el marco de la actividad llamada CyberCamp.Este desafío, en mi opinión, presenta un nivel de dificultad muy bajo (★☆☆☆☆).
Enunciado: Un amigo nos ha pasado un fichero cofre.pyc y partes del código. Cuando lo ejecutamos nos pide una contraseña. Nuestro amigo, que es un poco “troll”, no nos ha dado la contraseña que es necesaria para que el programa funcione bien.
Enunciado: Un amigo nos ha pasado un fichero cofre.pyc y partes del código. Cuando lo ejecutamos nos pide una contraseña. Nuestro amigo, que es un poco “troll”, no nos ha dado la contraseña que es necesaria para que el programa funcione bien.
Solución: En el archivo pdf que se proporciona se ven diferentes imágenes del código del programa .pyc (archivo python compilado).
- Función 'main()':
En esta función se introducen dos valores y se bifurca a la función 'primeraClave' con el primero de ellos como argumento. Si esta función devuelve 'True' se bifurca a la función 'segundaClave' con ambos valores como argumentos y sólo si ésta devuelve también 'True' se bifurca a la función 'dameFlag'. Es decir, para obtener la flag estas dos primeras validaciones de los valores introducidos deben devolver 'True'.
- Función 'primeraClave(clave)':
Esta función sólo devuelve 'True' si el primer valor introducido, que se le pasa como argumento, está comprendido entre el '1' y el '5'. En caso contrario se mostrará el mensaje 'No has pasado el primer control.', se devolverá 'False' y el programa finalizará.
- Función 'segundaClave(clave,clave2)':
Esta función sólo devuelve 'True' si la longitud (nº de caracteres) del segundo valor introducido, que junto con el primer valor se le pasan como argumentos, es el doble del primer valor introducido. En ese caso se mostrará el mensaje 'Segundo control pasado', se devolverá 'True' y el programa bifurcará a la función 'dameFlag', mientras que en caso contrario se mostrará el mensaje 'No has pasado el segundo control', se devolverá 'False' y el programa finalizará.
- Función 'dameflag()':
En esta función se pide introducir la 'password' y sólo se mostrará la flag si ésta tiene una longitud de 7 caracteres, empieza por 'T' y contiene tres caracteres 'a' (Código ASCII 97 en decimal).Ejecuto ahora el archivo cofre.pyc (programa python compilado) y para obtener la flag:
- Introduzco como primer valor '1' (debe estar comprendido entre '1' y '5').
- Introduzco como segundo valor '12' (su longitud en número de caracteres debe ser el doble del primer valor.
- Introduzco como 'password': 'Taaa123' (debe comenzar por 'T', tener tres caracteres 'a' y 7 caracteres de longitud.
Y ya puedo ver que la solución a este reto es: 1346-ElLaberinToDePython
Comentarios
Publicar un comentario