Foro de elhacker.net

Programación => Ingeniería Inversa => Mensaje iniciado por: Eleкtro en 23 Julio 2016, 15:19 pm



Título: Detectar si un archivo es executable...
Publicado por: Eleкtro en 23 Julio 2016, 15:19 pm
Hola

Tengo la siguiente duda que me ronda la cabeza...

¿Los primeros 2 bytes de un executable de 32 y 64 Bit siempre será el string "MZ" en UTF-8, SIN EXCEPCIÓN ALGUNA, ya esté desarrollado en C++, Delphi, .NET y etc., o ya sea un SFX (archivo autoextraible), un exe empacado/ofuscado/protegido o cualquier otro tipo de executable de la familia Windows?

En caso contrario, ¿cuales podrían ser las excepciones?

¡Gracias de antemano!

Saludos


Título: Re: Detectar si un archivo es executable...
Publicado por: MCKSys Argentina en 23 Julio 2016, 17:16 pm
Los ejecutables de 32 y 64 bits (.exe, .dll, .sys, etc) de los OS's modernos, comenzarán com "MZ" ya que son archivos PE ó PE+ (https://en.wikipedia.org/wiki/Portable_Executable (https://en.wikipedia.org/wiki/Portable_Executable))

Ahora, existen aún los ejecutables de 16 bits, los cuales son NE (https://en.wikipedia.org/wiki/New_Executable (https://en.wikipedia.org/wiki/New_Executable))

Cabe destacar que también están los LE (Linear Executables: http://fileformats.archiveteam.org/wiki/Linear_Executable (http://fileformats.archiveteam.org/wiki/Linear_Executable)) pero estos también comienzan con "MZ".

Ojo, para determinar si es un ejecutable, deberías colocar más checks aparte de que comience con "MZ" solamente. Por ej., podrías buscar el "PE" que está en el offset marcado por el campo e_Ifanew del MSDOS HEADER.

Saludos!

EDIT: Lo anterior es para Windows.


Título: Re: Detectar si un archivo es executable...
Publicado por: Eleкtro en 24 Julio 2016, 07:49 am
Muchas gracias MCKSys Argentina

Iba a mencionar lo de los antiguos executables de 16 Bit pero me parecía inoportuno y no quería hacer más pesado de leer el mensaje xD. Eso sí, no tenía ni idea de que se le denominaba "New Executable", es interesante.

Saludos!