Nos proporcionan el ejecutable sig_32.
Al ejecutarlo muestra el siguiente mensaje y se queda esperando:
Al pulsar Ctrl-C para salir, nos da un mensaje extra:
Los números que muestra cambian en cada ejecución, pero no sabemos mucho más, así que pasamos a analizarlo con IDA. Por suerte, es un binario muy sencillo. Vemos aquí la función principal:
Podemos ver que se realiza un fork y las actividades básicas tanto del proceso padre (salida del fork distinta de cero) como del hijo. No vemos directamente que se imprima el mensaje "Hack ___ planet", pero recordamos que ha salido al pulsar Ctrl-C, por lo que debe imprimirse en el manejador de la señal, así que nos fijamos en ese punto.
Efectivamente el proceso padre está redefiniendo la señal 2 (SIGINT), por lo que asumimos que en esa función se muestra el comentado "Hack ___ planet". Por su parte, el proceso hijo redefine la señal 14 (SIGALRM) y después muestra el mensaje principal, donde vemos que los números de manzanas que nos indicaba son el pid del proceso padre y el del hijo.
Queremos ver qué hace este proceso al recibir la señal SIGALRM, así que vamos a la función legendary:
Curioso... fija fflussh como el manejador de la señal 12 (SIGUSR2), espera 1 segundo y vuelve a cambiarlo a la función boobs. Sólo por el nombre de la función, miramos primero esta última y vemos que no hace nada (¿WTF? juegan con mis sentimientos como si fuera una marioneta ;-)). fflussh en cambio parece contener algún mensaje oculto.
Como ya estoy vago, vamos a probar si el análisis que hemos hecho hasta ahora está bien... necesitamos enviar al proceso hijo, que amablemente nos indica su pid, la señal 14, y en menos de 1 segundo (pero dándole tiempo a fijar la nueva señal) enviar la señal 12:
It works!!! :-)