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

Turinys:

"Magic Numbers": slapti kodai, kuriuos programuotojai slėpia jūsų kompiuteryje
"Magic Numbers": slapti kodai, kuriuos programuotojai slėpia jūsų kompiuteryje
Anonim
Nuo tada, kai pirmasis asmuo skaičiuotuvą išrašė 5318008, "nerds" slepia slaptus numerius savo kompiuteryje ir naudoja juos, kad derėtų dėl slaptų rankų judesių tarp programų ir failų. Šiandien mes greitai žiūrime į kai kuriuos įdomius pavyzdžius.
Nuo tada, kai pirmasis asmuo skaičiuotuvą išrašė 5318008, "nerds" slepia slaptus numerius savo kompiuteryje ir naudoja juos, kad derėtų dėl slaptų rankų judesių tarp programų ir failų. Šiandien mes greitai žiūrime į kai kuriuos įdomius pavyzdžius.

Kas yra magiškieji numeriai?

Dauguma programavimo kalbų naudoja 32 bitų natūralų skaičių, atstovaujantį tam tikras duomenų rūšis už scenų - vidinis numeris saugomas RAM arba CPU naudojamas kaip 32 vienetai ir nuliai, tačiau šaltinio kodu jis būtų išrašytas arba standartinis dešimtainis formatas arba šešioliktainis formatas, kuriame skaičiai nuo 0 iki 9 ir raidės nuo A iki F.

Kai operacinė sistema arba programa nori nustatyti failo tipą, failo tipas gali atrodyti specialios žymos failo pradžioje. 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ų.

Naudojant "Linux" įrankį "failas" gali būti naudojamas iš terminalo, norint nustatyti failo tipą - iš tikrųjų jis skaito magiškus numerius iš failo, vadinamo "magija".
Naudojant "Linux" įrankį "failas" gali būti naudojamas iš terminalo, norint nustatyti failo tipą - iš tikrųjų jis skaito magiškus numerius iš failo, vadinamo "magija".

Kai programa nori 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 "Magic Numbers" terminui, 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.

Pramogos su magiškais numeriais: keletas žinomų pavyzdžių

Jei greitai pažvelgsite į "Linux" šaltinio kodą, pamatysite, kad sisteminis " reboot ()" skambutis "Linux" reikalauja perduoti "magišką" kintamąjį, kuris lygus šešioliktainiam skaičiui 0xfee1dead. Jei kažkas bandė paskambinti šia funkcija, nepradėdamas pirmosios magijos vertės, tai tik grąžins klaidą.
Jei greitai pažvelgsite į "Linux" šaltinio kodą, pamatysite, kad sisteminis " reboot ()" skambutis "Linux" reikalauja perduoti "magišką" kintamąjį, kuris lygus šešioliktainiam skaičiui 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, tačiau 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 avarijos žurnale, kad būtų rodoma, kad žurnalas yra visos sistemos stackshot.
  • 0xbad22222 - naudojama "iOS" įvykių žurnale, siekiant parodyti, kad "iOS" buvo nužudyta VoIP programa, nes ji buvo netinkama.
  • 0x8badf00d - ("Ate Bad Food"), naudojamas "iOS" pranešimų apie avariją, siekiant parodyti, kad programa užtruko per ilgai, kad kažką padarė, ir buvo nužudyta sargybos laikrodžio metu.
  • 0xdeadfa11 - (Dead Fall), naudojamas "iOS" avarijos žurnale, kai programa yra priversta palikti vartotoją.
  • 0xDEADD00D - naudojama "Android", kad būtų rodomas VM nutraukimas.
  • 0xDEAD10CC ("Dead Lock") naudojama "iOS" avarijos žurnale, kai programa užfiksuoja išteklių fone.
  • 0xBAADF00D (blogas maistas), naudojamas "LocalAlloc" funkcijoje Windows, skirtos derinti.
  • 0xCAFED00D ("Cafe dude"), naudojamas Java paketą 200 suspaudimo.
  • 0xCAFEBABE ("Cafe babe"), kurį Java naudoja sudedamųjų klasių failų identifikatoriui
  • 0x0D15EA5E (liga), naudojama "Nintendo" žaidime "Gamecube" ir "Wii", kad būtų įprasta įkėlimas.
  • 0x1BADB002 (1 blogas įkrovimas), naudojamas daugybinio įkėlimo specifikacijoje kaip magiškas numeris
  • 0xDEADDEAD - naudojamas "Windows", norint parodyti rankiniu būdu pradėtą derinimo triktį, kitaip vadinamą mėlynuoju mirties ekranu.

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

Žiūrėdami pavyzdžius sau

Galite pamatyti daugiau pavyzdžių atidarę hex redaktorių ir atidarę 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 jie skaitomi ASCII formatu.

Image
Image

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

Rekomenduojamas: