2009-10-04 12 views
5

Para aprender un poco más sobre los sistemas FreeBSD y * nix en general, estoy empezando a ver los binarios del juego DEFCON 17 Capture The Flag. En este momento, estoy invirtiendo el binario de Tucod. He aquí alguna información posiblemente útil en tucod:gdb no llega a los puntos de interrupción

tucod: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), for FreeBSD 7.2, dynamically linked (uses shared libs), FreeBSD-style, stripped 

Algunos otra información posiblemente útil obtenida de un breve análisis estático es que tucod se une en el puerto 0xDEAD (lindo, eh?) Y si le dan una contraseña específica ("HANGEMHIGH ! ") jugará un juego de ahorcado con usted.

El problema que me encuentro es que no estoy llegando a mis puntos de interrupción en gdb. Específicamente, el punto de corte al que intento llegar se encuentra en el código que maneja la conexión del cliente. Sin puntos de interrupción, el código se ejecuta como se esperaba. Cuando establezco un punto de interrupción en ese código, el niño sale (en lugar de irrumpir en gdb, como se esperaba). Si configuro puntos de interrupción antes de que el servidor separe al niño, puedo golpearlos bien, pero después de presionar "continuar" el niño no continúa procesando mi conexión (es decir, no me pedirá una contraseña ni jugará hang-man).)

Desde las horquillas demonio cuando se recibe una nueva conexión, trato de decirle GDB para seguir el niño con este comando:

(gdb) set follow-fork-mode child 

Pero después de un solo paso a paso las instrucciones después de que el tenedor, se deduce que este no está funcionando.

He intentado buscar llamadas a signal, pensando que implementaron un controlador SIGINT personalizado (o similar), pero la única llamada a signal que puedo ver maneja SIGCHLD.

Mi punto de interrupción en el BGF actualmente tiene el siguiente aspecto:

(gdb) info breakpoints 
Num Type   Disp Enb Address What 
1 breakpoint  keep y 0x080497d0 

Y 0x080497d0 es la dirección que quiero romper el código de procesamiento en el cliente.

Soy algo nuevo en el análisis de software en sistemas * nix y podría utilizar algunos punteros. ¿De qué otra forma debo solucionar el problema de por qué GDB no llegará a mis puntos de interrupción? ¿O hay algo importante que acabo de pasar por alto?

Hay un torrent disponible con todos los binarios del juego para aquellos interesados ​​en ver el binario de primera mano.

Respuesta

2

Mire here para la respuesta. En resumen, parece que GDB admite el modo de depuración infantil solo en HP-UX y Linux.

+0

¡Gracias! La solución que empleé para esto fue simplemente parchar el binario y hacer que el padre ejecutara la porción del niño. Para mí, esto es más simple que tratar de agregar una llamada a dormir, ya que estoy sin fuente. Pero una explicación de lo que estaba sucediendo era lo que realmente estaba buscando. Gracias de nuevo. – mrduclaw

+0

@Nikolai enlace roto – nouveau

Cuestiones relacionadas