HackIt! Nivel 10: solución detallada

Lo primero que haremos será abrir con objdump el ejecutable ./go, para conocer la dirección
de entrada (saber desde dónde, desde qué dirección de memoria, empieza el programa a ejecutarse):


sh-3.2$ objdump -x ./go
./go: file format elf32-i386
./go
architecture: i386, flags 0x00000102:
EXEC_P, D_PAGED
start address 0x08048f50

Apuntamos la dirección de inicio: 0x08048f50

Necesitamos preparar el terreno un poco más. Vamos a examinar el ejecutable con elfsh:


$ elfsh
> load go

A continuación, dentro de elfsh, pediremos la lista de direcciones de las funciones a
las que llama el juego:


> rel
(elfsh-0.81-a8-dev@local) rel
[RELOCATION TABLES]
[Object go]
{Section .rel.dyn}
[000] R_386_GLOB_DAT 0x0804D488 sym[004] : __gmon_start__ => Create GOT entry
[001] R_386_COPY 0x0804DA40 sym[051] : stderr => Copy symbol at runtime
{Section .rel.plt}
[000] R_386_JMP_SLOT 0x0804D498 sym[001] : XDrawString => Create PLT entry
[001] R_386_JMP_SLOT 0x0804D49C sym[002] : XLookupKeysym => Create PLT entry
[002] R_386_JMP_SLOT 0x0804D4A0 sym[003] : sprintf => Create PLT entry
[003] R_386_JMP_SLOT 0x0804D4A4 sym[004] : __gmon_start__ => Create PLT entry
[004] R_386_JMP_SLOT 0x0804D4A8 sym[006] : XAutoRepeatOff => Create PLT entry
[005] R_386_JMP_SLOT 0x0804D4AC sym[007] : _ZdlPv => Create PLT entry
[006] R_386_JMP_SLOT 0x0804D4B0 sym[008] : XSetTile => Create PLT entry
[007] R_386_JMP_SLOT 0x0804D4B4 sym[009] : XSetClipMask => Create PLT entry
[008] R_386_JMP_SLOT 0x0804D4B8 sym[010] : XSetFont => Create PLT entry
[009] R_386_JMP_SLOT 0x0804D4BC sym[011] : XpmCreatePixmapFromData => Create PLT entry
[010] R_386_JMP_SLOT 0x0804D4C0 sym[012] : XSetFillStyle => Create PLT entry
[011] R_386_JMP_SLOT 0x0804D4C4 sym[013] : __libc_start_main => Create PLT entry
[012] R_386_JMP_SLOT 0x0804D4C8 sym[014] : XCreateSimpleWindow => Create PLT entry
[013] R_386_JMP_SLOT 0x0804D4CC sym[015] : XAutoRepeatOn => Create PLT entry
[014] R_386_JMP_SLOT 0x0804D4D0 sym[016] : XOpenDisplay => Create PLT entry
[015] R_386_JMP_SLOT 0x0804D4D4 sym[017] : gettimeofday => Create PLT entry
[016] R_386_JMP_SLOT 0x0804D4D8 sym[018] : XDrawLine => Create PLT entry
[017] R_386_JMP_SLOT 0x0804D4DC sym[019] : XCloseDisplay => Create PLT entry
[018] R_386_JMP_SLOT 0x0804D4E0 sym[020] : XSetForeground => Create PLT entry
[019] R_386_JMP_SLOT 0x0804D4E4 sym[021] : XFillRectangle => Create PLT entry
[020] R_386_JMP_SLOT 0x0804D4E8 sym[022] : fclose => Create PLT entry
[021] R_386_JMP_SLOT 0x0804D4EC sym[023] : XFreeGC => Create PLT entry
[022] R_386_JMP_SLOT 0x0804D4F0 sym[024] : XDrawRectangle => Create PLT entry
[023] R_386_JMP_SLOT 0x0804D4F4 sym[025] : fopen => Create PLT entry
[024] R_386_JMP_SLOT 0x0804D4F8 sym[026] : XNextEvent => Create PLT entry
[025] R_386_JMP_SLOT 0x0804D4FC sym[027] : XMapWindow => Create PLT entry
[026] R_386_JMP_SLOT 0x0804D500 sym[028] : _Znwj => Create PLT entry
[027] R_386_JMP_SLOT 0x0804D504 sym[029] : select => Create PLT entry
[028] R_386_JMP_SLOT 0x0804D508 sym[030] : XCreateGC => Create PLT entry
[029] R_386_JMP_SLOT 0x0804D50C sym[031] : fwrite => Create PLT entry
[030] R_386_JMP_SLOT 0x0804D510 sym[032] : XSelectInput => Create PLT entry
[031] R_386_JMP_SLOT 0x0804D514 sym[033] : XFlush => Create PLT entry
[032] R_386_JMP_SLOT 0x0804D518 sym[034] : XTextWidth => Create PLT entry
[033] R_386_JMP_SLOT 0x0804D51C sym[035] : XChangeGC => Create PLT entry
[034] R_386_JMP_SLOT 0x0804D520 sym[036] : XCopyColormapAndFree => Create PLT entry
[035] R_386_JMP_SLOT 0x0804D524 sym[037] : XLoadQueryFont => Create PLT entry
[036] R_386_JMP_SLOT 0x0804D528 sym[038] : XParseColor => Create PLT entry
[037] R_386_JMP_SLOT 0x0804D52C sym[039] : XAllocColor => Create PLT entry
[038] R_386_JMP_SLOT 0x0804D530 sym[040] : puts => Create PLT entry
[039] R_386_JMP_SLOT 0x0804D534 sym[041] : XSetStandardProperties => Create PLT entry
[040] R_386_JMP_SLOT 0x0804D538 sym[042] : XFreePixmap => Create PLT entry
[041] R_386_JMP_SLOT 0x0804D53C sym[043] : fread => Create PLT entry
[042] R_386_JMP_SLOT 0x0804D540 sym[044] : XCreatePixmap => Create PLT entry
[043] R_386_JMP_SLOT 0x0804D544 sym[055] : __gxx_personality_v0 => Create PLT entry
[044] R_386_JMP_SLOT 0x0804D548 sym[045] : _Unwind_Resume => Create PLT entry
[045] R_386_JMP_SLOT 0x0804D54C sym[046] : XSetWindowColormap => Create PLT entry
[046] R_386_JMP_SLOT 0x0804D550 sym[047] : XPending => Create PLT entry

