jueves, 20 de septiembre de 2012

Dumpear un módulo en memoria a disco [Parte 2]

[-]Estructura de proceso y los módulos.

Como se ha dicho la ImageBase de un proceso, normalmente, es 0x400000 pero que hay antes de esa dirección bueno a grandes rasgos estan estructuras importantes algunas solo son accesibles desde modo kernel como la KPROCESS, EPROCESS, ETHREAD, KTHREAD y otras que necesitan permisos de administrador para accesar a ella como es la PEB y la TEB. A continuación se dará una pequeña explicación de cada una.
[*]EPROCESS. Contiene datos importantes del proceso, punteros otras estructuras ya mencionadas.
[*]KPROCESS. Es también llamada PCB contiene datos del stack es actualizada cada vez que el tiempo de uso del procesador de un proceso se ha agotado. Aunque no lo parezca el SO asigna un pequeño tiempo a cada proceso para que haga uso del procesador, este tiempo suele ser 10 a 100 nanosegundos dependiendo de la prioridad del proceso y al terminar ese tiempo se actualiza la PCB del proceso con los últimos valores.
[*]ETHREAD. Como sabemos en un proceso puede tener varios threads activos y cada thread tiene su propia tabla.
[*]KTHREAD. Tiene un puntero a la estructura TEB entre otros puntos.
[*]PEB. Contiene información del archivo orientada a los archivos y módulos activos, como el nombre del proceso, ruta del archivo, entrada al primer módulo, entre otras cosas.
[*]TEB. Contiene información del hilo, el PID del proceso al cual pertenece, el último error producido por el thread, etc.

Hasta aquí es una introducción a las estructuras si quieren profundizar mas en el tema los invito a leer el siguiente PDF contiene una explicación mas amplia de como inicia un proceso.
http://www.alex-ionescu.com/part1.pdf

Y en este link pueden encontrar las declaraciones de estructuras en C, bueno pueden encontrar gran parte de las estructuras de ring0.
http://www.nirsoft.net/kernel_struct/vista/

En este punto existe un espacio vacío ya que los bloques no ocupan mucho espacio, gracias a ello es posible mover la ImageBase cuando compilamos el proyecto o con alguna herramienta, en caso de que ImageBase + SizeOfImage ya este ocupada el Loader hace una Relocation que por ahora no entraremos en ese tema.

Una vez que termino la ImageBase, siguen todos los módulos cargados por el Loader alineados según sus propias cabeceras, se ha de recordar que las DLL y los EXE tienen la misma estructura solo que con diferentes flags activas.

En la próxima entrega comenzaremos con lo interesante, lo termino aquí porqué espero que la próxima entrada sea larga y no quiero fastidiar con la lectura.
Saludos!

No hay comentarios:

Publicar un comentario