Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: black_flowers en 4 Febrero 2011, 00:07 am



Título: duda con getprocadress y kernel32.
Publicado por: black_flowers en 4 Febrero 2011, 00:07 am
hola, estoy intentando conseguir una shellcode basica para windows, y me encuentro con el siguiente problema, que no sé por qué sucede:

Tengo una shellcode que hace algo simple: llama a sleep y sale del proceso.
La cargo mediante una aplicación en c también simple que no hace otra cosa que cargarse y llamar ejecutar la shellcode.

Para obtener las direcciones de las funciones Sleep y ExitProcess lo he hecho mediante un programa en c que llama a getprocadress de esta forma:
GetProcAddress(LoadLibrary("kernel32.dll"),"ExitProcess")

y me devuelve la dirección de ExitProcess y lo mismo con sleep. Lo pongo en la shellcode y todo parece funcionar, pero el problema es que al reiniciar el ordenador GetProcAdress para la misma función me dá un valor distinto. De manera que tengo que obtener dicha dirección cada vez que apago o reinicio la máquina.

Por lo que vengo leyendo no parece muy normal. He visto que el programa sólo funcionaría en mi máquina pero no había visto en ningún sitio que tuviese que actualicar la dirección de las funciones cada vez que reinicio el sistema.

¿es eso normal? El sistema operativo que utilizo es windos7.

un saludo.


Título: Re: duda con getprocadress y kernel32.
Publicado por: Garfield07 en 4 Febrero 2011, 00:37 am
Que yo sepa Windows no aletoriza la memoria...
Vamos a ver, y si llamas a GetProcAdress en tu shellcode? Se llaman shellcodes universales.

La direccion solo cambia entre versiones y actualizaciones SP1-SPx. Por eso son shellcodes universales.
Una para Win7 32 Bits Home SP1 ira para todos los Win7 32 Bits Home SP1.

Suerte!


Título: Re: duda con getprocadress y kernel32.
Publicado por: Littlehorse en 4 Febrero 2011, 04:38 am
Citar
¿es eso normal? El sistema operativo que utilizo es windos7.

Si, es normal. Al reiniciar el sistema, entra en juego la denominada ASLR (http://en.wikipedia.org/wiki/Address_space_layout_randomization) (Address space layout randomization).

Citar
La direccion solo cambia entre versiones y actualizaciones SP1-SPx. Por eso son shellcodes universales.
Una para Win7 32 Bits Home SP1 ira para todos los Win7 32 Bits Home SP1.

No necesariamente. Los valores harcodeados podrían no ser validos entre los diferentes sistemas.

Saludos


Título: Re: duda con getprocadress y kernel32.
Publicado por: black_flowers en 4 Febrero 2011, 12:51 pm
Que yo sepa Windows no aletoriza la memoria...
Vamos a ver, y si llamas a GetProcAdress en tu shellcode? Se llaman shellcodes universales.

La direccion solo cambia entre versiones y actualizaciones SP1-SPx. Por eso son shellcodes universales.
Una para Win7 32 Bits Home SP1 ira para todos los Win7 32 Bits Home SP1.

Suerte!

no, es que no me he explicado bien, en realidad no llamo a getprocadress desde la shellcode. si así fuera está bien lo que tú dices y sería una shellcode universal, pero lo que yo hago es mucho más simple (ya he puesto en el título que es una shellcode básica). Lo que yo hago es obtener la dirección de la función con getprocadress, pero no desde la shellcode, sino que la obtengo con un programa en c, y luego pongo la dirección (tal cual) en mi shellcode con lo cual es harcodeada a más no poder  ;D

ahora sí que toca lo difícil que sería llamar a getprocadress desde la shellcode que eso ya va a ser más complicado.

un saludo.