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.
¡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
@Nikolai enlace roto – nouveau