De când prima persoană a scris 5318008 pe un calculator, tocilarii au ascuns numerele secrete în interiorul PC-ului și le-au folosit pentru a negocia strângerea de mână între aplicații și fișiere. Astăzi, ne uităm la câteva exemple mai interesante.
Majoritatea limbajelor de programare folosesc un număr întreg de 32 de biți pentru a reprezenta anumite tipuri de date în spatele scenei - în interior numărul este stocat în RAM sau utilizat de CPU ca 32 și zerouri, dar în codul sursă ar fi scris în formatul zecimal obișnuit sau ca format hexazecimal, care utilizează numerele de la 0 la 9 și literele A până la F.
Când sistemul de operare sau o aplicație dorește să determine tipul unui fișier, acesta poate privi la începutul fișierului un marker special care semnifică tipul fișierului. De exemplu, un fișier PDF poate începe cu valoarea hex 0x255044462D312E33, care este egală cu "% PDF-1.3" în format ASCII sau un fișier ZIP începe cu 0x504B, egal cu "PK", care coboară din utilitarul original PKZip. Privind această "semnătură", un tip de fișier poate fi ușor identificat chiar și fără alte metadate.
Fisierele clasificate Java compilate incep cu CAFEBABEUtilitarul Linux "fișier" poate fi folosit de la terminal pentru a determina tipul unui fișier - de fapt, acesta citește numerele magice dintr-un fișier numit "magic".
Atunci când o aplicație dorește să apeleze o funcție, ea poate transmite valori acelei funcții utilizând tipuri standard ca întreg, care pot fi exprimate în codul sursă în format hexazecimal. Acest lucru este valabil mai ales pentru constantele, care sunt identificatori definiți cu nume care pot fi citite de om ca AUTOSAVE_INTERVAL, dar acestea sunt mapate la valori întregi reale (sau alte tipuri). Deci, în loc de un programator care scrie o valoare ca 60 de fiecare dată când apelează funcția din codul sursă, ei pot folosi constanta AUTOSAVE_INTERVAL pentru o mai bună citire. (Constantele sunt de obicei recunoscute cu ușurință pentru că sunt scrise cu majuscule).
Toate aceste exemple pot intra sub denumirea de 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 când un programator dorește să se distreze puțin, ar putea defini aceste valori folosind numerele hexazecimale care exprimă ceva în limba engleză, altfel cunoscut sub numele de hexspeak.
Dacă analizați rapid codul sursă Linux, veți vedea că apelul de sistem _reboot () pe Linux necesită o variabilă "magică" care să fie transmisă, care este egală cu numărul hexazecimal 0xfee1dead. Dacă ceva a încercat să numească acea funcție fără să treacă mai întâi la acea valoare magică, s-ar întoarce o eroare.
GUID (identificator unic global) pentru o partiție de boot 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-ul ar fi utilizat în mod normal în computerele care au înlocuit BIOS-ul cu UEFI, dar nu trebuie neapărat să fie.
Microsoft a ascuns excelent 0x0B00B135 în codul sursă de suportare a mașinii virtuale Hyper-V trimis la Linux, apoi a schimbat valoarea la 0xB16B00B5 și în cele din urmă au schimbat-o în zecimală înainte de a fi eliminată complet din codul sursă.
Mai multe exemple de distracție includ:
Acestea nu sunt singurele afară, desigur, ci doar o scurtă listă de exemple care păreau distractive. Știi mai multe? Spune-ne în comentarii.
Puteți vedea mai multe exemple deschizând un editor hex și apoi deschizând orice număr de tipuri de fișiere. Există o mulțime de editoare hexagonale gratuite disponibile pentru Windows, OS X sau Linux - asigurați-vă că aveți grijă atunci când instalați freeware pentru a nu fi infectat cu crapware sau spyware.
Ca un exemplu suplimentar, imaginile de recuperare pentru telefoane Android precum ClockworkMod încep cu "ANDROID!" Dacă sunt citite în format ASCII.
Notă: nu mergi să schimbi nimic în timp ce te uiți în jur. Editorii Hex pot sparge lucrurile!