Depuis que la première personne a écrit 5318008 sur une calculatrice, les nerds cachent 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 rapidement certains 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 dans les coulisses – en interne, le nombre est stocké dans la RAM ou utilisé par le processeur comme 32 uns et zéros, mais dans le code source, il serait écrit au format décimal normal ou au format hexadécimal, qui utilise les nombres de 0 à 9 et les lettres de A à F.
Lorsque le système d’exploitation ou une application souhaite déterminer le type d’un fichier, il peut rechercher au début du fichier un marqueur spécial indiquant le type du fichier. Par exemple, un fichier PDF peut commencer par la valeur hexadécimale 0x255044462D312E33, qui équivaut à «% PDF-1.3» au format ASCII, ou un fichier ZIP commence par 0x504B, qui équivaut à «PK», qui descend de l’utilitaire PKZip d’origine. En regardant cette «signature», un type de fichier peut être facilement identifié même sans aucune autre métadonnée.
Les fichiers de classe Java compilés commencent par CAFEBABE
Le «fichier» de l’utilitaire Linux peut être utilisé à partir du terminal pour déterminer le type d’un fichier – en fait, il lit les nombres magiques dans un fichier appelé «magie».
Lorsqu’une application souhaite appeler une fonction, elle peut transmettre des valeurs à cette fonction en utilisant des types standard tels que des entiers, 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 l’homme comme AUTOSAVE_INTERVAL, mais ils correspondent à des valeurs entières réelles (ou d’un autre type). Ainsi, au lieu d’un programmeur tapant une valeur telle que 60 chaque fois qu’il appelle la fonction dans le code source, il pourrait 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 Numéros magiques, 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, cela 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 connu sous le nom de hexspeak.
Amusez-vous avec les nombres magiques: quelques exemples notables
Chaque AppleScript se termine par FADEDEAD
Si vous jetez un coup d’œil dans le code source Linux, vous verrez que l’appel système _reboot () sous Linux nécessite la transmission d’une variable «magique» égale au nombre hexadécimal 0xfee1dead. Si quelque chose essayait d’appeler cette fonction sans passer d’abord cette valeur magique, cela renverrait simplement une erreur.
Le GUID (identificateur global unique) pour un Partition de démarrage du 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 normalement utilisé dans les ordinateurs qui ont remplacé le BIOS par UEFI, mais il ne le fait pas ‘ t doit nécessairement l’être.
Microsoft célèbre caché 0x0B00B135 dans leur machine virtuelle Hyper-V prenant en charge le code source soumis à Linux, puis ils ont changé la valeur en 0xB16B00B5, et enfin ils commuté en décimal avant qu’il ne soit complètement supprimé du code source.
Des exemples plus amusants incluent:
- 0xbaaaaaad – utilisé par Journalisation des plantages iOS pour indiquer qu’un journal est une pile de l’ensemble du système.
- 0xbad22222 – utilisé par la journalisation des plantages iOS pour indiquer qu’une application VoIP a été tuée par iOS parce qu’elle s’est mal comportée.
- 0x8badf00d – (Ate Bad Food) utilisé par les journaux de crash iOS pour indiquer qu’une application a mis trop de temps à faire quelque chose et a été tuée par le délai d’expiration du chien de garde.
- 0xdeadfa11 – (Dead Fall) utilisé par la journalisation des plantages iOS lorsqu’une application est forcée de quitter par un utilisateur.
- 0xDEADD00D – utilisé par Android pour indiquer un abandon de la VM.
- 0xDEAD10CC (Dead Lock) utilisé par la journalisation des incidents iOS lorsqu’une application verrouille une ressource en arrière-plan.
- 0xBAADF00D (Bad Food) utilisé par le LocalAlloc fonction dans Windows pour le débogage.
- 0xCAFED00D (Cafe dude) utilisé par la compression pack200 de Java.
- 0xCAFEBABE (Cafe babe) utilisé par Java comme identifiant pour les fichiers de classe compilés
- 0x0D15EA5E (Maladie) utilisé par Nintendo sur le Gamecube et Wii pour indiquer qu’un démarrage normal s’est produit.
- 0x1BADB002 (1 mauvais démarrage) utilisé par le démarrage multiple spécification comme un nombre magique
- 0xDEADDEAD – utilisé par Windows pour indiquer un crash de débogage lancé manuellement, autrement connu sous le nom d’écran bleu de la mort.
Ce ne sont pas les seuls, bien sûr, mais juste une courte liste d’exemples qui semblent amusants. Vous en savez plus? Dites le nous dans les commentaires.
Voir des exemples par vous-même
Vous pouvez voir plus d’exemples en ouvrant un éditeur hexadécimal, puis en ouvrant n’importe quel nombre de types de fichiers. Il existe de nombreux éditeurs hexadécimaux gratuits disponibles pour Windows, OS X ou Linux – assurez-vous simplement de faire attention lors de l’installation de logiciels gratuits pour ne pas être infecté par des logiciels malveillants ou des logiciels espions.
À titre d’exemple supplémentaire, les images de récupération pour les téléphones Android comme ClockworkMod commencent par «ANDROID!» si lu au format ASCII.
ne changez rien pendant que vous regardez autour de vous. Les éditeurs hexadécimaux peuvent casser des choses!