De când prima persoană a scris 5318008 pe un calculator, tocilarii ascund numere secrete în interiorul computerului și le folosesc pentru a negocia strângeri de mână secrete între aplicații și fișiere. Astăzi aruncăm o privire rapidă asupra câtorva exemple mai distractive.
Ce sunt numerele magice?
Majoritatea limbajelor de programare utilizează un tip întreg pe 32 de biți pentru a reprezenta anumite tipuri de date din culise - intern numărul este stocat în RAM sau utilizat de CPU ca 32 de unități și zerouri, dar în codul sursă ar fi scris în oricare format zecimal regulat sau ca format hexazecimal, care utilizează numerele de la 0 la 9 și literele de la A la F.
Când sistemul de operare sau o aplicație dorește să determine tipul unui fișier, acesta poate căuta la începutul fișierului un marker special care semnifică tipul fișierului. De exemplu, un fișier PDF poate începe cu valoarea hexagonală 0x255044462D312E33, care este egală cu „% PDF-1.3” în format ASCII, sau un fișier ZIP începe cu 0x504B, care este egal cu „PK”, care coboară din utilitarul PKZip original. Privind această „semnătură”, un tip de fișier poate fi ușor identificat chiar și fără alte metadate.
Utilitarul „fișier” Linux poate fi utilizat de la terminal pentru a determina tipul unui fișier - de fapt, acesta citește numerele magice dintr-un fișier numită „magie”.
Atunci când o aplicație dorește să apeleze o funcție, poate transmite valori acelei funcții folosind tipuri standard precum întreg, care pot fi exprimate în codul sursă în format hexazecimal. Acest lucru este valabil mai ales pentru constante, care sunt identificatori definiți cu nume care pot fi citite de om, cum ar fi AUTOSAVE_INTERVAL, dar se mapează la valori reale întregi (sau de alt tip). Deci, în loc să scrie un programator o valoare ca 60 de fiecare dată când apelează funcția în codul sursă, ar putea folosi constanta AUTOSAVE_INTERVAL pentru o mai bună lizibilitate. (Constantele sunt de obicei ușor recunoscute, deoarece sunt scrise cu majuscule).
Toate aceste exemple pot intra sub termen Numere magice , deoarece ar putea necesita un anumit număr hexazecimal pentru ca o funcție sau un tip de fișier să funcționeze corect ... dacă valoarea nu este corectă, nu va funcționa. Și atunci când un programator dorește să se distreze puțin, ar putea defini aceste valori folosind numere hexazecimale care explică ceva în engleză, altfel cunoscut sub numele de vorbit hexagonal .
Distracție cu numere magice: câteva exemple notabile
Dacă arunci o privire rapidă în codul sursă Linux , veți vedea că apelul de sistem _reboot () pe Linux necesită trecerea unei variabile „magice” care este egală cu numărul hexazecimal 0xfee1dead. Dacă ceva ar încerca să numească acea funcție fără a trece mai întâi acea valoare magică, ar întoarce doar o eroare.
GUID (identificator unic global) pentru un Partiția de încărcare BIOS în Schema de partiționare GPT este 21686148-6449-6E6F-744E-656564454649, care formează șirul ASCII „Hah! IdontNeedEFI”, o aluzie la faptul că GPT ar fi utilizat în mod normal în computere care au înlocuit BIOS-ul cu UEFI , dar nu trebuie neapărat să fie.
Microsoft faimos ascuns 0x0B00B135 în mașina lor virtuală Hyper-V care acceptă codul sursă trimis la Linux, apoi au schimbat valoarea la 0xB16B00B5 și, în cele din urmă, ei l-a trecut la zecimal înainte de a fi eliminat cu totul din codul sursă.
Mai multe exemple distractive includ:
- 0xbaaaaaad - folosit de Jurnal de blocare iOS pentru a indica faptul că un jurnal este un stackshot al întregului sistem.
- 0xbad22222 - folosit de jurnalul de blocare iOS pentru a indica faptul că o aplicație VoIP a fost ucisă de iOS deoarece s-a comportat greșit.
- 0x8badf00d - (Ate Bad Food) folosit de jurnalele de blocare iOS pentru a indica faptul că o aplicație a durat prea mult pentru a face ceva și a fost ucisă de expirarea câinelui de pază.
- 0xdeadfa11 - (Dead Fall) folosit de jurnalul de blocare iOS atunci când o aplicație este forțată să părăsească un utilizator.
- 0xDEADD00D - utilizat de Android pentru a indica o întrerupere a VM.
- 0xDEAD10CC (Dead Lock) folosit de jurnalul de blocare iOS când o aplicație blochează o resursă în fundal.
- 0xBAADF00D (Bad Food) folosit de LocalAlloc funcție în Windows pentru depanare.
- 0xCAFED00D (Cafe dude) folosit de compresia Java200 pack.
- 0xCAFEBABE (Cafe babe) folosit de Java ca identificator pentru fișierele de clasă compilate
- 0x0D15EA5E (Boală) utilizat de Nintendo pe Gamecube și Wii pentru a indica o încărcare normală.
- 0x1BADB002 (1 boot greșit) folosit de multiboot specificație ca număr magic
- 0xDEADDEAD - folosit de Windows pentru a indica a accident de depanare inițiat manual , cunoscut și sub numele de Ecranul albastru al morții.
Acestea nu sunt singurele, desigur, ci doar o scurtă listă de exemple care păreau distractive. Mai știi ceva? Spune-ne în comentarii.
Vezi exemple pentru tine
Puteți vedea mai multe exemple deschizând un editor hexagonal și apoi deschizând orice număr de tipuri de fișiere. Există o mulțime de editori hexagonali freeware disponibili pentru Windows, OS X sau Linux - doar asigurați-vă că sunteți atent atunci când instalați freeware să nu vă infectați cu crapware sau spyware.
Ca exemplu adăugat, imaginile de recuperare pentru telefoanele Android, cum ar fi ClockworkMod, încep cu „ANDROID!” dacă este citit în format ASCII.
Notă: nu schimba nimic în timp ce privești în jur. Editorii hexagonali pot sparge lucrurile!