HackIt Nivel 10: reverse engineering

Tras seguir las pistas dadas en los anteriores posts sobre el HackIt Nivel 9 (léanse también los comentarios), llegamos al fatídico nivel 10. Aquí nos quedamos cuando sonó el ¡gong! del GAME OVER 😉 A primera vista la cosa no pinta muy bien, dado que tras descargar el zip y descomprimirlo, vemos que efectivamente se trata del juego Breakout, por lo que dice el «enunciado» de la pista y por las librerías gráficas que carga:


[juanan@localhost game]$ ldd go
linux-gate.so.1 => (0x00110000)
libXpm.so.4 => /usr/lib/libXpm.so.4 (0x02216000)
libX11.so.6 => /usr/lib/libX11.so.6 (0x00a6e000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x061ea000)
libm.so.6 => /lib/libm.so.6 (0x004bb000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x002aa000)
libc.so.6 => /lib/libc.so.6 (0x00360000)
libxcb-xlib.so.0 => /usr/lib/libxcb-xlib.so.0 (0x00bcc000)
libxcb.so.1 => /usr/lib/libxcb.so.1 (0x00bae000)
libdl.so.2 => /lib/libdl.so.2 (0x004e6000)
/lib/ld-linux.so.2 (0x00341000)
libXau.so.6 => /usr/lib/libXau.so.6 (0x00639000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0x0063e000)

pero, si analizamos el tipo de fichero:

[juanan@localhost game]$ file go
go: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.8, dynamically linked (uses shared libs), corrupted section header size

vemos que es un fichero ejecutable ELF para Linux, y ¡ojo al parche!, las cabeceras están manipuladas (corrupted section header size) :-O Me temo que a GDB no le gustará nada de nada…


[juanan@localhost game]$ gdb go
GNU gdb Red Hat Linux (6.6-45.fc8rh)
(no debugging symbols found)


Pues vaya… no hay tabla de símbolos, así que ¿cómo indicar los puntos de ruptura? ¿cómo depurar el programa? Os dejo con el reto, y os animo a proponer vías de solución en los comentarios. Yo voy a por un café y cumplimentar papeleos de la universidad…

Hackit! 2007: Nivel 9, espiando conversaciones VoIP

Lo primero que vemos al entrar en el nivel 9 es la posibilidad de descargarnos un fichero .zip que incluye un único fichero tampering.cap . El propio Linux nos indica de qué se trata:

sh-3.2$ file tampering.pcap
tampering.pcap: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 65535)

Una captura de tráfico hecha con tcpdump. Vamos a darle un poco de trabajo a Wireshark (ex-Ethereal), mediante el comando

$ wireshark tampering.cap

Vemos en la columna Protocol que aparte de ARP, aparece el acrónimo SIP (Session Initiation Protocol), o sea, «protocolo de iniciación, modificación y finalización de sesiones interactivas de usuario donde intervienen elementos multimedia como el video, voz…» (Wikipedia dixit) ¿Han capturado tramas de voz? Menos mal que me he traído los auriculares 🙂 También veo tramas RTP (Real-time Transport Protocol, que define un formato para el transporte de audio y video sobre Internet)… veamos qué tenemos en Wireshark al respecto…

Varias opciones del menú se relacionan con SIP, RTP y llamadas de voz. Por medio de la vieja táctica de «prueba y error» 😉 llegamos a la opción «VoIP Calls». Nos sale esta pantalla:

Pulsamos en Player y obtenemos:

Esto parece una matrioska 🙂 Veamos… si pulsamos en «Decode».

Esto tiene muy buena pinta. Pónte los cascos, pulsa «Play» y escucha la conversación… mañana seguiremos con la resolución del misterio (inténtalo por tu cuenta, ¡hombre!)

HackIt! Nivel 8: reverse engineering en Windows (solución)

Si hacemos lo que vimos en el post anterior, veremos la siguiente cadena: «Compressed by Petite (c)1999 Ian Luck»

