Repaso al HackIt’06 : atascado en el nivel 11

Me he quedado atascado en el nivel 11. El proceso de solución que he seguido es el que plantea Txipi, el organizador de la prueba, en su blog. En esa página podemos encontrar indicaciones para solucionar casi todos los retos planteados, pero en ocasiones son precisamente eso, indicaciones, no se muestra el proceso en detalle.

El nivel 11 nos plantea el siguiente reto: dado un fichero ejecutable ELF, crackearlo para obtener la clave que esconde. Tras analizar el fichero vemos que está cifrado/comprimido con UPX (upx.sourceforge.net) Este tipo de compresión no es como la típica .zip, .rar, etc. sino que UPX comprime las ecciones internas del ELF, añadiendo al ejecutable una rutina de autodescompresión.

Lo anterior, si fuera tal cual, cual no sería problemático: se descomprime con el propio upx y listo (upx -d fichero_elf) . Pero estando en el nivel 11 del juego, lógicamente, la cosa no es tan sencilla. El autor del reto ha eliminado cadenas del ejecutable de tal forma que al intentar la escompresión (upx -d) el UPX dice que ese fichero NO está comprimido con él. Así que hay que reconstruir las secciones del UPX (básicamente, saber qué han eliminado/cambiado y volverlo a poner). El proceso consistiría en comprimir con UPX varios archivos ejecutables onocidos y extraer las cadenas o características propias de UPX. Una vez hecho eso y con el conocimiento de las cadenas típicas que un fichero comprimido con UPX muestra, comparar con el archivo que nos dan y ver qué demonios han eliminado. Tras hacer este trabajo, podemos ver que han sustituido las apariciones de la cadena UPX (55 50 58 en hexadecimal) por (20 20 20). ¡Ah! parece pan comido. Más adelante, se ve que no sólo han hecho la sustitución previamente indicada, sino que también han cambiado una cadena más completa del tipo «This program has been compressed using UPX version .01…» o similar, convirtiéndola también a caracteres 20 20 20.

Hay distintos editores de hexadecimal, pero como últimamente uso VIM para casi todo, he editado también el fichero ELF con este editor (hay que teclear :%!xxd para convertirlo a hexadecimal y poder editar. Una vez terminada la edición, hay que realizar el proceso inverso con :%!xxd -r  y guardar :wq) Tras arreglarlo, intentamos la descompresión y upx dice que tururú, que las cabeceras siguen estando mal.

Analicemos más a fondo: los últimos bytes de un fichero UPX suelen seguir también un patrón del tipo XXXXnumeritosYYYY. Y podemos comprobar que el fichero que nos dan, NO lo sigue. Añadimos esa última sección y ahora, el comando «upx -l» indica que OK, que eso sí es un fichero UPX, pero cuando lanzamos el comando «upx -d» contra el fichero arreglado, para descomprimirlo, nos indica el siguiente error

Exception: compressed data violation

y no descomprime nada. El problema es que no sé cómo arreglar este problema, me he atascado :-O . En mi opinión l error se debe a que en la cadena del final, XXXXnumeritosYYYY, los numeritos, tras distintas pruebas, he visto que son DISTINTOS dependiendo del archivo que comprimamos. Y ahí me pierdo, porque no sé qué algoritmo seguir para generarlos… Aunque tal vez no sea ese el problema. ¡ Agradecería cualquier ayuda !

El archivo level-11-solved es el que he reconstruído a partir del original para conseguir que UPX lo detecte como propio.

Analizando diferencias con VIMdiff

vimdiff en acciónHay dias en los que descubres pequeñas joyas que siempre has deseado conocer pero que nunca te pusiste a buscar seriamente. Hoy he descubierto vimdiff, una utilidad basada en VIM que tras usarla la primera vez sabes que va a formar parte de tu arsenal de herramientas para el futuro. vimdiff permite visualizar dos ficheros a la vez, frente-a-frente, buscando y señalando con colores las diferencias entre ambos. En concreto, abrirá en dos ventanas verticales dentro de vim los dos ficheros que se le pase como parámetro, marcando con distintos colores las diferencias debidas a añadidos, borrados o similitudes entre ambos. Ideal para hacer comparaciones de dos ficheros prácticamente iguales. Pero no queda ahí la cosa, vimdiff permite el scroll sincronizado de ambas ventanas. Es decir, que al bajar al final de la primera pantalla del primer fichero y seguir el scroll, la ventana del segundo fichero hará scroll de forma sincronizada, para que las diferencias sigan viéndose claramente. Lo dicho, herramienta a guardar y a usar 😉

MySQL Proxy 0.5.0

Hace una semana MySQL presentó una versión alpha de un nuevo producto relacionado con el sistema gestor open source más usado: MySQL Proxy 0.5.0 alpha.

MySQL Proxy es un sencillo programa que se sitúa entre tu cliente y el servidor o servidores MySQL, pudiendo monitorizar, analizar y transformar la comunicación entre ellos. Esta flexibilidad permite implementar un gran número de casos de uso, por ejemplo:

  • balanceo de carga
  • failover
  • análisis de consultas
  • filtrado y modificación de consultas
  • … y mucho otros

Es posible encontrar documentación del producto en MySQL Forge . La versión 0.5.0 alpha de MySQL Proxy está disponible en código fuente y binario para un gran número de plataformas aquí.

Disponible Google Desktop para Linux

Google Desktop for LinuxReproduzco en castellano la noticia del blog de Google: Tras un retraso de varios meses desde la salida de Google Desktop para Mac, Google acaba de anunciar la publicación del buscador local Google Desktop para Linux. Esta aplicación permite buscar archivos por contenido en los discos de tu ordenador local tan facilmente como la búsqueda de páginas web con Google. No sólo es posible buscar y encontrar documentos importantes olvidados en tu disco duro, sino que también permite la búsqueda en tu correo electrónico Gmail y otras aplicaciones. Cualquier fichero ofimático, incluídos por supuesto los creados con OpenOffice.org pueden ser encontrados fácilmente. Dado que bastantes usuarios Linux son además desarrolladores, Google Desktop ha sido diseñado para permitir la búsqueda de código fuente e información en ficheros .pdf, .ps, .man y .info . También dispone de la funcionalidad Quick Search Box , que puede ser invocada pulsando la tecla Ctrl dos veces. Teclea unas pocas letras o palabras en la caja de búsqueda y encontrarás de forma inmediata los mejores resultados. La aplicación se puede usar en inglés, francés, italiano, alemán, castellano, portugués, holandés, chino, japonés y coreano – y al parecer es compatible con distintas distribuciones Linux. Google Desktop está disponible desde hoy para Windows, Mac, y Linux. ¡Pruébalo y comenta tus impresiones en los comentarios de este post!