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
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: 




