Page d'accueil » comment » Magic Numbers Les codes secrets que les programmeurs cachent dans votre PC

    Magic Numbers Les codes secrets que les programmeurs cachent dans votre PC

    Depuis que la première personne a écrit 5318008 sur une calculatrice, les nerds cachent des nombres secrets à l'intérieur de votre PC et les utilisent pour négocier des poignées de main secrètes entre des applications et des fichiers. Aujourd’hui, nous jetons un coup d’œil aux exemples les plus intéressants..

    Quels 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 nombre est stocké dans la RAM ou utilisé par la CPU sous forme de 32 unités et de zéros, mais dans le code source, il est écrit format décimal normal ou 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 correspond à «% PDF-1.3» au format ASCII, ou un fichier ZIP commençant par 0x504B, ce qui correspond à «PK», dérivé de l'utilitaire PKZip d'origine. En regardant cette "signature", un type de fichier peut être facilement identifié même sans autre métadonnée.

    Les fichiers de classe Java compilés commencent par CAFEBABE

    L'utilitaire Linux «fichier» 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 à l'aide de types standard tels que 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 l'homme tels que AUTOSAVE_INTERVAL, mais qui correspondent à des valeurs entières réelles (ou d'un autre type). Ainsi, au lieu qu'un programmeur saisisse 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 identifiables car elles sont écrites en majuscules).

    Tous ces exemples peuvent tomber sous le terme Chiffres magiques, car ils peuvent nécessiter un nombre hexadécimal spécifique pour qu'un type de fonction ou 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 épelent quelque chose en anglais, aussi appelé hexspeak..

    Fun With Magic Numbers: quelques exemples notables

    Chaque AppleScript se termine par FADEDEAD

    Si vous jetez un coup d'œil au 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 transmettre d'abord cette valeur magique, cela retournerait simplement une erreur.

    Le GUID (identificateur global unique) pour une partition d'amorçage BIOS dans le schéma de partitionnement GPT est 21686148-6449-6E6F-744E-656564454649, qui forme la chaîne ASCII «Hah! IdontNeedEFI», allusion au fait que GPT serait normalement utilisé dans les ordinateurs qui ont remplacé le BIOS par UEFI, mais il ne doit pas nécessairement être.

    Microsoft a caché 0x0B00B135 dans sa machine virtuelle Hyper-V prenant en charge le code source soumis à Linux, puis ils ont changé la valeur en 0xB16B00B5 et l'ont finalement basculée en décimal avant sa suppression complète du code source..

    Des exemples plus amusants incluent:

    • 0xbaaaaaad - utilisé par la journalisation sur incident iOS pour indiquer qu'un journal est une prise de vue par pile du système entier.
    • 0xbad22222 - utilisé par la journalisation des incidents sur iOS pour indiquer qu'une application VoIP a été détruite 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 prenait trop de temps pour faire quelque chose et qu'elle était tuée par le délai d'attente du chien de garde.
    • 0xdeadfa11 - (Dead Fall) utilisé par la journalisation sur incident 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 sur incident iOS lorsqu'une application verrouille une ressource en arrière-plan.
    • 0xBAADF00D (Bad Food) utilisé par la fonction LocalAlloc dans Windows pour le débogage.
    • 0xCAFED00D (mec de café) 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 la Gamecube et la Wii pour indiquer qu'un démarrage normal s'est produit.
    • 0x1BADB002 (1 démarrage incorrect) utilisé par la spécification de démarrage multiple en tant que nombre magique
    • 0xDEADDEAD - utilisé par Windows pour indiquer une panne de débogage déclenchée manuellement, également appelée écran bleu de la mort.

    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 gratuits disponibles pour Windows, OS X ou Linux - assurez-vous que vous êtes prudent lorsque vous installez un logiciel gratuit afin de ne pas être infecté par des logiciels espions.

    A titre d'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..

    Remarque: ne changez rien pendant que vous regardez autour de vous. Hex Editors peut casser des choses!