Magic Numbers Tajne kodove koje programeri skrivaju na vašem računalu
Otkako je prva osoba ispisala kalkulator 5318008, štreberi su skrivali tajne brojeve unutar vašeg računala i koristili ih kako bi dogovorili tajne rukovanje između aplikacija i datoteka. Danas ćemo pogledati neke od zabavnijih primjera.
Što su čarobni brojevi?
Većina programskih jezika koristi 32-bitni cjelobrojni tip za predstavljanje određenih tipova podataka iza kulisa - interno broj se pohranjuje u RAM-u ili ga koristi CPU kao 32 one i nule, ali u izvornom kodu bi se ispisao u oba regularnog decimalnog formata ili u heksadecimalnom formatu, koji koristi brojeve od 0 do 9 i slova od A do F.
Kada operacijski sustav ili aplikacija žele odrediti vrstu datoteke, ona može gledati na početak datoteke za posebnu oznaku koja označava vrstu datoteke. Na primjer, PDF datoteka može početi s heksadecimalnom vrijednošću 0x255044462D312E33, koja je jednaka "% PDF-1.3" u ASCII formatu, ili ZIP datoteka počinje s 0x504B, što je jednako "PK", što potječe od izvornog PKZip uslužnog programa. Gledajući ovaj "potpis", vrsta datoteke može se lako identificirati čak i bez drugih metapodataka.
Sastavljene Java klasa datoteke počinju s CAFEBABE"Datoteka" uslužnog programa Linuxa može se koristiti s terminala kako bi se odredila vrsta datoteke - u stvari, ona čita magične brojeve iz datoteke koja se zove "magija".
Kada aplikacija želi pozvati funkciju, može proslijediti vrijednosti toj funkciji pomoću standardnih tipova kao što je cijeli broj, koji se može izraziti u izvornom kodu u heksadecimalnom formatu. To je osobito istinito za konstante, koje su identifikatori definirani ljudski čitljivim imenima poput AUTOSAVE_INTERVAL, ali se preslikavaju na stvarne vrijednosti (ili druge vrste). Dakle, umjesto programera koji upisuje vrijednost kao što je 60 svaki put kad nazovu funkciju u izvornom kodu, mogu koristiti konstantu AUTOSAVE_INTERVAL za bolju čitljivost. (Konstante se obično lako prepoznaju jer su napisane velikim slovima).
Svi ovi primjeri mogu pasti pod pojam Magic Numbers, jer mogu zahtijevati određeni heksadecimalni broj kako bi funkcija ili vrsta datoteke ispravno funkcionirala ... ako vrijednost nije ispravna, neće raditi. A kada programer želi malo zabave, oni mogu definirati te vrijednosti pomoću heksadecimalnih brojeva koji pišu nešto na engleskom, inače poznati kao hexspeak.
Zabava s čarobnim brojevima: neki značajni primjeri
Svaki AppleScript završava s FADEDEADAko brzo pogledate izvorni kôd Linuxa, vidjet ćete da sustavski poziv _reboot () na Linuxu zahtijeva prosljeđivanje "magične" varijable koje je jednako heksadecimalnom broju 0xfee1dead. Ako je nešto pokušalo nazvati tu funkciju, a da prvo ne prođe tu čarobnu vrijednost, to bi samo vratilo pogrešku.
GUID (globalno jedinstveni identifikator) za BIOS particiju za pokretanje u GPT shemi particioniranja je 21686148-6449-6E6F-744E-656564454649, što čini ASCII niz "Hah! IdontNeedEFI", aluzija na činjenicu da bi se GPT normalno koristio u računalima koja su zamijenila BIOS UEFI-jem, ali to ne mora nužno biti.
Microsoft je slavno sakrio 0x0B00B135 u svom virtualnom stroju Hyper-V koji podržava izvorni kod koji je predan Linuxu, a zatim su promijenili vrijednost na 0xB16B00B5 i konačno su ga prebacili u decimalni broj prije nego što je potpuno uklonjen iz izvornog koda.
Više zabavnih primjera uključuju:
- 0xbaaaaaad - koristi se iS crash prijavom kako bi ukazao na to da je dnevnik stackshot cijelog sustava.
- 0xbad22222 - koristi se iOS crash prijavom kako bi ukazao na to da je iOS ubio VoIP aplikaciju jer se loše ponašala.
- 0x8badf00d - (Pojedi lošu hranu) koju koriste iOS-ovi zapisi o padu kako bi ukazali na to da je aplikacija predugo učinila nešto i da je ubijena timeout timeout-om.
- 0xdeadfa11 - (mrtav pad) koji se koristi za bilježenje pada sustava iOS kada je korisnik prisiljen napustiti korisnika.
- 0xDEADD00D - koristi Android za označavanje prekida VM-a.
- 0xDEAD10CC (Dead Lock) koji koristi iOS crash zapisivanje kada aplikacija blokira resurs u pozadini.
- 0xBAADF00D (loša hrana) koristi funkciju LocalAlloc u sustavu Windows za ispravljanje pogrešaka.
- 0xCAFED00D (Cafe dude) koje koristi Java pack200 kompresija.
- 0xCAFEBABE (Cafe babe) koju Java koristi kao identifikator za kompilirane datoteke klase
- 0x0D15EA5E (bolest) koju koristi Nintendo na Gamecube i Wii kako bi ukazao na normalno pokretanje.
- 0x1BADB002 (1 loše podizanje) koje specifikacija multiboot koristi kao čarobni broj
- 0xDEADDEAD - koristi Windows da označi ručno pokrenuto rušenje pogrešaka, inače poznato kao Plava boja zaslona.
To nisu, dakako, jedine, ali samo kratak popis primjera koji su se doimali zabavnim. Znate li više? Recite nam u komentarima.
Vidjeti primjere za sebe
Možete vidjeti više primjera otvaranjem hex editora, a zatim otvaranjem bilo kojeg broja vrsta datoteka. Za Windows, OS X ili Linux je dostupno mnoštvo besplatnih hex editora - samo pazite da budete oprezni pri instaliranju freewarea da se ne zarazite s crapwareom ili spyware-om.
Kao primjer, slike za oporavak za Android telefone kao što je ClockworkMod počinju s "ANDROID!" Ako se čitaju u ASCII formatu.
Bilješka: ne mijenjajte ništa dok gledate okolo. Hex urednici mogu razbiti stvari!