Así que ahora que sabemos el compresor usado en el .exe, habrá que descomprimirlo. La primera pega, sacada del readme de Petite: «No existe un descompresor de Petite.» Genial… vamos a preguntar al sabio a ver si opina lo contrario. Entre los resultados, uno curioso: «r!sc’s Petite enlarger» (alargador de petite) 🙂 Tras ejecutar enlarger.exe sobre login.exe vemos que tenemos éxito 🙂

Se genera en la misma carpeta de login.exe un nuevo binario descomprimido de nombre un-packed.exe . Ése será el ejecutable que abriremos con OllyDBG, y ahora sí, estaremos en disposición de depurarlo:

Pondremos un punto de ruptura en la dirección 0x0401290 (tocamos la línea y pulsamos F2). Pulsamos el botón Play (Run Program = F9) . En la línea 0x04012D4 vemos que se intenta leer el fichero license.lic (en concreto los campos user y login). Antes de seguir depurando, por tanto, vamos a cumplimentar esos campos (el user lo dejamos tal cual está en el fichero original, «euskal15», y en el password pondremos «contraseña», por ejemplo).

Seguimos depurando paso a paso pulsando F7 (ejecutar paso a paso, metiéndose en el código de las funciones – destino de los call – ) ó F8 (ejecutar paso a paso, pero NO meterse en el código de las funciones – no meterse en el destino de los call – ) .

Cuando lleguemos a la instrucción 0x04013AA debemos fijarnos en la zona superior derecha, en el valor de los registros EAX, ECX, etc. Veremos la cadena HACKthis (podemos empezar de cero, probando a poner esa cadena en el password y ejecutar el .exe. Veremos que no es la contraseña que necesitamos) Seguimos ejecutando paso a paso, hasta que al llegar en una de las vueltas a la instrucción 0x04013CD veremos lo siguiente:


«HFODdget» … qué cadena más curiosa, ¿no? 😉 No voy a explicar exactamente qué hace cada región de código ensamblador, eso lo dejo «como ejercicio para el lector» 😉

Hack It! Nivel 8: reverse engineering en Windows

Descargamos el archivo .zip del nivel 8 y descomprimimos. Veremos dos ficheros : login.exe y login.lic

Ejecutamos login.exe y nos saludará la siguiente ventana:

O sea, «¡No! pero gracias por concursar…»

Empecemos con la artillería: abrimos el ejecutable en OllyDBG, y obtenemos otro mensaje de alerta no muy bonito:

«Entry Point Alert. Module login has entrypoint outside the code (as specified in the PE header). Maybe this file is self-extracting or self-modifying. Please keep it in mind when setting breakpoints!»

Probablemente el .exe esté comprimido. Lo más habitual es con UPX (de hecho este compresor de ejecutables ya ha aparecido en otras pruebas del HackIt! …) Sin embargo, tras probar con UPX veremos que no es el caso. ¿Qué hacer? Lo que deberíamos de haber hecho desde un principio, echarle un vistazo al binario con un editor de textos (como UltraEdit), a ver si vemos algún string interesante.

Y aquí os dejo que penséis un poco cómo seguir 😉

Hack It! Nivel 7: solución

Como ya comentamos, no tenía demasiado misterio. Descargar la captura de tramas de una conexión wifi con cifrado WEP contenida en el fichero tampered.cap y pasarle un crackeador por ataque de diccionario (en español). El diccionario utilizado es lemario-espanol-2002-10-25 encontrado en http://lemarios.olea.org/

La orden de crackeo también es sencilla:

$ aircrack-ng -w lemario-espanol-2002-10-25.txt tampered.cap

En unos pocos minutos aparecerá la clave para pasar al siguiente nivel: proclive .

El nivel 8 sí que nos costó un poco… tal vez porque había que practicar ingeniería inversa sobre un binario .exe , y estamos un poco oxidados en OllyDBG 😉