¿Puedo editar los bytes del encabezado de un archivo .EXE pero aún conservar un programa que funcione?

2

Como sabemos, los archivos exe generalmente comienzan con 4D5A o 'MZ' en ASCII. ¿Cómo cambiaría el encabezado y permitiría que el archivo funcione normalmente?

En este momento estoy mirando el archivo exe de ccleaner. Lamentablemente, no tengo 10 repeticiones, así que no puedo publicar una captura de pantalla, pero el ASCII de la derecha dice que el programa no se puede ejecutar en ASCII, por lo que el 4D5A es inútil. Entonces, técnicamente, ¿podría cambiar el 4D5A a otra cosa y aún funcionaría?

Si hay muchachos de la vieja escuela aquí, se agradecería mucha información sobre el 'DOS MZ'.

Esta es la imagen que estaba mirando:

CCleaner Hex View

BubbleMonster
fuente

Respuestas:

3

¿Cómo cambiaría el encabezado y permitiría que el archivo funcione normalmente?

No puedes!

Hay una razón por la cual la MZcadena (que representa 16 bits 0x5A4D) se conoce como un número "mágico" y, de hecho, se requiere según la especificación EXE / PE (con raíces que se remontan a los archivos ejecutables en formato DOS). El diseño de todos los ejecutables portátiles modernos aparece de la siguiente manera ( ref ):

ingrese la descripción de la imagen aquí

En este artículo de MSDN sobre el formato ejecutable portátil, se detalla el encabezado de MS-DOS:

El encabezado de MS-DOS

Cada archivo PE comienza con un pequeño ejecutable de MS-DOS®. La necesidad de este stub ejecutable surgió en los primeros días de Windows, antes de que un número significativo de consumidores lo ejecutara. Cuando se ejecuta en una máquina sin Windows, el programa al menos puede imprimir un mensaje que dice que se requiere Windows para ejecutar el ejecutable.

Los primeros bytes de un archivo PE comienzan con el encabezado tradicional de MS-DOS, llamado IMAGE_DOS_HEADER. Los únicos dos valores de alguna importancia son e_magicy e_lfanew. El e_lfanewcampo contiene el desplazamiento del archivo del encabezado PE.

El e_magiccampo (una PALABRA [NB: 16 bits] ) debe establecerse en el valor 0x5A4D. Hay un #definepara este valor, llamado IMAGE_DOS_SIGNATURE. En representación ASCII, 0x5A4Des decir MZ, las iniciales de Mark Zbikowski, uno de los arquitectos originales de MS-DOS.


Para obtener más información sobre el formato de Windows PE / .EXE, le recomiendo que consulte la sección Archivos ejecutables de Windows del Wikibook de desmontaje x86 . Contiene una amplia gama de información de bajo nivel sobre el formato.

Gran descubrimiento o desarrollo, progreso, ruptura, penetracion
fuente
Gracias por la respuesta. El libro x86 se ve fantástico. Le dará una lectura completa.
BubbleMonster
@BubbleMonster Estoy de acuerdo, que el libro de desmontaje x86 es muy útil e informativo. También puede encontrar el x86 Assembly Wikibook otro gran recurso, que complementa bastante bien el x86 Disassembly Wikibook.
Avance del