24Aug

"Magic Numbers": slapti kodai, kuriuos programuotojai slėpia jūsų kompiuteryje

Nuo to laiko, kai pirmasis asmuo išspausdino skaičiuoklę 5318008, "nerds" slepia slaptus numerius savo kompiuteryje ir naudoja juos, kad derėtų dėl slaptų rankos tarp programų ir failų.Šiandien mes greitai žiūrime į kai kuriuos įdomius pavyzdžius.

Kas yra magiškieji numeriai?

Daugelis programavimo kalbų naudoja 32 bitų natūralų skaičių, atstovaujantį tam tikrus duomenų tipus už scenų - vidinis numeris saugomas RAM arba CPU naudojamas kaip 32 vienetai ir nuliai, tačiau išeities kodą jis bus išrašytasarba įprastu dešimtainiu formatu, arba kaip šešioliktainis formatas, kuris naudoja skaičiai nuo 0 iki 9 ir raidės nuo A iki F.

Kai operacinė sistema ar programa nori nustatyti failo tipą, ji gali ieškoti failo pradžiosspecialiam žymekliui, kuris žymi failo tipą.Pavyzdžiui, PDF failas gali prasidėti šešiabriaunio verte 0x255044462D312E33, kuris lygus "% PDF-1.3" ASCII formatu, arba ZIP failas prasideda nuo 0x504B, kuris lygus "PK", kuris nusileidžia iš originalios PKZip programos.Žvelgiant į šį "parašą", failo tipą galima lengvai identifikuoti net ir be jokių kitų metaduomenų.

Kompiluoti Java klasės failai prasideda su CAFEBABE

. Linux "utility" "failas" gali būti naudojamas iš terminalo, norint nustatyti failo tipą - iš tikrųjų jis skaito magijos numerius iš failo "magija".

Kai programa noriNorėdami paskambinti funkcijai, ji gali perduoti šioms funkcijoms reikšmes naudodami standartinius tipus, tokius kaip sveikasis skaičius, kuris gali būti išreikštas šaltinio kodu šešioliktainiu formatu. Tai ypač pasakytina apie konstantas, kuris yra identifikatorius, apibrėžtas žmogaus skaitomuose varduose, pvz., AUTOSAVE_INTERVAL, tačiau jie nurodo faktinius sveikuosius( ar kitokio tipo) vertes. Taigi vietoj to, kad programuotojas įveda tokią vertę kaip 60 kiekvieną kartą, kai jie vadina funkciją šaltinio kodu, jie galėtų naudoti AUTOSAVE_INTERVAL konstantą, kad būtų lengviau juos skaityti.(Konstantai paprastai yra lengvai atpažįstami, nes jie parašyti visais didžiosiomis raidėmis).

Visi šie pavyzdžiai gali būti priskiriami terminui "Magic Numbers", nes norint, kad funkcija ar failo tipas veiktų tinkamai, gali reikėti konkretaus šešioliktainio skaičiaus. .. jei vertė neteisinga, tai neveiks. Kai programuotojas nori šiek tiek įdomus, jie gali apibrėžti šias vertes naudodamiesi šešioliktainiais skaičiais, kurie paaiškina kažką anglų kalba, kitaip vadinamą hexspeak.

įdomus su magiškais numeriais: kai kurie pastebimi pavyzdžiai

Kiekvienas AppleScript baigiasi "FADEDEAD

" Jei pažiūrėsite į "Linux" kodą, pamatysite, kad "Linux" sistemos skambučiui _reboot() reikalingas "magiškas" kintamasistai lygi šešioliktainio skaičiaus 0xfee1dead. Jei kažkas bandė paskambinti šia funkcija, nepradėdamas pirmosios magijos vertės, tai tik grąžins klaidą.

GUID( globaliai unikalus identifikatorius) BIOS įkrovos skaidiniui GPT skaidymo schemoje yra 21686148-6449-6E6F-744E-656564454649, kuris sudaro ASCII eilutę "Hah! IdontNeedEFI" - nuorodą į tai, kad GPT paprastai būtųnaudojamas kompiuteriuose, kurie pakeitė BIOS su UEFI, bet tai nebūtinai turi būti.

"Microsoft" slaptai paslėpė "0x0B00B135" savo "Hyper-V" virtualioje mašinoje, palaikančiame "Linux" pateiktą kodą, tada jie pakeitė reikšmę 0xB16B00B5 ir galiausiai pakeitė jį iki dešimtainio, kol jis iš pradžių buvo pašalintas iš šaltinio kodo.

Daugiau įdomių pavyzdžių yra:

  • 0xbaaaaaad - naudojama "iOS" įvykių žurnale, siekiant parodyti, kad žurnalas yra visos sistemos stackshot.
  • 0xbad22222 - naudojama "iOS" avarijų žurnale, kad būtų nurodyta, kad "iOS" buvo nužudyta "VoIP" programa, nes ji buvo netinkama.
  • 0x8badf00d -( Ate Bad Food), naudojamas "iOS" pranešimų žurnaluose, kad programinė įranga užtruko pernelyg ilgai, kad kažką padarė, ir buvo nužudytas sargybos laikrodžio metu.
  • 0xdeadfa11 -( Dead Fall), naudojamas "iOS" avarijos žurnale, kai programa yra priversta palikti vartotoją.
  • 0xDEADD00D - naudojamas "Android", kad būtų rodomas VM nutraukimas.
  • 0xDEAD10CC( "Dead Lock") naudojama "iOS" įvykių žurnale, kai programa užfiksuoja išteklių fone.
  • 0xBAADF00D( blogas maistas), naudojamas "LocalAlloc" funkcijoje sistemoje "Windows", skirta derinti.
  • 0xCAFED00D( "Cafe dude"), naudojamas Java paketo 200 kompresijos.
  • 0xCAFEBABE( "Cafe babe"), naudojama "Java" kaip surinktų klasių rinkmenų
  • 0x0D15EA5E( ligos) identifikatorius, naudojamas "Nintendo" "Gamecube" ir "Wii", kad būtų įprasta įkėlimo data.
  • 0x1BADB002( 1 blogas įkrovimas), naudojamas daugybinio įkėlimo specifikacijoje kaip magiškas skaičius
  • 0xDEADDEAD - naudojamas "Windows", kad būtų nurodyta rankiniu būdu inicijuojama derinimo avarija, kitaip žinoma kaip mėlynas mirties ekranas.

Tai, žinoma, ne vieninteliai, bet tik trumpas pavyzdžių sąrašas, atrodantis įdomus. Ar žinai daugiau? Pasakyk mums komentarus.

Savo pavyzdžių rodymas

Daugiau pavyzdžių galite pamatyti, atidarius hex redaktorių ir atveriant bet kokį failų tipų skaičių."Windows", "OS X" arba "Linux" yra daug nemokamų heks redaktorių - tik įsitikinkite, kad esate atsargūs, kai įdiegiate nemokamą programinę įrangą, kad nebūtų užkrėstos šnipinėjimo ar šnipinėjimo programa.

Kaip papildomą pavyzdį atkūrimo atvaizdai "Android" telefonams, pavyzdžiui, "ClockworkMod", prasideda "ANDROID!", Jei skaitomi ASCII formatu.

Pastaba: nieko nekeisdami, kai žiūrite."Hex" redaktoriai gali sugadinti dalykus!