Compilando NetCat sobre Windows

Iniciado por CrazyKade, Agosto 14, 2013, 10:38:51 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 14, 2013, 10:38:51 PM Ultima modificación: Agosto 14, 2013, 10:45:58 PM por CrazyKade
Hola a todos. Por motivos que no vienen al caso, me vi en la necesidad de sentarme a estudiar el código fuente de nuestro querido amigo NetCat (nc.exe), ya que necesitaba ver cómo hobbit, (el programador que desarrolló esta gran herramienta), se las arregló para manejar los pipes del crudo lenguaje C en el módulo Gaping Security Hole que todos seguramente ya conocemos bien.
Bueno, pues Netcat fue desarrollada en 1996 por Hobbit usando lenguaje C sobre Unix. Con el tiempo fue portada a Windows y Mac Os X.
Hoy, logré hacerme con una versión del código fuente de Netcat portado a ANSI C para Windows NT. Me lo bajé sin pensarlo dos veces, ya que estas cosas valen oro. Una vez descargado el código fuente me dispuse a compilarlo directamente utilizando el compilador gcc que viene dentro del paquete MinGW. Grande fue mi sorpresa al ver la cantidad de errores de compilación. Ahí me di cuenta que parte del código estaba obsoleto ya que por ejemplo habían llamadas a funciones como _sleep() que en las versiones modernas del compilador han sido reemplazadas. Uno a uno fui fixeando los errores en el código y reemplazando los métodos antiguos por sus correspondientes en la actualidad. Cuando terminé al fin pude compilar el código y obtener mi tan preciado nc.exe. Ni bien lo ejecuté me encontré con otra gran sorpresa. Las opciones –t (telnet) y –e (Gaping Security Hole) no estaban. Dije: ¿Qué coño? Ahí recordé que, si bien aún no me había puesto a estudiar el código en profundidad, sí había notado, mientras lo iba fixeando, que no había visto referencias ni implementaciones de tales métodos. Empecé a buscar bien entre los archivos de código fuente y veo que hay 2 archivos que no tuve en cuenta al compilar.  Estos son: doexec.c y getopt.c. La biblioteca getopt, para los que programamos en C ya la debemos super conocer, para los que no simplemente diré que es una biblioteca que nos facilita la vida a quienes programamos para consola, ya que sus métodos nos permiten separar los parámetros de los argumentos.
El tema acá estaba en la biblioteca doexec.c, una biblioteca que no había visto nunca en mi vida. Empiezo a husmear dentro del código de doexec.c y al cabo de unos minutos la verdad se me reveló como el Nirvana se le revela al monje. Este Hobbit pillo se dio cuenta del peligro de estas opciones usadas en manos equivocadas, y decidió separarlas del programa principal para así evitar que cualquier lamersito de jardín de infantes que por esos milagros de la vida lograse compilar el código, no tuviera a su alcance tales opciones.
Enseguida entendí que lo que estaba viendo no era más que una librería que habría que compilar a código objeto, para después junto con el código objeto de getopt.c poderlas linkear con netcat.c y así sí poder obtener el ejecutable completo con las opciones -t y -e.
Una vez que compilé todo junto, obtuve mi nc.exe completito. El programa funciona de mil maravillas y me trae mucha nostalgia de finales de los 90's.  Después de haber estado casi todo el día leyendo el increíble código fuente que escribió Hobbit, no puedo no comentar ciertas impresiones y sensaciones que he tenido.
1)   Este tío Hobbit sabía bien lo que hacía desde el principio. Su manejo de habilidades avanzadas en el lenguaje C como pipes, flags de compilación, sockets, etc es simplemente brillante.
2)   La prolijidad del código, los comentarios y la identación son perfectos. Uno realmente disfruta al leer un código así ya que es un placer a la vista. Además se entiende hasta el mínimo detalle.
3)   Para ser un código del año 96 es realmente increíble.
Para quienes quieran repetir mi experiencia, les dejo el código fuente terminado, portado, arreglado y listo para compilar en el siguiente enlace:

Link: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Van a necesitar un compilador de C. Yo les recomiendo que instalen MinGW.

Link MinGW: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Pasos de compilación:

1)   Instalamos MinGW en C:\MinGW
2)   Lo agregamos al path: (desde la consola) -> PATH= %PATH%; C:\MinGW\bin
3)   Desde la consola, nos situamos en la carpeta donde está el código fuente de netcat y compilamos así:

gcc -c -DTELNET -DGAPING_SECURITY_HOLE getopt.c       
                                             
gcc -c -DTELNET -DGAPING_SECURITY_HOLE doexec.c   
                                                   
gcc -c -DTELNET -DGAPING_SECURITY_HOLE netcat.c
                                                                                                                       
gcc  getopt.o doexec.o netcat.o  -o nc.exe    -Wl,-Lc:\MinGW\lib,-lkernel32,-luser32,-lwinmm,-lws2_32

Espero prueben y se maravillen ustedes mismos. Saludos!

CrazyKade


Hey te pasaste buen amigo CrazyKade, si que tas bien loquillo.
Sigue adelante éxitos

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hey te pasaste buen amigo CrazyKade, si que tas bien loquillo.
Sigue adelante éxitos

Gracias hermano! A sacarle el jugo!


Muy bueno! Me gusto mucho tu post! :D
Никогда не доверяй никому.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Muy bueno! Me gusto mucho tu post! :D

Gracias hermano!!!!