If-Koubou

Magic-numerot: salaiset koodit, jotka ohjelmoijat piiloutuvat tietokoneellasi

Magic-numerot: salaiset koodit, jotka ohjelmoijat piiloutuvat tietokoneellasi (Miten)

Siitä lähtien, kun ensimmäinen henkilö oli kirjoittanut 5318008 laskimella, nerds on piilottanut tietokoneen sisältämiä salaisia ​​numeroita ja käyttänyt heitä neuvottelemaan salaisia ​​käskyjä sovellusten ja tiedostojen välillä. Tänään vietämme nopeasti joitain viihdyttäviä esimerkkejä.

Mitä ovat Magic-numerot?

Useimmat ohjelmointikielet käyttävät 32-bittistä kokonaislukutyyppiä edustamaan tietyntyyppisiä tietoja kulissien takana - sisäisesti numero tallennetaan RAM: iin tai CPU käyttää niitä 32: nä ja nollia, mutta lähdekoodissa se kirjoitetaan joko säännöllinen desimaalimuoto tai heksadesimaalimuoto, joka käyttää numeroita 0 - 9 ja kirjaimia A - F.

Kun käyttöjärjestelmä tai sovellus haluaa määrittää tiedoston tyypin, se voi etsiä tiedoston alkua erityiselle merkinnälle, joka ilmaisee tiedoston tyypin. Esimerkiksi PDF-tiedosto saattaa alkaa hex-arvolla 0x255044462D312E33, joka on "% PDF-1.3" ASCII-muodossa tai ZIP-tiedosto alkaa 0x504B, joka vastaa PK: n alkuperäisestä PKZip-apuohjelmasta laskettua PK-arvoa. Tarkastelemalla tätä "allekirjoitusta" tiedostotyyppi voidaan tunnistaa helposti ilman muita metatietoja.

Koottu Java Class -tiedostot alkavat CAFEBABE: lla

Linux-apuohjelma "tiedostosta" voidaan käyttää terminaalista määrittämään tiedoston tyyppi - itse asiassa se lukee taikuusnumerot tiedostosta nimeltä "magic".

Kun sovellus haluaa kutsua toiminnon, se voi siirtää arvot tähän funktioon vakiotyyppien kuten kokonaislukua käyttäen, jotka voidaan ilmaista lähdekoodissa heksadesimaalimuodossa. Tämä pätee erityisesti vakioihin, jotka ovat tunnistimia, jotka on määritetty ihmisillä luettavia nimityksiä, kuten AUTOSAVE_INTERVAL, mutta ne kartoittavat todellisiin kokonaislukuihin (tai muihin tyyppeihin). Joten sen sijaan, että ohjelmoija kirjoittaisi 60: n arvon aina, kun he kutsuvat toiminnon lähdekoodissa, he voivat käyttää AUTOSAVE_INTERVAL-vakiota paremman luettavuuden vuoksi. (Vakiot ovat yleensä helposti tunnistettavissa, koska ne on kirjoitettu kaikissa isoilla kirjaimilla).

Kaikki nämä esimerkit voivat olla Magic-numeron termi, koska ne saattavat vaatia tiettyä heksadesimaalilukuja, jotta funktio tai tiedostotyyppi toimisi kunnolla ... jos arvo ei ole oikea, se ei toimi. Ja kun ohjelmoija haluaa olla hauskaa, he voivat määritellä nämä arvot käyttäen heksadesimaalilukuja, jotka ilmaisevat jotain englanniksi, toisin kutsutaan hexspeakiksi.

Fun with Magic numerot: Jotkut merkittävät esimerkit

Jokainen AppleScript päättyy FADEDEADin kanssa

Jos otat nopeasti esiin Linux-lähdekoodin, näet, että _reboot () -järjestelmä vaatii Linuxille tarvittavan "magic" muuttujan, joka vastaa heksadesimaaliluku 0xfee1dead. Jos jotain yritti kutsua tätä toimintoa kulkematta tuohon taikaarvoon, se vain palaisi virheen.

GPT-osiointijärjestelmän BIOS-käynnistysosion GUID (globally unique identifier) ​​on 21686148-6449-6E6F-744E-656564454649, joka muodostaa ASCII-merkkijonon "Hah! IdontNeedEFI", viittaus siihen, että GPT: tä tavallisesti käytettäisiin jotka korvasivat BIOSin UEFI: n kanssa, mutta sen ei välttämättä tarvitse olla.

Microsoft famously hidden 0x0B00B135 niiden Hyper-V virtual-koneen tukemalla lähdekoodia toimitettu Linux, sitten ne muuttivat arvon 0xB16B00B5, ja lopulta he switched se desimaali ennen kuin se poistettiin lähdekoodista kokonaan.

Hauskoja esimerkkejä ovat:

  • 0xbaaaaaad - iOS: n kaatumiskirjauksen käyttäminen osoittaa, että loki on koko järjestelmän koko.
  • 0xbad22222 - iOS: n kaatumiskirjauksen käyttäminen osoittaa, että iOS on tappanut VoIP-sovelluksen, koska se on väärin.
  • 0x8badf00d - (Ate Bad Food), jota iOS: n kaatumislokit osoittavat, että sovellus kesti liian kauan tehdä jotain ja se surmasivat valvonta-aikakatkaisun.
  • 0xdeadfa11 - (Dead Fall), jota iOS: n kaatumiskirjaus käyttää, kun käyttäjä on lopettanut sovelluksen.
  • 0xDEADD00D - jota Android käyttää VM: n keskeyttämiseen.
  • 0xDEAD10CC (Dead Lock), jota iOS: n kaatumiskirjaus käyttää, kun sovellus lukitsee resurssin taustalla.
  • 0xBAADF00D (Bad Food), jota LocalAlloc-toiminto käyttää Windowsissa virheenkorjausta varten.
  • 0xCAFED00D (Cafe dude) jota Java paketti pakkaus200.
  • 0xCAFEBABE (Cafe babe), jota Java käyttää koottujen luokan tiedostojen tunnisteena
  • 0x0D15EA5E (Disease), jota Nintendo käyttää Gamecubessa ja Wii: llä, mikä osoittaa, että normaali boot tapahtui.
  • 0x1BADB002 (1 huono käynnistys), jota multiboot-määritys käyttää maagisena numerona
  • 0xDEADDEAD - jota Windows käyttää ilmaisemaan manuaalisesti käynnistyneen virheenkorjauskon, joka tunnetaan nimellä Death of Blue Screen.

Tietenkin nämä eivät ole ainoita, mutta vain lyhyt luettelo esimerkkeistä, jotka näyttävät hausilta. Tietääkö enemmän? Kerro meille kommentit.

Näemme esimerkkejä itsestäsi

Näet enemmän esimerkkejä avaamalla hex-editorin ja avaamalla minkä tahansa määrän tiedostotyyppejä. Windows-, OS X- tai Linux-versioissa on paljon freeware-heijastinohjelmistoja - vain varmista, että asennat freewareä, jotta et saa tartuntaa crapware- tai vakoiluohjelmien avulla.

Lisätty esimerkki, esimerkiksi ClockworkModin Android-puhelimissa olevat talteenottokuvat alkavat "ANDROID!", Jos ne ovat ASCII-muodossa.

Huomautus: älä mene muuttamasta mitään, kun katsot ympärillesi. Hex-editorit voivat rikkoa asioita!