Откакто първият човек написал 5318008 на калкулатор, маниаци крият тайни номера вътре във вашия компютър и ги използват, за да договарят тайни ръкостискания между приложения и файлове. Днес разглеждаме някои от най-забавните примери.
Повечето езици за програмиране използват 32-битов целочислен тип, за да представят определени типове данни зад кулисите - вътрешно номерът се съхранява в RAM или се използва от процесора като 32 единици и нули, но в изходния код ще бъде записан в обикновен десетичен формат или като шестнадесетичен формат, който използва номерата от 0 до 9 и буквите А до F.
Когато операционната система или приложение иска да определи типа на файла, той може да гледа към началото на файла за специален маркер, който означава типа на файла. Например, PDF файл може да започне с хекса стойността 0x255044462D312E33, което се равнява на "% PDF-1.3" във формат ASCII, или ZIP файл започва с 0x504B, което е равно на "PK", което се свежда от оригиналната PKZip програма. Като разглеждаме този "подпис", типът на файла може лесно да бъде идентифициран дори без други метаданни.
Компилираните файлове от Java клас започват с CAFEBABEПомощната програма "Linux" на Linux може да се използва от терминала за определяне на вида на файла - всъщност той чете магически номера от файл, наречен "magic".
Когато дадено приложение иска да се обади на функция, то може да предава стойности на тази функция, като използва стандартни типове като цяло число, което може да бъде изразено в изходния код в шестнадесетичен формат. Това важи особено за константи, които са идентификатори, дефинирани с имена, които могат да се четат от хора, като AUTOSAVE_INTERVAL, но те се насочват към действителни стойности от цял (или друг вид). Така че вместо програмист, който да напише стойност 60, всеки път, когато се обаждат на функцията в изходния код, те могат да използват константата AUTOSAVE_INTERVAL за по-добра четливост. (Константите обикновено се разпознават лесно, защото са написани с всички главни букви).
Всички тези примери могат да попаднат под термина магически номера, защото те могат да изискват специфично шестнадесетично число, за да може дадена функция или тип файл да работи правилно ... ако стойността не е правилна, тя няма да работи. И когато програмист иска да се забавлява, те могат да определят тези стойности с помощта на шестнадесетични числа, които описват нещо на английски, иначе познати като hexspeak.
Ако разгледате бързо изходния код на Linux, ще видите, че системното повикване _reboot () на Linux изисква магическа променлива, която да бъде предавана, равна на шестнадесетичния номер 0xfee1dead. Ако нещо се опита да нарече тази функция, без да премине първо в тази магическа стойност, то просто ще върне грешка.
GUID (глобално уникален идентификатор) за дял за зареждане на BIOS в схемата за разделяне на GPT е 21686148-6449-6E6F-744E-656564454649, който формира ASCII низа "Hah! IdontNeedEFI", алюзия към факта, че GPT обикновено се използва в компютрите, които заменят BIOS с UEFI, но това не е задължително да бъде.
Microsoft отлично скри 0x0B00B135 в своя Hyper-V виртуална машина, поддържащ изходен код, подаден към Linux, след което те промениха стойността на 0xB16B00B5 и накрая го превключиха на десетична, преди да бъде напълно премахната от изходния код.
По-забавни примери включват:
Това не са единствените там, разбира се, а само кратък списък от примери, които изглеждаха забавни. Знаеш ли повече? Кажете ни в коментарите.
Можете да видите още примери чрез отваряне на шестнадесетичен редактор и след това отваряне на произволен брой типове файлове. Има много безплатни хед-редактори на разположение за Windows, OS X или Linux - просто се уверете, че сте внимателни при инсталирането на безплатния софтуер, за да не се заразите с crapware или spyware.
Като допълнителен пример, изображенията за възстановяване на телефони с Android, като ClockworkMod, започват с "ANDROID!", Ако се четат във формат ASCII.
Забележка: не променяйте нищо, докато гледате наоколо. Hex редакторите могат да развалят нещата!