Título: Error al compilar una DLL Publicado por: Schaiden en 10 Julio 2017, 23:01 pm Muy buenas! Estaba investigando sobre DLL injection y quería compilar una DLL en la que se hace api hooking a la system call que lista archivos. Estoy trabajando en Windows 7 x64 con CodeBlocks y el compilador mingw que viene incluido con el IDE. La DLL que quiero compilar la obtuve de éste sitio:
https://losindestructibles.wordpress.com/2012/10/15/creacion-de-rootkit-desde-cero/ (https://losindestructibles.wordpress.com/2012/10/15/creacion-de-rootkit-desde-cero/) Es la siguiente: Código
Cuando quiero compilarla, el compilador devuelve el error: undefined reference to `WinMain@16' Build log: Citar D:\BACK UP\Agus\zVarios\Jack\Code fuente rootkit\DLL\DLL.cpp: In function 'void Hookear()': D:\BACK UP\Agus\zVarios\Jack\Code fuente rootkit\DLL\DLL.cpp:104:56: warning: passing NULL to non-pointer argument 3 of 'BOOL FlushInstructionCache(HANDLE, PCVOID, DWORD)' [-Wconversion-null] mingw32-g++.exe -o "D:\BACK UP\Agus\zVarios\Jack\Code fuente rootkit\DLL\DLL.exe" "D:\BACK UP\Agus\zVarios\Jack\Code fuente rootkit\DLL\DLL.o" c:/program files (x86)/codeblocks/mingw/bin/../lib/gcc/mingw32/4.7.1/../../../libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16' collect2.exe: error: ld returned 1 exit status Process terminated with status 1 (0 minute(s), 0 second(s)) 1 error(s), 1 warning(s) (0 minute(s), 0 second(s)) Imagen: (http://www.subirimagenes.com/imagedata.php?url=http://s2.subirimagenes.com/imagen/9765174imagencita.png) Quiero entender que estoy haciendo mal, ya que al googlear el error hay mucha gente a la que el compilador les devuelve el mismo error que el mio, pero porque tenían otros errores en su código como por ejemplo usar Main() con mayúscula, u otros, pero no se qué hacer en éste caso en particular... Espero poder compilar ésto asi luego mejoro la DLL para hacer api hooking a system calls que listen procesos y conexiones de red... Muchas gracias por su tiempo! Título: Re: Error al compilar una DLL Publicado por: ivancea96 en 11 Julio 2017, 12:00 pm Para crear una DLL con GCC, tienes que compilar con la opción "-shared". ¿La tienes a la hora de linkear?
Título: Re: Error al compilar una DLL Publicado por: Schaiden en 25 Julio 2017, 00:12 am Buenas! Gracias por tu tiempo, noté que el mingw32-g++.exe se estaba ejecutando sin el parámetro "-shared", asi que configuré las cosas de la siguiente forma:
(http://i.imgur.com/JhZStWF.png) Dentro de la sección Compiler Settings, busqué el parámetro -shared dentro de la subcategoría Compiler Flag, como no estaba, la escribí manualmente en la subcategoría Other options como se ve en la imagen. Y cuando quiero compilar, el Build log nos dice efectivamente que mingw se ejecutó con el parámetro -shared (observar en la imagen abajo a la izquierda). Pero sigo teniendo el mismo error de siempre, aún habiendo incluído ese parámetro... Alguna otra idea? Gracias por adelantado. Título: Re: Error al compilar una DLL Publicado por: ivancea96 en 25 Julio 2017, 00:26 am Todo está bien salvo que lo pusiste en compilador. El parámetro -shared es del linker. Tú quieres que ese parámetro aparezca en la segunda parte, donde el "g++.exe -o ...". Para ello, coloca ese parámetro en la pestaña "Linker settings".
Como explicación racional a todo esto: Se puede compilar sin main un código. Generas el código de las funciones o datos que haya. El problema viene a la hora de linkear. Si quieres linkear los códigos objeto para generar un ejecutable, necesita un punto de entrada, el "main". Es por eso que da el error, al no encontrarlo. Claro que al pasarle el -shared, ya no es un ejecutable, sinó una DLL, que no lo necesita. Título: Re: Error al compilar una DLL Publicado por: Schaiden en 25 Julio 2017, 00:49 am Excelente! Muchisimas gracias por responder tan rápido, ahí hice las cosas como me indicaste y pude compilar a la perfección :D
Lo único que la DLL se creó con extensión .exe: "DLL.exe" en lugar de "DLL.dll". Si cambio la extensión por .dll renombrando al archivo podría utilizarla como cualquier otra dll? Saludos y gracias! Título: Re: Error al compilar una DLL Publicado por: ivancea96 en 25 Julio 2017, 01:10 am Umh bueno, acerca de eso...
Code::Blocks tiene un tipo de proyecto que es Dynamic Link Library, DLL vaya. Si seleccionas ese tipo de proyecto al crearlo, te lo hace automáticamente todo esto. De todos modos, si va sa Propiedades del proyecto -> Build targets, verás que hay un selector, y una de sus opciones es "Dynamic library". En tu caso, por defecto estará puesto a "Console application", supongo. Si lo cambias ya debería estar, y ya no tendrías que poner el -shared (lo cierto es que esta opción mejor dejársela al IDE xD) Y con respecto a si cambiándole la extension funcionará, no lo sé. Prueba jaja |