24Aug
Depuis que la première personne a écrit 5318008 sur une calculatrice, les nerds ont caché des numéros secrets à l'intérieur de votre PC, et les utilisent pour négocier des poignées de main secrètes entre les applications et les fichiers. Aujourd'hui, nous examinons quelques-uns des exemples les plus divertissants.
Que sont les nombres magiques?
La plupart des langages de programmation utilisent un type entier 32 bits pour représenter certains types de données en arrière-plan. En interne, le numéro est stocké dans la RAM ou utilisé par le CPU comme 32 uns et zéros, mais dans le code source, il est écritformat décimal régulier, ou en format hexadécimal, qui utilise les chiffres 0 à 9 et les lettres A à F.
Lorsque le système d'exploitation ou une application veut déterminer le type d'un fichier, il peut regarder au début du fichierpour un marqueur spécial qui indique le type du fichier. Par exemple, un fichier PDF peut commencer avec la valeur hexadécimale 0x255044462D312E33, qui est égale à "% PDF-1.3" au format ASCII, ou un fichier ZIP commençant par 0x504B, ce qui correspond à "PK", qui descend de l'utilitaire PKZip original. En regardant cette "signature", un type de fichier peut être facilement identifié même sans aucune autre métadonnée.
L'utilitaire Linux "file" peut être utilisé depuis le terminal pour déterminer le type d'un fichier - en fait, il lit les nombres magiques d'un fichier appelé "magic".
Quand une application veutPour appeler une fonction, il peut transmettre des valeurs à cette fonction en utilisant des types standard comme integer, qui peuvent être exprimés dans le code source au format hexadécimal. Cela est particulièrement vrai pour les constantes, qui sont des identificateurs définis avec des noms lisibles par un humain, tels que AUTOSAVE_INTERVAL, mais ils correspondent à des valeurs entières réelles( ou d'autres types).Ainsi, au lieu d'un programmeur tapant une valeur comme 60 chaque fois qu'ils appellent la fonction dans le code source, ils pourraient utiliser la constante AUTOSAVE_INTERVAL pour une meilleure lisibilité.(Les constantes sont généralement facilement reconnaissables car elles sont écrites en majuscules).
Tous ces exemples peuvent tomber sous le terme Magic Numbers, car ils peuvent nécessiter un nombre hexadécimal spécifique pour qu'une fonction ou un type de fichier fonctionne correctement. .. si la valeur n'est pas correcte, elle ne fonctionnera pas. Et quand un programmeur veut s'amuser un peu, il peut définir ces valeurs en utilisant des nombres hexadécimaux qui épellent quelque chose en anglais, autrement dit hexspeak.
Fun avec Magic Numbers: Quelques exemples notables
Si vous jetez un coup d'oeil dans le code source de Linux, vous verrez que l'appel système _reboot() sous Linux nécessite une variable "magic"Cela équivaut au nombre hexadécimal 0xfee1dead. Si quelque chose essayait d'appeler cette fonction sans passer d'abord par cette valeur magique, cela retournerait simplement une erreur.
Le GUID( identifiant unique global) pour une partition de démarrage BIOS dans le schéma de partitionnement GPT est 21686148-6449-6E6F-744E-656564454649, qui forme la chaîne ASCII "Hah! IdontNeedEFI", une allusion au fait que GPT serait normalementutilisé dans les ordinateurs qui ont remplacé le BIOS avec UEFI, mais il ne doit pas nécessairement être.
Microsoft a caché 0x0B00B135 dans son code source supportant la machine virtuelle Hyper-V soumise à Linux, puis ils ont changé la valeur en 0xB16B00B5, et finalement ils l'ont commutée en décimal avant qu'elle ne soit complètement supprimée du code source.
Plus d'exemples amusants:
- 0xbaaaaaad - Utilisé par iOS crash logging pour indiquer qu'un journal est une pile de l'ensemble du système.
- 0xbad22222 - utilisé par iOS crash logging pour indiquer qu'une application VoIP a été tué par iOS parce qu'il s'est mal comporté.
- 0x8badf00d -( Ate Bad Food) utilisé par les journaux de plantage iOS pour indiquer qu'une application a pris trop de temps à faire quelque chose et a été tué par le délai d'attente de surveillance.
- 0xdeadfa11 -( Dead Fall) utilisé par iOS crash logging lorsqu'une application est forcée par un utilisateur.
- 0xDEADD00D - utilisé par Android pour indiquer une annulation de machine virtuelle.
- 0xDEAD10CC( Dead Lock) utilisé par iOS crash logging lorsqu'une application verrouille une ressource en arrière-plan.
- 0xBAADF00D( mauvaise alimentation) utilisé par la fonction LocalAlloc dans Windows pour le débogage.
- 0xCAFED00D( Cafe mec) utilisé par la compression pack200 de Java.
- 0xCAFEBABE( Cafe babe) utilisé par Java comme l'identifiant pour les fichiers de classe compilés
- 0x0D15EA5E( Maladie) utilisé par Nintendo sur le Gamecube et Wii pour indiquer un démarrage normal est arrivé.
- 0x1BADB002( 1 mauvais démarrage) utilisé par la spécification multiboot en tant que numéro magique
- 0xDEADDEAD - utilisé par Windows pour indiquer un crash de débogage déclenché manuellement, également connu sous le nom Blue Screen of Death.
Ce ne sont pas les seuls, bien sûr, mais juste une courte liste d'exemples qui semblaient amusants. En savoir plus? Dites le nous dans les commentaires.
Voir des exemples pour vous-même
Vous pouvez voir plus d'exemples en ouvrant un éditeur hexadécimal, puis en ouvrant un nombre quelconque de types de fichiers. Il existe de nombreux éditeurs hexadécimaux freeware disponibles pour Windows, OS X ou Linux - assurez-vous de faire attention lors de l'installation de freeware pour ne pas être infecté par des logiciels malveillants ou des logiciels espions.
Comme exemple supplémentaire, les images de récupération pour les téléphones Android comme ClockworkMod commencent par "ANDROID!" Si elles sont lues au format ASCII.
Note: ne va rien changer pendant que vous regardez autour. Les éditeurs hexadécimaux peuvent casser des choses!