TLS Callbacks en ejecutables unix ELF

Iniciado por makitos666, 20 Marzo 2018, 14:02 PM

0 Miembros y 1 Visitante están viendo este tema.

makitos666

Hola, buenas tardes a todos!

Estoy empezando a aventurarme en las entrañas de los ejecutables para Linux. Creía que serian parecidos a los PE, pero madre mía que follón!

En los PE había las famosas TLS Callbacks que permitían añadir código ejecutable antes del entry point del PE, lo que los hacia un poco mas reacios a ser reverseados.

La pregunta que me trae hoy aquí es: hay algún símil para los ELF?
Ya he visto que esto del TLS callback no existen en este mundo, pero hay algún otro modo de ejecutar código antes del entry point?

Muchas gracias a todos!

Geovane

¡Hola

la solución que conozco es editando el encabezado ELF en HEXA.
añadir una dependencia (biblioteca), a continuación, escribir lo deseado en este nuevo ejecutable.

SALUDOS
Para servicios, envíe un mensaje privado, sólo para servicios en curso hasta fecha de 10/06/2019

makitos666

Buenas,

Si que he leído por ahí que se pueden modificar los imports, para, como en Windows, inyectar código a través de las librerías.
Pero eso me asegura que ese código que yo pondré se ejecutara antes del código que se encuentra en el Entry Point del ELF?

Gracias!

MCKSys Argentina

Cita de: makitos666 en 21 Marzo 2018, 14:30 PM
Pero eso me asegura que ese código que yo pondré se ejecutara antes del código que se encuentra en el Entry Point del ELF?

No trabajo mucho en Linux, pero si funciona como en Windows, el main de cada DLL importada se ejecuta antes del EP del ejecutable.

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


makitos666

Tiene sentido, supongo que lo mejor sera probar con un "Hello World" y debugear

Gracias a todos!

makitos666

Cita de: MCKSys Argentina en 21 Marzo 2018, 15:09 PM
No trabajo mucho en Linux, pero si funciona como en Windows, el main de cada DLL importada se ejecuta antes del EP del ejecutable.

Saludos!

Pues he probado, con este código sencillo:



He compilado la librería foo para luego importarla como dinámica en el main.

Tras analizar el main compilado con radare2, he identificado el Entry Point, he abierto el ejecutable con EDB Debugger, he puesto un breakpoint. El resultado es el siguiente:



Puedo así concluir que, como bien decías, los constructores de las librerías se ejecutan antes del Entry Point del ejecutable.

Gracias!