¿Cómo hallar un magic number con Python?

| Última modificación: 18 de abril de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

¿Sabes cómo hallar un magic number con Python? ¿Sabías que hay una manera de conocer de forma inequívoca el formato de un archivo y, de este modo, reconocer si se trata de un malware? Los magic numbers son datos que nos permiten reconocer con certeza el tipo de fichero ante el cual nos encontramos y, por eso, son importantes en ciberseguridad. A continuación, te enseñaremos cómo hallar un magic number por medio de un programa de Python.

¿Qué es un magic number?

Un magic number es un conjunto de datos que ocupa los primeros bytes de información de un fichero. De este modo, se puede identificar inequívocamente el formato del mismo y, así, sabremos ante qué tipo de archivo nos encontramos en análisis de malware. Un error común consiste en identificar el formato de un fichero por medio de su extensión, ya que esta puede ser modificada con facilidad. El magic number es inamovible.

¿Cómo hallar un magic number con Python?

Ahora, veremos cómo hallar un magic number con Python. Para ello, comenzaremos creando un archivo de Python llamado “magic_number.py“. Después, introduciremos las siguientes líneas de código en el archivo:

import os, binascii

doc_magics = ['D0CF11E0', '504B0304', 'ECEF786D']
rtf_magics = ['7B5C727466', '7B5C7274']
pdf_magics = ['2550446']
exe_magics = ["4D5A"]
eml_magics = ["5265636569766564", "44656C6976657265"]

filename = os.path.join(os.path.dirname(os.path.abspath(__file__)), "files", "executable.exe")
content = open(filename, 'rb') .read()

exe_hex_magic = binascii.hexlify(content[:2]).upper().decode('ascii')
hex_magic = binascii.hexlify(content[:4]).upper().decode('ascii')
rtf_hex_magic = binascii.hexlify(content[:5]).upper().decode('ascii')
eml_hex_magic = binascii.hexlify(content[:8]).upper().decode('ascii')

if exe_hex_magic in exe_magics:
print("El fichero {0} es un ejecutable".format(filename.spplit('\\')[-1]))
elif rtf_hex_magic in rtf_magics:
print ("El fichero {0} es un RTF".format(filename.split(''\\')[-1]))
elif hex_magic in doc_magics:
print("El fichero {0} es un DOC".format(filename.split(''\\')[-1]))
elif hex_magic in pdf_magics:
print("El fichero {0} es un PDF".format(filename.split(''\\')[-1]))
elif eml_hex_magic in eml_magics:
print("El fichero {0} es un EML".format(filename.split(''\\')[-1]))

En la primera sección del código encontrarás los magic numbers de los formatos de los tipos de ficheros más comunes. Sin embargo, allí puedes agregar todos los que desees.

En la cadena:

filename = os.path.join(os.path.dirname(os.path.abspath(__file__)), "files", "executable.exe")

Recuerda cambiar el término “executable.exe” por el nombre del archivo que desees analizar. Ahora, finalmente, para ejecutar el programa, debes ir a consola y hacerlo desde allí. De acuerdo con la máquina que estés utilizando y el directorio en el que hayas creado el fichero, se verá algo así la línea de código y la pantalla de la ejecución:

python.exe magic_number.py
Ejemplo tomado de uno de nuestros bootcamps.

🔴 ¿Quieres entrar de lleno a la Ciberseguridad? 🔴

Descubre el Ciberseguridad Full Stack Bootcamp de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp en Ciberseguridad por una semana

Como resultado, obtendremos el mensaje predeterminado que hayamos escogido para cada tipo de fichero.

Librería de magic numbers

Ya hemos visto cómo hallar un magic number con Python y por qué es un programa útil para el análisis de malware. Sin embargo, no hemos mencionado aún las fuentes en las que podrás encontrar estos números y a qué tipo de fichero corresponden. Para ello, debes acceder a una lista de firmas digitales de formatos, como la que ofrece la página de Wikipedia. De allí, podrás tomar los datos necesarios para preparar tu programa para encontrar un magic number con Python.

¿Cómo aprender más?

Ya has aprendido cómo encontrar un magic number con Python. Si quieres saber más y convertirte en un analista experto de malware, en KeepCoding tenemos el curso indicado para que profundices en tu formación. Ingresa a nuestro Ciberseguridad Full Stack Bootcamp y podrás especializarte en tan solo 7 meses, gracias nuestro temario íntegro e intensivo en el que aprenderás de forma tanto teórica como práctica acompañado de grandes profesionales en el sector. ¿A qué sigues esperando? ¡Inscríbete ya y conviértete en un experto!

Carlos Cilleruelo

CEO and co-founder of Byron Labs & Coordinador del Bootcamp en Ciberseguridad.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Ciberseguridad

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado