elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Análisis y Diseño de Malware (Moderador: fary)
| | |-+  Pequeña duda sobre la reserva de memoria al crear un proceso
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Pequeña duda sobre la reserva de memoria al crear un proceso  (Leído 3,118 veces)
lessionone

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Pequeña duda sobre la reserva de memoria al crear un proceso
« en: 22 Abril 2012, 11:54 am »

Hola buenas, tengo unas pequeñas dudas.

¿Yo cuando creo un proceso se le asigna una cantidad de bytes de la memoria ram y una direcion aleatoria en dicha memoria?

De ser lo anterior correcto, ¿El espacio que se le asigna en la memoria es igual a los bytes que tiene el programa el cual a creado el proceso?

Si no me he explicado bien por favor decirmelo e intento explicarme mejor.
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Pequeña duda sobre la reserva de memoria al crear un proceso
« Respuesta #1 en: 22 Abril 2012, 16:26 pm »

El espacio de memoria de un proceso no tiene porque acabar estando en la memoria RAM, sino que también puede acabar en el archivo de paginación.

En ese espacio se mete todo tú ejecutable con las secciones pertinentes y se cargan todas las DLLs que éste necesite. La dirección base donde se coloca el ejecutable está establecida en el PE Header del mismo y puede ser colocado de forma *aleatoria* si está activado el ASLR.

Así pues, respondiendo a tus preguntas:
1- No siempre es en la memoria RAM. No siempre es *aleatoria* la dirección base para la copia.
2- El espacio es mayor.

PD: Todo estos conocimientos los he adquirido en la practica, así que puede que algún detalle se me escape.

Saludos
En línea

lessionone

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Re: Pequeña duda sobre la reserva de memoria al crear un proceso
« Respuesta #2 en: 22 Abril 2012, 18:41 pm »

Karcrack un 10, muy bien respondido, pero yo estoy muy verde con el tema de trabajo en memorias y quiero darle practica con el visual para ver como funciona esto.

Se que el archivo de paginacion es el pagefile.sys en windows y se que este es como un archivo de apoyo a la memoria ram intercambiando datos para su carga en la memoria (vamos como la cache ayuda al procesador), pero no nos vamos a meter mas de lleno y pregunto:

1º ¿El archivo de paginacion es lo mismo que la memoria virtual?

2º Si yo llamo a un proceso, por ejemplo, la calculadora de window(calc.exe) y deseo vaciar del espacio que se le a asignado a los datos del ejecutable calc.exe, dll y todo lo que haya en ese espacio asignado. Si no he iniciado el proceso, sino que lo tengo suspendido, ¿Como podria vaciar ese espacio? En un principio mi pregunta es solo como puedo vaciar ese espacio para luego cargar otro codigo.

Esto de trabajar con el formato de los ejecutables y su carga en la memoria creo que es fundamental aprender bien para la creacion de malware
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Pequeña duda sobre la reserva de memoria al crear un proceso
« Respuesta #3 en: 22 Abril 2012, 21:09 pm »

Para compreder la carga de ejecutables on the fly viendo un runPE cualquiera verás que lo primero que hace es desmapear (respondiendo a tu pregunta #2), esto es: vaciar todo el espacio que el cargador de windows había commiteado. Una vez vacío ya empiezas a mapear las zonas de memoria siguiendo lo especificado en el PE Header.

Si te surge cualquier duda ya sabes que para eso estamos ;)
En línea

lessionone

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Re: Pequeña duda sobre la reserva de memoria al crear un proceso
« Respuesta #4 en: 22 Abril 2012, 21:58 pm »

