duda con getprocadress y kernel32.

Iniciado por black_flowers, 4 Febrero 2011, 00:07 AM

0 Miembros y 2 Visitantes están viendo este tema.

black_flowers

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.

Garfield07

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!


* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo

Littlehorse

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

Si, es normal. Al reiniciar el sistema, entra en juego la denominada ASLR (Address space layout randomization).

CitarLa 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
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

black_flowers

#3
Cita de: Sagrini 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!

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.