Detectar si un archivo es executable...

Iniciado por Eleкtro, 23 Julio 2016, 15:19 PM

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

Eleкtro

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








MCKSys Argentina

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)

Ahora, existen aún los ejecutables de 16 bits, los cuales son NE (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) 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.
MCKSys Argentina

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


Eleкtro

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!