24Aug

Čarobne številke: skrivne kode, ki programerji skrivajo na vašem računalniku

Odkar je prva oseba zapisala 5318008 v kalkulatorju, so pazniki skrivali skrivne številke znotraj vašega računalnika in jih uporabili za pogajanje o tajnih rokovanjih med aplikacijami in datotekami. Danes smo si ogledali nekaj bolj zabavnih primerov.

Kaj so čarobne številke?

Večina programskih jezikov uporablja 32-bitno celoštevilsko vrsto za predstavitev določenih vrst podatkov za prizori - interno je število shranjeno v RAM-u ali ga CPU uporablja kot 32 in ničle, v izvorni kodi pa bi bilo napisano vbodisi v navadni decimalni obliki ali v šestnajstiškem formatu, ki uporablja številke od 0 do 9 in črke A do F.

Ko operacijski sistem ali program želi določiti vrsto datoteke, lahko pogleda na začetek datotekeza poseben označevalec, ki označuje vrsto datoteke. Datoteka PDF se lahko na primer začne s hex vrednostjo 0x255044462D312E33, kar je enako "% PDF-1.3" v obliki ASCII, ali ZIP datoteka se začne z 0x504B, kar je enako "PK", ki izhaja iz izvirne PKZip.Če pogledamo na ta »podpis«, je mogoče z vrsto datoteke preprosto identificirati tudi brez drugih metapodatkov.

Sestavljene datoteke razreda Java razreda se začnejo s CAFEBABE

Z datoteko »datoteka« lahko uporabite terminal, da določite vrsto datoteke - pravzaprav bere magične številke iz datoteke, imenovane »magija«.

Ko aplikacija želida pokliče funkcijo, lahko prenese vrednosti v to funkcijo z uporabo standardnih tipov, kot je celo število, ki se lahko izrazi v izvorni kodi v heksadecimalnem formatu. To še posebej velja za konstante, ki so identifikatorji, definirani s človeško berljivimi imeni, kot je AUTOSAVE_INTERVAL, vendar se preslikajo v dejansko celo število( ali drugo vrsto).Torej namesto programera, ki vnese vrednost, kot je 60, vsakič, ko pokličejo funkcijo v izvorni kodi, bi lahko uporabili konstanto AUTOSAVE_INTERVAL za boljšo berljivost.(Konstante so običajno zlahka prepoznavne, ker so napisane v vseh velikih črkah).

Vsi ti primeri lahko spadajo pod izraz Magic numbers( Številke čarovnic), ker lahko zahtevajo določeno heksadecimalno številko, da funkcijo ali tip datoteke pravilno deluje. .. če vrednost ni pravilna, ne bo delovala. In ko programer želi imeti malo zabave, lahko te vrednosti določi s šestnajstiškimi številkami, ki v angleščini napišejo nekaj, sicer znano kot hexspeak.

Fun z magicnimi številkami: nekateri pomembni primeri

Vsak AppleScript se konča s FADEDEAD

Če si hitro ogledate izvorno kodo Linuxa, boste videli, da sistemski klic _reboot() na Linux zahteva, da se prenese "čarobna" spremenljivkaki je enako šestnajstiški številki 0xfee1dead.Če je nekaj poskusil poklicati to funkcijo, ne da bi najprej prenesel to čarobno vrednost, bi samo vrnili napako.

GUID( globalni posebni identifikator) za particijo zagona BIOS v shemi particioniranja GPT je 21686148-6449-6E6F-744E-656564454649, ki oblikuje ASCII niz "Hah! IdontNeedEFI", ki je aluzija na dejstvo, da bi GPT običajnoki se uporabljajo v računalnikih, ki zamenjajo BIOS s sistemom UEFI, vendar ni nujno, da je to potrebno.

Microsoft je očitno skril 0x0B00B135 v svoji izvorni kodi Hyper-V, ki podpira izvorno kodo, predloženo Linuxu, nato pa sta spremenili vrednost na 0xB16B00B5 in nazadnje sta jo preklopili na decimalno ločilo, preden je bil popolnoma odstranjen iz izvorne kode.

Več zabavnih primerov vključujejo:

  • 0xbaaaaaad - uporabljen pri logiranju sesutij iOS, ki nakazuje, da je dnevnik stackshot celotnega sistema.
  • 0xbad22222 - uporablja sejem sesutij iOS, ki označuje, da je aplikacija VoIP uničila iOS, ker se je zmotil.
  • 0x8badf00d -( Ate Bad Food), ki ga uporabljajo iOS crash dnevniki, da kažejo, da je aplikacija trajala predolgo, da bi naredila nekaj in je bila ubita z nadzornim časom.
  • 0xdeadfa11 -( Dead Fall), ki ga uporablja iOS crash logging, ko aplikacijo preneha uporabnik.
  • 0xDEADD00D - uporablja ga za označevanje prekinitve VM.
  • 0xDEAD10CC( Dead Lock), ki ga uporablja iOS crash logging, ko aplikacija zaklene vir v ozadju.
  • 0xBAADF00D( Bad Food), ki ga uporablja lokalna funkcija LocalAlloc v sistemu Windows za odpravljanje napak.
  • 0xCAFED00D( Cafe dude), ki ga uporablja Java's pack200 compression.
  • 0xCAFEBABE( Cafe babe), ki ga uporablja Java kot identifikator za zbrane razredne datoteke
  • 0x0D15EA5E( bolezen), ki jo uporablja Nintendo na Gamecube in Wii, da bi označili običajen zagon.
  • 0x1BADB002( 1 slab boot), ki ga multiboot specifikacija uporablja kot čarobno številko
  • 0xDEADDEAD - ki jo uporablja Windows, da označite ročno zastrupljeno crash debug, sicer znan kot Blue Screen of Death.

To seveda ni edino, ampak le kratek seznam primerov, ki so se zdeli zabavni. Veš kaj več?Povejte nam v komentarjih.

Oglejte si primere za sebe

Več primerov si lahko ogledate tako, da odprete hex urednik in nato odprete poljubno število vrst datotek. Obstaja veliko freeware hex editors na voljo za Windows, OS X ali Linux - samo poskrbite, da ste previdni pri nameščanju avtocesta, da se ne okužijo crapware ali spyware.

Kot dodani primer se slike za obnovitev za telefone Android, kot je ClockworkMod, začnejo z »ANDROID!«, Če jih berete v obliki ASCII.

Opomba: ne spreminjajte ničesar, medtem ko gledate. Hex uredniki lahko zlomijo stvari!