Números mágicos Los códigos secretos que los programadores esconden en tu PC
Desde que la primera persona escribió 5318008 en una calculadora, los nerds han estado ocultando números secretos dentro de su PC y usándolos para negociar acuerdos secretos entre aplicaciones y archivos. Hoy echamos un vistazo rápido a algunos de los ejemplos más entretenidos..
¿Qué son los números mágicos??
La mayoría de los lenguajes de programación usan un tipo de entero de 32 bits para representar ciertos tipos de datos detrás de escena: internamente, el número se almacena en la RAM o es utilizado por la CPU como 32 unidades y ceros, pero en el código fuente se escribirá en cualquiera Formato decimal regular o formato hexadecimal, que utiliza los números del 0 al 9 y las letras de la A a la F.
Cuando el sistema operativo o una aplicación quiere determinar el tipo de archivo, puede buscar en el principio del archivo un marcador especial que indique el tipo de archivo. Por ejemplo, un archivo PDF puede comenzar con el valor hexadecimal 0x255044462D312E33, que equivale a "% PDF-1.3" en formato ASCII, o un archivo ZIP comienza con 0x504B, que es igual a "PK", que desciende de la utilidad PKZip original. Al observar esta "firma", un tipo de archivo se puede identificar fácilmente incluso sin ningún otro metadato.
Los archivos compilados de Java Class comienzan con CAFEBABEEl "archivo" de la utilidad Linux se puede usar desde el terminal para determinar el tipo de archivo; de hecho, lee los números mágicos de un archivo llamado "magia".
Cuando una aplicación quiere llamar a una función, puede pasar valores a esa función utilizando tipos estándar como entero, que se pueden expresar en el código fuente en formato hexadecimal. Esto es especialmente cierto para las constantes, que son identificadores definidos con nombres legibles para las personas, como AUTOSAVE_INTERVAL, pero se asignan a valores enteros (u otro tipo) reales. Entonces, en lugar de que un programador escriba un valor como 60 cada vez que llaman a la función en el código fuente, podrían usar la constante AUTOSAVE_INTERVAL para mejorar la legibilidad. (Las constantes generalmente se reconocen fácilmente porque están escritas con letras mayúsculas).
Todos estos ejemplos pueden incluirse en el término Números mágicos, ya que pueden requerir un número hexadecimal específico para que una función o tipo de archivo funcione correctamente ... si el valor no es correcto, no funcionará. Y cuando un programador quiere divertirse un poco, puede definir estos valores utilizando números hexadecimales que explican algo en inglés, también conocido como hexspeak.
Diversión con números mágicos: algunos ejemplos notables
Cada AppleScript termina con FADEDEADSi echa un vistazo rápido al código fuente de Linux, verá que la llamada al sistema _reboot () en Linux requiere que se pase una variable "mágica" que sea igual al número hexadecimal 0xfee1dead. Si algo intentara llamar a esa función sin pasar ese valor mágico primero, solo devolvería un error.
El GUID (identificador único global) para una partición de arranque BIOS en el esquema de partición GPT es 21686148-6449-6E6F-744E-656564454649, que forma la cadena ASCII "Hah! IdontNeedEFI", una alusión al hecho de que GPT normalmente se usaría en las computadoras que reemplazaron el BIOS con UEFI, pero no necesariamente tiene que estar.
Microsoft ocultó 0x0B00B135 en su máquina virtual Hyper-V que admite el código fuente enviado a Linux, luego cambiaron el valor a 0xB16B00B5 y finalmente lo cambiaron a decimal antes de que fuera eliminado del código fuente por completo.
Más ejemplos divertidos incluyen:
- 0xbaaaaaad: utilizado por el registro de fallas de iOS para indicar que un registro es una pila de todo el sistema.
- 0xbad22222: utilizado por el registro de fallas de iOS para indicar que iOS mató a una aplicación de VoIP porque no funcionó correctamente.
- 0x8badf00d - (Ate Bad Food) utilizado por los registros de bloqueo de iOS para indicar que una aplicación tomó demasiado tiempo para hacer algo y fue eliminada por el tiempo límite de vigilancia..
- 0xdeadfa11 - (Dead Fall) utilizado por el registro de bloqueo de iOS cuando una aplicación es forzada por un usuario.
- 0xDEADD00D: utilizado por Android para indicar un aborto de VM.
- 0xDEAD10CC (Dead Lock) utilizado por el registro de bloqueo de iOS cuando una aplicación bloquea un recurso en segundo plano.
- 0xBAADF00D (Bad Food) utilizado por la función LocalAlloc en Windows para la depuración.
- 0xCAFED00D (Cafe dude) utilizado por la compresión pack200 de Java.
- 0xCAFEBABE (Cafe babe) utilizado por Java como el identificador para archivos de clase compilados
- 0x0D15EA5E (enfermedad) utilizada por Nintendo en Gamecube y Wii para indicar que ocurrió un arranque normal.
- 0x1BADB002 (1 mal arranque) usado por la especificación de arranque múltiple como un número mágico
- 0xDEADDEAD: usado por Windows para indicar un bloqueo de depuración iniciado manualmente, también conocido como la pantalla azul de la muerte.
Estos no son los únicos, por supuesto, sino solo una breve lista de ejemplos que parecían divertidos. ¿Sabes algo más? Dinos en los comentarios.
Viendo ejemplos para ti mismo
Puedes ver más ejemplos abriendo un editor hexadecimal y luego abriendo cualquier número de tipos de archivos. Hay muchos editores hexadecimales de software gratuito disponibles para Windows, OS X o Linux. Solo asegúrese de tener cuidado al instalar el software gratuito para no infectarse con crapware o spyware..
Como ejemplo adicional, las imágenes de recuperación para teléfonos Android como ClockworkMod comienzan con "ANDROID!" Si se leen en formato ASCII.
Nota: No vayas a cambiar nada mientras miras a tu alrededor. Los editores de maleficios pueden romper cosas!