Warning! Este post muestra paso a paso cómo superar la prueba 4 (nivel 3) del HackIt! de la Gipuzkoa Encounter 2009. Si no quieres verlo, deja de leer… ¿Todavía estás aquí? Entonces ¿quieres leer la solución? Vale, tú mismo. Allá vamos:
0) Descargar el ejecutable para Windows a crackear. Si estás en Linux, aprovecha para pasarle el comando strings y ver si encuentras algo interesante – no hay gran cosa-. Ya puestos ábrelo en vi (sí! abrimos el binario en vi) . Aquí sí que vemos algunas cadenas interesantes. Entre ellas UPX!
1) UPX es un empaquetador de ejecutables (tanto para Win como para Linux). Descargamos UPX. Desempaquetamos el ejecutable (se puede hacer en Linux con Wine si se desea)
/tmp/upx303w$ wine upx.exe -d ../crackit.exe
Ultimate Packer for eXecutables
Copyright (C) 1996 – 2008
UPX 3.03w Markus Oberhumer, Laszlo Molnar & John Reiser Apr 27th 2008
File size Ratio Format Name
——————– —— ———– ———–
28672 <- 8704 30.36% win32/pe crackit.exe
Unpacked 1 file.
2) La idea ahora es abrir el ejecutable con algún debugger para Win. Por ejemplo, OllyDBG. Lo he probado con Wine y no ha ido muy fino así que abrámoslo en el sistema del maligno 😉
Abrimos el fichero desempaquetado crackit.exe en OllyDBG.
Ponemos un punto de ruptura en la primera línea ejecutable del .exe (en la 00401811). Para ello, basta con hacer doble click sobre la línea en cuestión (el número de línea se pondrá rojo, igual que en la imagen). Ahora, dado que la primera línea es un «call 004023E4» lo inspeccionamos con «step into», es decir, pulsamos F7 para ver el código al que ese call está llamando. Ahora, empezamos a navegar por el código usando F8 (o sea, step over, es decir, ejecución línea por línea, sin meternos en los call)
Seguimos así hasta la línea 00401665 «call 00401005». Realmente la idea es que pulsamos F8 hasta ver cuándo se abre una ventana MS-DOS que nos está pidiendo login y password. En ese momento apuntamos la línea que provocó esa llamada y nos damos cuenta de que es la 00401665. Ahora reiniciamos la sesión de debug y pulsamos F7/F8 hasta pararnos en 00401665. Pulsamos F7 (step into) para ver «las tripas» de ese método.
Ahí hay un «jmp 00401010». Pulsamos F7. Y seguimos con F8, línea a línea. En la 00401050 vemos que se prepara el string que nos indicará por pantalla «En esta prueba es importante saber quién eres…». F8 y veremos que se hace una llamada a printf. Seguimos con F8. En la línea 004010A2 vemos que se hace una llamada a fgets (se solicita por teclado un string al usuario). Tecleamos «euskal» y pulsamos intro para seguir depurando. F8 hasta que nos pida el password. Tecleamos cualquier cosa (12345678, por ejemplo).
Ahora se supone que en algún momento deberá de compararse lo que hemos tecleado nosotros (12345678) con la clave correcta que se supone que deberíamos de teclear. Así que vamos pulsando F8 hasta que veamos el «strcmp» pasar por delante nuestro y justo antes, el string con el que comparar 🙂
(pulsa sobre la imagen para ver la contraseña en la línea 004011B3). Suerte con el nivel 4 😉
Alguna pista para el nivel 6?
Edit: <RECORTADO HASTA QUE LLEGUEMOS A LA PRUEBA 6>
Vamos que ese reto esta muy fumado.
@Garrupito: he editado tu comentario porque da demasiadas pistas a la gente (y primero debería de «seguir al conejo blanco» 🙂 Cuando nos acerquemos a ese nivel, volveré a restaurar tu comentario, ¿ok?
Para que no te quedes atascado en esa última prueba (nivel 6 = prueba 7 = última prueba) te recomiendo una interesante lectura: http://en.wikipedia.org/wiki/ZIP_(file_format) (si lo lees con calma, te dará la pista necesaria para terminar… lo tienes «a huevo»)
Ya me habia leido el appnote del ZIP y saque esos extraños simbolos como parentesis, espacios y otros mas pero no le veo forma de nada de nada y si lo leo de 50 en 50 saco puros palitos «||||» asi que ando perdidisimo y no tengo ni la menor de que tengo que hacer….
@Garrupito: estás en la última prueba, que sólo consiguió pasarla 1 grupo. No es una prueba de idea feliz, tienes ya toda la información necesaria para resolver. «Sólo» tienes que darte cuenta de un pequeño detalle. Dáte un tiempo fuera de la pantalla y piensa en todas las pistas que tienes…
Ok…
Pero yo lo que no entiendo es que tengo que hacer… ¿que es la respuesta? o que consideras que es o que no es parte del reto.
Se que hay un gato encerrado pero sinceramente si el reto no es de idea feliz, entonces no seria tan difícil el reto así que hasta lo que veo en estos momentos este reto es de tener «ideas felices», no es nada lógico de otra forma solo sacando los comentarios tendría algo en que pensar al menos…
Hasta ahorita lo único que se me ocurre es que tal vez el comentario es morse o bien tenemos que buscarle una forma (que no sea un ascii-art erótico) a esos 300 comentarios que sacamos….
PD: El reto es esteganografia? es criptologia? juego logico? idea feliz? roflol?
@garrupito: la clave está en algo que tú mismo has dicho: «ascii-art erótico»
De 50 en 50… Más pistas no puedo darte.
Ya esta, ya lo pude ver… ahora se por que sacaba puros palitos (!)…
Aunque no se si la prueba funciona bien, al entrar lo que sale no pasa nada, tal vez lo estoy ingresando mal pero bueno al fin puedo dormir tranquilo…
PD: Por que tanto trauma con los 7 pecados capitales?
@Garrupito: felicidades 🙂
Sobre los pecados, quería unir de alguna forma las 7 pruebas. Además, al ver la contraseña, ayuda saber que es la correcta sólo con leerla, sin probarla, dado que tiene que ver con el tema.
Alguna pista sobre el nivel 4 (prueba 5) ?