ufff, vamos a echarle dos wevos y a ver si aprendo algo.
Dices de que un runpe vacia el espacio que el cargador de windows habia asignado a ese proceso y me he puesto a mirar un runpe en visual.
CallAPI("ntdll", "NtUnmapViewOfSection", Pi.hProcess, Pinh.OptionalHeader.ImageBase)
Desgraciadamente a mi no me enseñaron el uso de Apis y ni idea sobre estas pero a ver si acierto:
1º ntdll: Llama a una libreria llamada ntdll de las que se instalan con el windows.
2º NtUnmapViewOfSection la libreria anterior le dice el espacio que esta cogiendo el servicio y que la vacie(como si fuera una llamada a un sub que se encargara de vaciarla)
3º Pi.hProcess: Un argumento que identifica el proceso
4º Pinh.OptionalHeader.ImageBase: ¿es otro argumento que va a ser un numero?, ¿probablemente la direccion de memoria donde se carga el ejecutable?
Si alguien me manda un manual de apis en español para cogerlo rapido o me lo explica muy sencillo lo que hacen pues mejor que mejor ;)
Me da la sensacion que las apis son como librerias ya creadas, pero call api yo nunca lo he usado, lo maximo es crear una .dll y luego usarlas aunque no me acuerdo en .net como lo hacia, jejeje.
Graciasssss.
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Pequeña duda sobre la reserva de memoria al crear un proceso
« Respuesta #5 en: 22 Abril 2012, 23:49 pm »

Las librerías que contienen la API de Windows vienen en diversos formatos, uno de ellos es con DLLs. Éstas puedes imaginarlas como librerías [de libros] donde cada libro sería una función, con un identificador (título).

En este caso la librería tendría como nombre: "NTDLL". Esta librería se caracteriza por contener las funciones de nivel más inferior accesible desde el modo de usuario. Y el libro, "NtUnmapViewOfSection" es el que contiene el código para vaciar la memoria del proceso.

Lo único que me queda por añadir es que el elemento del PE Header llamado ImageBase contiene la dirección base a partir de la cual se meterán los datos. Y que será utilizado también en algunos de los elementos restantes del PE que tienen direcciones relativas en lugar de absolutas. Como curiosidad añado que algunos ficheros PE contienen información de relocalización (.reloc) que permite realojar el PE en otras direcciones base (ImageBase).

Saludos :)
En línea

lessionone

Desconectado Desconectado

Mensajes: 32


Ver Perfil
Re: Pequeña duda sobre la reserva de memoria al crear un proceso
« Respuesta #6 en: 23 Abril 2012, 12:15 pm »

ok, muchas gracias Karcrack.
Código:
CallAPI("ntdll", "NtUnmapViewOfSection", pInfo.hProcess, Pinh.OptionalHeader.ImageBase)
'-----------------------------------------------------------------------
 Private Function CallAPI(ByVal sLib As String, ByVal sMod As String, ByVal ParamArray Params() As Object) As Integer
        Dim lPtr As Integer
        Dim bvASM(&HEC00 - 1) As Byte
        Dim i As Integer
        Dim lMod As Integer
        lMod = GetProcAddress(LoadLibraryA(sLib), sMod)
End Function

&HEC00 ¿Esto que es? He cambiado el proceso y siempre es 60416, no entiendo por que debe de ser esto, este valor es decimal pero ¿porque 60416?
En línea

Karcrack


Desconectado Desconectado

Mensajes: 2.416


Se siente observado ¬¬'


Ver Perfil
Re: Pequeña duda sobre la reserva de memoria al crear un proceso
« Respuesta #7 en: 23 Abril 2012, 15:26 pm »

Es sencillamente un valor constante (0xEC00 -1), usado para crear un buffer lo suficientemente grande para meter todos los argumentos que quieras pasarle al puntero al que llamas.

De nada, para eso estamos ;)
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pequeña duda sobre WMI
Programación Visual Basic
ŞCØRPIØN-X3 2 2,123 Último mensaje 13 Mayo 2011, 04:58 am
por ŞCØRPIØN-X3
Pequeña duda sobre Archivos en C
Programación C/C++
theluigy13etv 3 2,152 Último mensaje 30 Junio 2011, 11:53 am
por Akai
Duda personal sobre proceso de creación.
Foro Libre
m0rf 2 1,838 Último mensaje 16 Junio 2012, 22:04 pm
por m0rf
[Duda] sobre un Proceso
Seguridad
Saumix 7 4,326 Último mensaje 23 Junio 2013, 00:37 am
por burbu_1
Pequeña duda sobre palabra reservada new y espacios en memoria
Programación C/C++
Beginner Web 4 1,579 Último mensaje 14 Septiembre 2018, 08:41 am
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines