24Aug
Otkad je prva osoba napisala 5318008 na kalkulatoru, nerds kriju tajne brojeve unutar vašeg računala i pomoću njih pregovaraju o tajnim rukama između aplikacija i datoteka. Danas ćemo brzo pogledati neke od primamljivijih primjera.
Što su Magic Numbers?
Većina programskih jezika koristi 32-bitni cijeli broj koji predstavlja određene vrste podataka iza kulisa - interno se taj broj pohranjuje u RAM-u ili CPU koristi kao 32 i nula, ali u izvornom kodu će biti napisan uoba redovna decimalna formata ili kao heksadecimalni format koji koristi brojeve od 0 do 9 i slova A do F.
Kada operacijski sustav ili aplikacija žele odrediti vrstu datoteke, može se pogledati na početak datotekeza posebnu oznaku koja označava vrstu datoteke. Na primjer, PDF datoteka može započeti s heksadecimalnom vrijednošću 0x255044462D312E33, što je jednako "% PDF-1.3" u ASCII formatu ili ZIP datoteka počinje sa 0x504B, što je jednako "PK", koji se spušta od originalnog korisničkog programa PKZip. Gledajući ovaj "potpis", vrsta datoteke se lako može identificirati čak i bez bilo kojeg drugog metapodataka.
Linux datoteku "korisni programi mogu se koristiti od terminala kako bi se utvrdilo vrstu datoteke - u stvari, čita magične brojeve iz datoteke pod nazivom" čarolija ".
Kada aplikacija želiza pozivanje funkcije, može proslijediti vrijednosti za tu funkciju pomoću standardnih tipova kao što su cijeli broj, što se može izraziti u izvornom kodu u heksadecimalnom formatu. To je osobito istinito za konstante, koje su identifikatori definirani ljudskim čitljivim imenima poput AUTOSAVE_INTERVAL, no oni mapiraju stvarnu vrijednost cijele( ili druge vrste).Dakle, umjesto da programer napravi vrijednost kao što je 60 svaki put kad poziva funkciju u izvornom kodu, mogli bi koristiti konstantu AUTOSAVE_INTERVAL radi bolje čitljivosti.(Konstante su obično lako prepoznate jer su pisane svim velikim slovima).
Svi ovi primjeri mogu biti pod pojmom Magic Numbers jer mogu zahtijevati određeni heksadecimalni broj kako bi funkcija ili vrsta datoteke ispravno funkcionirale. .. ako vrijednost nije ispravna, neće funkcionirati. A kad se programer želi malo zabaviti, oni bi mogli definirati te vrijednosti pomoću heksadecimalnih brojeva koji izgovaraju nešto na engleskom jeziku, inače poznat kao hexspeak.
Ako brzo pogledate u izvorni kod Linuxa, vidjet ćete da sustav _reboot() poziva Linux zahtijeva da se proširi "čarobna" varijablakoji odgovara heksadecimalnom broju 0xfee1dead. Ako je nešto pokušalo nazvati tu funkciju, a da prvo ne prijeđe u tu čarobnu vrijednost, to bi samo vratilo pogrešku.
GUID( globalno jedinstveni identifikator) za particiju za podizanje BIOS-a u GPT particijskom shemi je 21686148-6449-6E6F-744E-656564454649, koji čini ASCII niz "Hah! IdontNeedEFI", aluzija na činjenicu da GPT normalnokoristi se u računalima koja su zamijenila BIOS sa UEFI-om, ali to ne mora nužno biti.
Microsoft je poznato skrivao 0x0B00B135 u svojem Hyper-V virtualnom stroju koji je podržavao izvorni kod poslan na Linux, a zatim su promijenili vrijednost na 0xB16B00B5 i konačno su je prebacili na decimalni prije nego što je uklonjen iz izvornog koda zajedno.
Više zabavnih primjera uključuju:
- 0xbaaaaaad - koristi se za prijavu na sudar iOS-a kako bi naznačio da je zapis stackshot cijelog sustava.
- 0xbad22222 - koristi se prijavom na pad sustava za iOS kako bi ukazala na to da je iOS ubio VoIP aplikaciju zbog neispravnosti.
- 0x8badf00d -( Ate Bad Food) koji su koristili iOSovi zapisnici koji ukazuju na to da je aplikacija trebala predugo raditi i ubijena je timeoutom za nadzor.
- 0xdeadfa11 -( Dead Fall) koji koristi zapisivanje sudara iOS-a kada korisnik odustane od aplikacije.
- 0xDEADD00D - koristi Android za označavanje VM prekida.
- 0xDEAD10CC( Dead Lock) koji koristi zapisivanje sudara iOS-a kada aplikacija zaključa izvor u pozadini.
- 0xBAADF00D( loša hrana) koju koristi funkcija LocalAlloc u sustavu Windows za uklanjanje pogrešaka.
- 0xCAFED00D( Cafe dude) koji koristi Javaov paket200 kompresije.
- 0xCAFEBABE( Cafe babe) koji koristi Java kao identifikator za kompilirane datoteke klase
- 0x0D15EA5E( bolest) koju koristi Nintendo na Gamecube i Wii kako bi ukazao na normalno podizanje sustava.
- 0x1BADB002( 1 loša čizma) koju koristi multiboot specifikacija kao čarobni broj
- 0xDEADDEAD - koristi Windows za označavanje ručno pokrenutog otkaza uklanjanja pogrešaka, inače poznat kao Plavi ekran smrti.
Naravno, nisu samo one, već samo kratki popis primjera koji su se činili zabavnim. Znate li više? Recite nam u komentarima.
Vidjeti primjere za sebe
Možete vidjeti više primjera otvaranjem heksadecimalnog urednika i otvaranjem bilo kojeg broja vrsta datoteka. Postoji mnogo freeware heksadecimalnih izdavača dostupnih za Windows, OS X ili Linux - samo pazite da pazite kada instalirate freeware da ne biste zaraženi crapwareom ili spywareom.
Kao dodatni primjer, slike za oporavak za telefone s Androidom poput ClockworkModa počinju s "ANDROID!" Ako su pročitane u ASCII formatu.
Napomena: ne mijenja ništa dok gledate okolo. Urednici Hex mogu razbiti stvari!