Burvju numuri Slepeni kodi, kurus programmētāji slēpj jūsu datorā
Kopš pirmās personas uz kalkulatora uzrakstīja 5318008, nerds slēpj slepenos numurus datora iekšienē un izmantoja, lai apspriestu slepenus rokrakstus starp lietojumprogrammām un failiem. Šodien mēs ātri apskatām dažus izklaidējošākus piemērus.
Kas ir Magic numuri?
Lielākā daļa programmēšanas valodu lieto 32 bitu veselu skaitļu veidu, lai attēlotu dažus datu veidus aiz ainas - iekšēji numurs tiek saglabāts RAM vai CPU izmanto kā 32 un nulles, bet pirmkodā tas tiek izrakstīts vai nu regulārs decimāldaļu formāts vai heksadecimālais formāts, kas izmanto ciparus no 0 līdz 9 un burtus no A līdz F.
Ja operētājsistēma vai lietojumprogramma vēlas noteikt faila tipu, tā var meklēt faila sākumā īpašu marķieri, kas norāda faila veidu. Piemēram, PDF fails var sākties ar hex vērtību 0x255044462D312E33, kas ASCII formātā ir vienāds ar “% PDF-1.3”, vai ZIP fails sākas ar 0x504B, kas ir vienāds ar “PK”, kas nolaižas no sākotnējā PKZip utilīta. Aplūkojot šo „parakstu”, faila tipu var viegli identificēt pat bez citiem metadatiem.
Apkopotie Java klases faili sākas ar CAFEBABELinux lietderības “failu” var izmantot no termināļa, lai noteiktu faila veidu - patiesībā tas nolasa burvju numurus no faila ar nosaukumu “burvība”.
Ja lietojumprogramma vēlas izsaukt funkciju, tā var nodot šai funkcijai vērtības, izmantojot standarta veidus, piemēram, veselu skaitli, ko var izteikt pirmkodā heksadecimālā formātā. Tas jo īpaši attiecas uz konstantēm, kas ir identifikatori, kas definēti ar cilvēka nolasāmiem nosaukumiem, piemēram, AUTOSAVE_INTERVAL, bet tie ir faktiski veseli skaitļi (vai cita veida). Tā vietā, lai programmētājs, ievadot vērtību, piemēram, 60, katru reizi, kad viņi izsauc funkciju avota kodā, viņi varētu izmantot konstantu AUTOSAVE_INTERVAL, lai labāk lasītu. (Konstantes parasti ir viegli atpazīstamas, jo tās ir rakstītas ar lielajiem burtiem).
Visi šie piemēri var attiekties uz burtu "Magic Numbers", jo tiem var būt nepieciešams īpašs heksadecimālais numurs, lai funkcija vai faila tips darbotos pareizi ... ja vērtība nav pareiza, tas nedarbosies. Un, ja programmētājs vēlas mazliet jautri pavadīt, viņi var definēt šīs vērtības, izmantojot heksadecimālos skaitļus, kas izskaidro kaut ko angļu valodā, kas pazīstams kā heksspeak.
Jautri ar burvjiem numuriem: daži piemēri
Katrs AppleScript beidzas ar FADEDEADJa jūs ātri aplūkosit Linux avota kodu, jūs redzēsiet, ka operētājsistēmā Linux ir jāiesniedz “maģisks” mainīgais lielums, kas ir vienāds ar heksadecimālo skaitli 0xfee1dead. Ja kaut kas mēģināja šo funkciju izsaukt, neizmantojot šo burvju vērtību, tas tikai atdotu kļūdu.
GUID (globāli unikāls identifikators) BIOS sāknēšanas nodalījumam GPT nodalīšanas shēmā ir 21686148-6449-6E6F-744E-656564454649, kas veido ASCII virkni “Hah! IdontNeedEFI”, atsauci uz to, ka GPT parasti tiek izmantots datoros, kas aizstāja BIOS ar UEFI, bet tam nav obligāti jābūt.
Microsoft ir slavens 0x0B00B135 savā Hyper-V virtuālajā mašīnā, kas atbalsta Linux avota kodu, tad tās mainīja vērtību uz 0xB16B00B5, un beidzot tās to nomainīja līdz decimālam, pirms tas tika pilnībā noņemts no avota koda.
Vairāk jautru piemēru ir:
- 0xbaaaaaad - izmanto iOS crash logging, lai norādītu, ka žurnāls ir visas sistēmas stackhot.
- 0xbad22222 - lieto iOS crash logging, lai norādītu, ka iOS ir nogalinājis VoIP lietotni, jo tas ir nepareizi saglabāts.
- 0x8badf00d - (Ate Bad Food), ko izmanto iOS crash logs, lai norādītu, ka lietojumprogramma aizņēma pārāk ilgu laiku, lai kaut ko veiktu, un to nogalināja sargsuns..
- 0xdeadfa11 - (Dead Fall), ko lieto iOS crash logging, kad lietotājs ir spēka izbeigšana no lietotāja.
- 0xDEADD00D - lieto Android, lai norādītu VM pārtraukšanu.
- 0xDEAD10CC (Dead Lock), ko izmanto iOS crash logging, kad programma bloķē resursus fonā.
- 0xBAADF00D (Bad Food), ko izmanto lokālā Alloc funkcija Windows sistēmā atkļūdošanai.
- 0xCAFED00D (Cafe dude), ko izmanto Java pack200 kompresija.
- 0xCAFEBABE (Cafe babe), ko Java izmanto kā apkopotu klases failu identifikatoru
- 0x0D15EA5E (slimība), ko Nintendo izmanto Gamecube un Wii, lai norādītu parastu sāknēšanu..
- 0x1BADB002 (1 slikta boot), ko multiboot specifikācija izmanto kā burvju numuru
- 0xDEADDEAD - lieto Windows, lai norādītu manuāli uzsāktu atkļūdošanas avāriju, kas pazīstama kā Zilais nāves ekrāns.
Tie, protams, nav vienīgie, bet tikai īss piemēru saraksts, kas šķita jautri. Vai zināt vairāk? Pastāstiet mums komentāros.
Redzot sev piemērus
Jūs varat redzēt vairāk piemēru, atverot sešu redaktoru un pēc tam atverot jebkuru failu tipu skaitu. Ir daudz freeware hex redaktoru, kas pieejami operētājsistēmai Windows, OS X vai Linux - tikai pārliecinieties, ka esat uzmanīgi, instalējot freeware, lai netiktu inficēti ar crapware vai spiegprogrammatūru.
Kā papildu piemēru atkopšanas attēli Android tālruņiem, piemēram, ClockworkMod, sākas ar “ANDROID!”, Ja tie ir lasīti ASCII formātā.
Piezīme: neko nemainiet, kamēr jūs meklējat apkārt. Hex redaktori var salauzt lietas!