24Aug

Magic Numbers: Los códigos secretos que los programadores esconden en tu PC

click fraud protection

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 apretones de manos 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 entero de 32 bits para representar ciertos tipos de datos detrás de escena: internamente el número se almacena en la RAM o el CPU lo utiliza como 32 unos y ceros, pero en el código fuente se escribiría enya sea en formato decimal regular, o como formato hexadecimal, que usa 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 mirar hacia el principio del archivopara un marcador especial que significa 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 equivale a "PK", que desciende de la utilidad PKZip original. Al observar esta "firma", se puede identificar fácilmente un tipo de archivo incluso sin ningún otro metadato.

instagram viewer

Los archivos compilados de la clase Java comienzan con CAFEBABE

El archivo de utilidad de Linux se puede usar desde la terminal para determinar el tipo de archivo; de hecho, lee los números mágicos de un archivo llamado "magia".

Cuando una aplicación quierepara llamar a una función, puede pasar valores a esa función usando tipos estándar como entero, que se puede expresar en el código fuente en formato hexadecimal. Esto es especialmente cierto para las constantes, que son identificadores definidos con nombres legibles por el ser humano, como AUTOSAVE_INTERVAL, pero se asignan a valores enteros reales( u otro tipo).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 una mejor legibilidad.(Las constantes generalmente se reconocen fácilmente porque están escritas en mayúsculas).

Todos estos ejemplos pueden incluirse en el término Magic Numbers, 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, pueden definir estos valores usando números hexadecimales que deletrean algo en inglés, también conocido como hexspeak.

Diversión con números mágicos: algunos ejemplos notables

Cada AppleScript termina con FADEDEAD

Si echas un vistazo rápido al código fuente de Linux, verás que la llamada al sistema _reboot() en Linux requiere que se pase una variable "mágica"eso equivale al número hexadecimal 0xfee1dead. Si algo intentara llamar a esa función sin pasar primero ese valor mágico, simplemente devolvería un error.

El GUID( identificador único global) para una partición de arranque del BIOS en el esquema de particiones GPT es 21686148-6449-6E6F-744E-656564454649, que forma la cadena ASCII "Hah! IdontNeedEFI", una alusión al hecho de que GPT normalmente seríautilizado en computadoras que reemplazaron el BIOS con UEFI, pero no necesariamente tiene que ser así.

Microsoft escondió 0x0B00B135 en su máquina virtual Hyper-V, admitió el código fuente enviado a Linux, luego cambiaron el valor a 0xB16B00B5, y finalmente lo cambiaron a decimal antes de ser eliminado por completo del código fuente.

Más ejemplos divertidos incluyen:

  • 0xbaaaaaad: utilizado por el registro de bloqueo de iOS para indicar que un registro es un apilamiento de todo el sistema.
  • 0xbad22222: utilizado por el registro de bloqueo de iOS para indicar que iOS ha matado a una aplicación de VoIP porque se comportaba mal.
  • 0x8badf00d -( Ate Bad Food) utilizado por los registros de bloqueo de iOS para indicar que una aplicación tardó demasiado en hacer algo y que el tiempo de espera del perro guardián lo mató.
  • 0xdeadfa11 -( Dead Fall) utilizado por el registro de bloqueo de iOS cuando el usuario abandona forzadamente una aplicación.
  • 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 identificador de los archivos de clase compilados
  • 0x0D15EA5E( Disease) utilizados por Nintendo en Gamecube y Wii para indicar que se produjo un arranque normal.
  • 0x1BADB002( 1 arranque incorrecto) utilizado por la especificación de arranque múltiple como un número mágico
  • 0xDEADDEAD: utilizado por Windows para indicar un error de depuración iniciado manualmente, también conocido como la Pantalla azul de la muerte.

Estos no son los únicos, por supuesto, pero solo una breve lista de ejemplos que parecían divertidos.¿Sabes de algo más? Dinos en los comentarios.

Ver ejemplos para usted mismo

Puede ver más ejemplos abriendo un editor hexadecimal y luego abriendo cualquier cantidad de tipos de archivos. Hay muchos editores hexadecimales gratuitos disponibles para Windows, OS X o Linux; solo asegúrese de tener cuidado al instalar el software gratuito para no infectarse con el software malicioso o el 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 cambia nada mientras mira alrededor.¡Los editores de Hex pueden romper cosas!