Kotisivu » miten » Magic-numerot Salasanat, jotka ohjelmoijat piilottavat tietokoneessa

    Magic-numerot Salasanat, jotka ohjelmoijat piilottavat tietokoneessa

    Siitä lähtien, kun ensimmäinen henkilö kirjoitti 5318008 laskimelle, nörtit ovat piilottaneet salaisia ​​numeroita tietokoneen sisällä ja käyttäneet niitä neuvottelemaan salaisten kättelyjen välillä sovellusten ja tiedostojen välillä. Tänään tarkastelemme nopeasti joitakin mielenkiintoisempia esimerkkejä.

    Mitä ovat Magic-numerot?

    Useimmat ohjelmointikielet käyttävät 32-bittistä kokonaislukutyyppiä edustamaan tietyntyyppisiä tietoja kulissien takana - sisäisesti numero tallennetaan RAM-muistiin tai CPU käyttää sitä 32: nä ja nollana, mutta lähdekoodissa se kirjoitettaisiin joko tavallinen desimaalimuodossa tai heksadesimaalimuodossa, 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 alkuun erityisen merkin, joka merkitsee tiedoston tyyppiä. Esimerkiksi PDF-tiedosto voi alkaa heksadesiarvolla 0x255044462D312E33, joka vastaa ”% PDF-1.3” ASCII-muodossa, tai ZIP-tiedosto alkaa 0x504B: llä, joka vastaa ”PK”: ta, joka laskee alkuperäisestä PKZip-apuohjelmasta. Tarkasteltaessa tätä "allekirjoitusta" tiedostotyyppi voidaan helposti tunnistaa myös ilman muita metatietoja.

    Käännetyt Java-luokan tiedostot alkavat CAFEBABE: lla

    Linux-apuohjelman ”tiedostoa” voidaan käyttää päätelaitteesta tiedoston tyypin määrittämiseksi - itse asiassa se lukee magic-numerot ”magic” -nimistä tiedostosta.

    Kun sovellus haluaa soittaa funktiolle, se voi siirtää arvoja tälle funktiolle käyttämällä standardityyppejä, kuten kokonaislukua, joka voidaan ilmaista lähdekoodissa heksadesimaalimuodossa. Tämä pätee erityisesti vakioihin, jotka ovat tunnisteita, jotka on määritelty sellaisilla ihmisen luettavissa olevilla nimillä kuin AUTOSAVE_INTERVAL, mutta ne kartoitetaan todellisiin kokonaislukuihin (tai muihin tyyppeihin). Joten sen sijaan, että ohjelmoija kirjoittaisi arvon, kuten 60, joka kerta kun he kutsuvat toimintoa lähdekoodissa, he voisivat käyttää AUTOSAVE_INTERVAL-vakiota parempaan luettavuuteen. (Konstantit tunnistetaan yleensä helposti, koska ne on kirjoitettu suurilla kirjaimilla).

    Kaikki nämä esimerkit voivat kuulua Magic-numeroihin, koska ne saattavat vaatia tiettyä heksadesimaalilukua, jotta toiminto tai tiedostotyyppi toimisi oikein ... jos arvo ei ole oikea, se ei toimi. Ja kun ohjelmoija haluaa olla hieman hauskaa, he voivat määritellä nämä arvot heksadesimaaliluvuilla, jotka ilmaisevat jotain englanniksi, joka tunnetaan myös heksikielisenä.

    Hauskaa Magic-numeroilla: joitakin merkittäviä esimerkkejä

    Jokainen AppleScript päättyy FADEDEADiin

    Jos otat nopean tarkastelun Linux-lähdekoodiin, näet, että _reboot () -järjestelmän puhelu Linuxissa edellyttää "magic" -muuttujan siirtämistä, joka vastaa heksadesimaalilukua 0xfee1dead. Jos jokin yritti soittaa kyseiseen funktioon ilman, että se läpäisi tuon maagisen arvon, se palauttaisi vain virheen.

    BIOS-käynnistysosion GUID (maailmanlaajuisesti ainutkertainen tunniste) GPT-osiointijärjestelmässä on 21686148-6449-6E6F-744E-656564454649, joka muodostaa ASCII-merkkijonon "Hah! IdontNeedEFI", joka viittaa siihen, että GPT: tä käytetään tavallisesti tietokoneissa, jotka korvasivat BIOSin UEFI: lla, mutta sen ei välttämättä tarvitse olla.

    Microsoft hämmästyi 0x0B00B135: n tunnetusti Hyper-V: n virtuaalikoneessa, joka tukeutui Linuxiin, ja muutti arvon 0xB16B00B5, ja lopulta he vaihtivat sen desimaaliksi ennen kuin se poistettiin lähdekoodista kokonaan.

    Hauskempia esimerkkejä ovat:

    • 0xbaaaaaad - käytetään iOS-kaatumisrekisteröinnissä osoittamaan, että loki on koko järjestelmän stackhot.
    • 0xbad22222 - jota iOS-kaatumisrekisteröinti käyttää osoittamaan, että iOS on tappanut VoIP-sovelluksen, koska se on väärin tallennettu.
    • 0x8badf00d - (Ate Bad Food), jota iOS-kaatumislokit käyttävät osoittamaan, että sovellus kesti liian kauan tehdä jotain ja tappoi valvontakellon aikakatkaisu.
    • 0xdeadfa11 - (Dead Fall), jota iOS-kaatumisloki käyttää, kun käyttäjä on käyttäjän lopettama voima..
    • 0xDEADD00D - jota Android käyttää VM-keskeytyksen ilmoittamiseen.
    • 0xDEAD10CC (Dead Lock), jota iOS-kaatumisloki käyttää, kun sovellus lukitsee resurssin taustalla.
    • 0xBAADF00D (Bad Food), jota LocalAlloc-toiminto käyttää Windowsissa virheenkorjausta varten.
    • 0xCAFED00D (Cafe dude), jota käyttää Java: n pack200-pakkaus.
    • 0xCAFEBABE (Cafe babe), jota Java käyttää kootun luokan tiedostojen tunnisteena
    • 0x0D15EA5E (sairaus), jota Nintendo käyttää Gamecube-ohjelmassa ja Wii: n osoittamaan normaalin käynnistyksen tapahtuneen.
    • 0x1BADB002 (1 huono käynnistys), jota multiboot-määritys käyttää magic-numerona
    • 0xDEADDEAD - jota Windows käyttää osoittamaan manuaalisesti käynnistettyä debug-kaatua, joka tunnetaan muuten nimellä Blue Screen of Death.

    Nämä eivät ole ainoita, jotka ovat siellä, mutta vain lyhyt luettelo esimerkkeistä, jotka näyttivät hausilta. Tiedäkö enää? Kerro meille kommenteista.

    Näyttää esimerkkejä itsestäsi

    Näet lisää esimerkkejä avaamalla heksan editorin ja avaamalla sitten minkä tahansa määrän tiedostotyyppejä. Windowsissa, OS X: ssä tai Linuxissa on runsaasti freeware hex -muokkausohjelmia - varmista, että asennat ilmaisohjelmia varoen, jotta et tartu crapware- tai vakoiluohjelmiin.

    Lisäesimerkkinä, Android-puhelimien, kuten ClockworkModin, palautuskuvat alkavat nimellä “ANDROID!”, Jos ne luetaan ASCII-muodossa.

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