• Domingo 16 de Mayo de 2021, 00:56

Autor Tema:  Program headers de un ELF  (Leído 2860 veces)

clicklose

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Program headers de un ELF
« en: Lunes 14 de Febrero de 2011, 23:21 »
0
A ver, no se si me podrán responder esto. Perdón si es que va en otro foro, pero imagino que quienes puedan responder son las personas mas metidas en assembler

Los ficheros ELF de GNU/Linux tienen una estructura de tablas para el Program Header llamadas Program Headers Tables o PHT. Según ciertos campos de estas tablas se describen qué secciones deben cargarse en memoria, los permisos que deben tener, offset's y demás datos importantes.
El primer campo de estas estructuras es p_type y toma valores
  Name             Value
  ====             =====
  PT_NULL              0
  PT_LOAD              1
  PT_DYNAMIC         2
  PT_INTERP            3
  PT_NOTE              4
  PT_SHLIB              5
  PT_PHDR              6
  PT_LOPROC   0x70000000
  PT_HIPROC      0x7fffffff

Mi duda es la siguiente, los segmentos text y data son de tipo PT_LOAD. Mi planteo es, si yo creo un nuevo segmento de tipo 1 y redirijo el entry point a una dirección de ese segmento, se daría que todo el text se cararía ese nuevo segmento que creo?
No se si quedó entendible mi pregunta :S . Pero mi idea es saber cómo decir qué cosas se deben cargar en cada segmento si creo alguno nuevo.

Saludos

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Program headers de un ELF
« Respuesta #1 en: Lunes 14 de Febrero de 2011, 23:59 »
0
Cita de: "clicklose"
Mi planteo es, si yo creo un nuevo segmento de tipo 1 y redirijo el entry point a una dirección de ese segmento, se daría que todo el text se cararía ese nuevo segmento que creo?
No entiendo muy bien tu pregunta, pero si te refieres a que si se ejecutaría tu código, la respuesta es sí.

clicklose

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Program headers de un ELF
« Respuesta #2 en: Martes 15 de Febrero de 2011, 04:52 »
0
lo que no termino de entender es que esta asociado a cada entrada del program header
La estructura según he leído es: (para un elf ejecutable)
ELF Header
Programs Header
Segmento 1 (creo q es el text)
Segmento 2 (creo q es el data)
Sections Headers
Section 1
.
.
.
Section n

Mi pregunta es: Cómo sabe el SO a qué se relaciona cada entrada del program header? Si creo una tabla mas en el PH y la hago p_type LOAD, cómo indico qué es lo que debe cargarse allí? Para eso sirven las section headers?

Perdón por el lío, es que no logro resolver esa duda :S

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Program headers de un ELF
« Respuesta #3 en: Martes 15 de Febrero de 2011, 11:42 »
0
Con las cabeceras de sección (section headers). Tuve que hacer un cargador de ELFs para la PSP (la consola) para un proyecto de hacking, si quieres échale un vistazo, así ves cómo funciona. También tienes bastante información en el fichero elf.h. Aquí también tienes una explicación.

Saludos

clicklose

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Program headers de un ELF
« Respuesta #4 en: Jueves 17 de Febrero de 2011, 12:59 »
0
Bueno, a ver. Primero que nada quiero decir que todo lo que se ve en internet sobre las especificaciones ELF está algo errado o al menos incompleto

Creo que ya entendí como funciona todo, y me parece que tampoco son los section headers los responsables de que todo se cargue bien, porque de hecho probé borrarlos con el bless y el ejecutable anda igual, sucede que lo que hace que se cargue bien son dos parámetros de PHT que serían el offset y el filesz.
Tengo que programar el virus, así que cuando termine si todo funciona bien pongo mi conclusión a ver si coincidimos.
Te doy mil gracias por la ayuda

Saludos

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Program headers de un ELF
« Respuesta #5 en: Jueves 17 de Febrero de 2011, 13:31 »
0
Bueno, el estándar ELF deja muchos puntos abiertos para abarcar más posibilidades. Ya me comentas cuando hayas avanzado.

Saludos.

clicklose

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Program headers de un ELF
« Respuesta #6 en: Lunes 28 de Febrero de 2011, 19:20 »
0
Uh, me re colgué para responder, perdón.
El virus anda bien :)
La sections header table en archivos ELF ejecutables son completamente ignorados por el SO a la hora de cargarse en memoria (de hecho la especificación ELF establece que para archivos ejecutables la SHT es completamente opcional)
Al parecer lo que hace el SO es leer del PHT el offset físico en el archivo de cada segmento que se cargará y el tamaño físico, y luego cuando debe cargar el programa simplemente "mueve esa parte del archivo" a memoria.
De todas formas los SHT deben actualizarse tras una infección para que al leer el archivo con readelf por ejemplo no salte que está corrupto, fuera de este detalle el programa carga igual sin problemas si uno no modifica los SHT. Incluso pueden ser borrados del archivo y este se ejecutará correctamente.
En fin, mil gracias de nuevo.

Saludos

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Program headers de un ELF
« Respuesta #7 en: Martes 1 de Marzo de 2011, 16:01 »
0
Depende del SO. Por ejemplo en PSP no se ignoran los SHT. Como decía antes, el formato ELF es abierto a interpretación por parte de la implementación en sí del SO en cuestión.

Saludos y enhorabuena  :good:  :hola:

clicklose

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Re: Program headers de un ELF
« Respuesta #8 en: Miércoles 9 de Marzo de 2011, 18:36 »
0
Perdón, nuevamente me retrasé para responder :(

Tienes razón, lo que digo es válido para los sistemas GNU/Linux en este caso

Saludos