Conviene fijarse en algunas funciones como: sprintf, fopen, fread, fclose…
En un post anterior vimos que el ejecutable busca un fichero desde el que leer el serial number, así que
saber dónde se hace un fopen/fread/fclose es sumamente interesante 😉

Ahora que tenemos unas pequeñas ayudas con las direcciones de esas funciones, y sabemos dónde poner
el primer punto de ruptura, podemos empezar a depurar con GDB:
Sigue leyendo HackIt! Nivel 10: solución detallada

Inauguración del Repositorio Software de ESLE

ESLE, la Asociación de Empresas de Software Libre de Euskadi y SPRI, la Sociedad para la Promoción y Reconversión Industrial presentarán oficialmente, el próximo jueves, 29, en el Parque Tecnológico de Zamudio, el nuevo  repositorio de aplicaciones libres de ESLE , con el que se quieren poner a disposición de todas las empresas aplicaciones de software libre y open source, junto con su documentación, creadas en la comunidad autónoma vasca y disponibles de forma gratuita y universal.

Se pretende, a través de este evento, dar a conocer los servicios para generar negocio que ofrece el repositorio, así como los objetivos y potencialidades del mismo.

Además, se dará a conocer el programa Kzlankidetza de la SPRI, a través del cual se han realizado algunos de los desarrollos de software que pueden encontrarse en el Repositorio de ESLE, y al que pueden adherirse las empresas y asociaciones.

Se presentarán casos de asociaciones y empresas que han podido beneficiarse de este programa y que han aportado sus desarrollos al repositorio respectivamente.

El acto está dirigido a empresas usuarias, a asociaciones sectoriales y al sector TIC en general

Cómo borrar anotaciones en OpenOffice

Redactas un documento en OpenOffice y se lo pasas a un revisor para que te haga anotaciones, correcciones, comentarios, etc. El revisor lo hace y te devuelve el documento. Corriges lo necesario y a continuación quieres borrar las anotaciones. ¡Sorpresa! En el menú contextual de Writer 2.4 no hay «Borrar anotación». Tras pinchar en distintos menús no aparece la dichosa opción.

Bien, ¡tranquilidad! Existe la posibilidad, aunque encontrarla no es, en mi opinión, algo trivial:
1. Pulsa F5 (navigator)
2. Pulsa en «Notes»
3. En la lista de notas que aparecerá, selecciona la anotación que quieres borrar
4. Pulsa el botón «Suprimir»
6. Repite desde 3 tantas veces como quieras

Recuerda que en la parte izquierda tenemos la categoría «OOo» con muchos otros tips sobre esta suite.

HackIt! Nivel 10: 0wn3d !

Me pongo a escribir el tutorial dentro de unos días. Ahora voy a tomarme un descanso, porque este nivel me ha hecho perder algunas horas de sueño 😉 Para el que esté liado con este nivel del demonio, algunas pistas: elfsh es tu amigo.

Comandos clave en GDB:

ignore breakpoint saltos

set {int}0xdireccion = valor

jump *0xdireccion

disable breakpoint

info breakpoints

x/15x 0xdireccion

QGtkStyle: aplicaciones Qt con aspecto GTK+

Jens Bache-Wiig es un desarrollador de Trolltech que ha anunciado la disponibilidad de un nuevo motor de estilos para Qt llamado QGtkStyle, que permite adaptar el aspecto gráfico de las aplicaciones Qt al theme GTK+ por defecto en que el usuario de GNOME esté usando.  Es decir, que si un usuario de GNOME abriera la aplicación Qt Designer y tuviera QGtkStyle instaslado, vería lo siguiente:

que, como puede observarse, tiene el aspecto GTK+ de una aplicación GNOME, lo cual hará que la integración de aplicaciones entre ambos escritorios sea cada vez mayor (de cara al usuario final, incluso «transparente»).