Chiffres magiques: les codes secrets que les programmeurs cachent dans votre PC

Table des matières:

Chiffres magiques: les codes secrets que les programmeurs cachent dans votre PC
Chiffres magiques: les codes secrets que les programmeurs cachent dans votre PC

Vidéo: Chiffres magiques: les codes secrets que les programmeurs cachent dans votre PC

Vidéo: Chiffres magiques: les codes secrets que les programmeurs cachent dans votre PC
Vidéo: Comparatif de sécurité iOS et Android | NordVPN en français - YouTube 2024, Avril
Anonim
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 des applications et des fichiers. Aujourd'hui, nous examinons rapidement certains des exemples les plus intéressants.
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 des applications et des fichiers. Aujourd'hui, nous examinons rapidement certains des exemples les plus intéressants.

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 nombre est stocké dans la RAM ou utilisé par la CPU sous la forme de 32 uns et de zéros, mais il est écrit dans le code source. 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, ce 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.

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».
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 faciles à reconnaître 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, 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 épelent quelque chose en anglais, autrement dit hexspeak.

Fun With Magic Numbers: quelques exemples notables

Si vous examinez rapidement le code source de Linux, vous constaterez 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.
Si vous examinez rapidement le code source de Linux, vous constaterez 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 ce n'est pas nécessairement le cas.

Microsoft cachait 0x0B00B135 dans sa machine virtuelle Hyper-V prenant en charge le code source soumis à Linux, puis ils modifièrent la valeur en 0xB16B00B5 et finalement, ils passèrent au format décimal avant de le supprimer complètement 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 iOS pour indiquer qu'une application VoIP a été supprimée par iOS en raison d'un comportement incorrect.
  • 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 morte 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 (Cafe mec) utilisé par la compression du pack200 de Java.
  • 0xCAFEBABE (Cafe Babe) utilisé par Java comme identifiant pour les fichiers de classe compilés
  • 0x0D15EA5E (Disease) 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 un blocage du débogage initié manuellement, également appelé écran bleu de la mort.

Ce ne sont pas les seuls sur le marché, 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 un crapware ou un logiciel espion.

À 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.

Image
Image

Remarque: ne changez rien pendant que vous regardez autour de vous. Les éditeurs Hex peuvent casser des choses!

Conseillé: