24Aug

Kouzelné čísla: tajné kódy, které programátoři skryjí v počítači

click fraud protection

Od chvíle, kdy první osoba napsala na počítačích číslo 5318008, hlupáci skryli tajná čísla uvnitř počítače a používali je k vyjednávání tajných handshakes mezi aplikacemi a soubory. Dnes se rychle podíváme na některé z nejvíce zábavných příkladů.

Jaké jsou kouzelné čísla?

Většina programovacích jazyků používá 32bitový celočíselný typ, který reprezentuje určité typy dat v zákulisí - interně je číslo uloženo v paměti RAM nebo používá CPU jako 32 a nuly, ale ve zdrojovém kódu by bylo napsáno vbuď normální formát desítkové nebo jako hexadecimální formát, který používá čísla 0 až 9 a písmena A až F.

Pokud operační systém nebo aplikace chce určit typ souboru, může se podívat na začátek souborupro zvláštní značku, která označuje typ souboru. Například soubor PDF může začínat hexadecimální hodnotou 0x255044462D312E33, která se rovná "% PDF-1.3" ve formátu ASCII nebo ZIP soubor začíná 0x504B, který se rovná "PK", který sestupuje z původního nástroje PKZip. Podíváme-li se na tento "podpis", lze snadno identifikovat typ souboru i bez dalších metadat.

instagram viewer
Kompilované soubory třídy Java začínají s CAFEBABE

Nástroj Linux "soubor" lze použít z terminálu k určení typu souboru - ve skutečnosti čte magické čísla ze souboru s názvem "magic".

Když aplikace chcek volání funkce, může předávat hodnoty této funkci pomocí standardních typů jako celé číslo, které mohou být vyjádřeny ve zdrojovém kódu v šestnáctkovém formátu. Platí to zejména pro konstanty, které jsou identifikátory definované lidskými čitelnými názvy, jako je AUTOSAVE_INTERVAL, ale mapují se ke skutečnému celočíselnému( nebo jinému typu) hodnotám. Takže místo toho, aby programátor napsal hodnotu 60, pokaždé, když volá funkci ve zdrojovém kódu, mohli použít konstantu AUTOSAVE_INTERVAL pro lepší čitelnost.(Konstanty jsou obvykle snadno rozpoznány, protože jsou psány velkými písmeny).

Všechny tyto příklady mohou spadat pod termín Magic Numbers, protože mohou vyžadovat specifické hexadecimální číslo, aby fungovala správně fungující funkce nebo typ souboru. .. pokud hodnota není správná, nebude fungovat. A když programátor chce mít trochu zábavy, mohou tyto hodnoty definovat pomocí hexadecimálních čísel, které vyslovují něco v angličtině, jinak známo jako hexspeak.

Fun With Magic Numbers: Některé pozoruhodné příklady

Každý AppleScript končí FADEDEAD

Pokud se podíváte rychle na zdrojový kód Linux, zjistíte, že volání systému _reboot() v systému Linux vyžaduje proměnnou "magic"to se rovná šestnáctkovému číslu 0xfee1dead. Pokud se něco pokouší volat tuto funkci bez toho, aby nejprve prošla touto kouzelnou hodnotou, vrátí se pouze chyba.

GUID( globálně jedinečný identifikátor) pro zaváděcí oddíl BIOS v schématu rozdělení GPT je 21686148-6449-6E6F-744E-656564454649, který tvoří řetězec ASCII "Hah! IdontNeedEFI", narážka na skutečnost, že GPT by normálně bylpoužívaných v počítačích, které nahradily systém BIOS systémem UEFI, ale to nemusí nutně být.

Microsoft skvěle ukryl 0x0B00B135 ve svém podpůrném zdrojovém kódu pro virtuální stroj Hyper-V, který byl předán do Linuxu, pak změnili hodnotu na 0xB16B00B5 a nakonec ji přepnuli na desítkovou plochu ještě předtím, než byla úplně odstraněna ze zdrojového kódu.

Další zábavné příklady zahrnují:

  • 0xbaaaaaad - používá protokol havárie systému iOS, který označuje, že protokol je stack of the whole system.
  • 0xbad22222 - použito protokolováním selhání služby iOS, které naznačuje, že aplikace VoIP byla zabita nástrojem iOS, protože byla chybně provedena.
  • 0x8badf00d -( Ate Bad Food), který používá protokoly havárie systému iOS, které naznačují, že aplikace trvala příliš dlouho, než něco udělala, a byl zabit časovým limitem watchdog.
  • 0xdeadfa11 -( Dead Fall) používaný protokolem při selhání služby iOS, když uživatel přeruší aplikaci.
  • 0xDEADD00D - používaný systémem Android, který označuje přerušení VM.
  • 0xDEAD10CC( Dead Lock) používaný při protokolování selhání iOS, když aplikace uzamkne prostředek na pozadí.
  • 0xBAADF00D( špatná strava) používaný funkcí LocalAlloc v systému Windows pro ladění.
  • 0xCAFED00D( Cafe dude) použitý kompresí pack200 v Javě.
  • 0xCAFEBABE( Cafe babe) používaný společností Java jako identifikátor pro kompilované soubory tříd
  • 0x0D15EA5E( Nemoci) používaný Nintendo na Gamecube a Wii, aby se ukázalo, že se stalo normální boot.
  • 0x1BADB002( 1 špatný start) používaný specifikací pro spouštění jako kouzelné číslo
  • 0xDEADDEAD - použitý systémem Windows k označení ručně spuštěné chyby při ladění, jinak označované jako Modrá obrazovka smrti.

Samozřejmě to nejsou jediné, ale jen krátký seznam příkladů, které vypadaly zábavně.Už víte?Řekni nám to v komentářích.

Vidět příklady pro sebe

Další příklady můžete vidět otevřením hex editoru a otevřením libovolného počtu typů souborů.Existuje spousta freeware hex editorů pro Windows, OS X nebo Linux - ujistěte se, že jste opatrní při instalaci softwarového softwaru, abyste se neinfikovali crapware nebo spyware.

Jako příklad, obnovení obrázků pro telefony Android, jako je ClockworkMod, začíná "ANDROID!", Pokud je ve formátu ASCII.

Poznámka: nezmění nic během prohlížení.Hex editory mohou rozbít věci!