24Aug

Burvju numuri: slepenie kodi, ko programmētāji slēpj jūsu datorā

Kopš tā laika, kad pirmā persona izrakstīja kalkulatorā 5318008, nerds slēpjas slepenos numuros datora iekšienē un izmanto tos sarunās par slepenajiem rokasspiedieniem starp lietojumprogrammām un failiem.Šodien mēs ātri skatāmies uz dažiem interesantākajiem piemēriem.

Kas ir burvju numuri?

Lielākā daļa programmēšanas valodu izmanto 32 bitu integer tipa, lai pārstāvētu noteiktus datu veidus aiz ainas - iekšēji šis numurs tiek saglabāts RAM vai CPU izmanto kā 32 un nulles, bet avota kodā tas tiks izrakstītsvai nu parastā decimāldaļskaitļa formā, vai kā heksadecimālā formātā, kurā tiek izmantoti skaitļi no 0 līdz 9 un burti no A līdz F.

Kad operētājsistēma vai lietojumprogramma vēlas noteikt faila tipu, tā var aplūkot faila sākumuīpašam marķierim, kas norāda faila tipu. Piemēram, PDF fails var sākties ar hex vērtību 0x255044462D312E33, kas ASCII formātā atbilst "% PDF-1.3", vai ZIP fails sākas ar 0x504B, kas ir vienāds ar "PK", kas nokritās no sākotnējās PKZip lietderības. Aplūkojot šo "parakstu", faila tipu var viegli identificēt pat bez citiem metadatiem.

apkopoti Java klases faili sākas ar CAFEBABE

. Linux lietderība "fails" var tikt izmantota no termināla, lai noteiktu faila tipu - patiesībā tā maina burtus no faila ar nosaukumu "maģija".

Kad lietojumprogramma vēlaslai izsauktu funkciju, tā var pārsniegt šīs funkcijas vērtības, izmantojot standarta veidus, piemēram, vesels skaitlis, ko še 16spējā var izteikt avota kodā.Tas jo īpaši attiecas uz konstantēm, kas ir identifikatori, kas definēti ar cilvēka lasāmiem nosaukumiem, piemēram, AUTOSAVE_INTERVAL, bet tie sakrīt ar faktisko veselu skaitļu( vai cita veida) vērtībām. Tātad, tā vietā, lai programmētājs, ievadot vērtību, piemēram, 60 katru reizi, kad viņi izsauktu funkciju avota kodā, viņi varētu izmantot AUTOSAVE_INTERVAL konstantu, lai nodrošinātu labāku lasāmību.(Konstantes parasti ir viegli atpazīstamas, jo tās ir rakstītas visās lielajās burti).

Visi šie piemēri var attiekties uz vārdu Magic Numbers, jo, lai funkcija vai faila tips darbotos pareizi, tiem var būt nepieciešams konkrēts heksadecimālais skaitlis. .. ja vērtība nav pareiza, tā nedarbosies. Un, kad programmētājs vēlas mazliet jautri, viņi var definēt šīs vērtības, izmantojot heksadecimālos skaitļus, kuri kaut ko izskaidro angļu valodā, citādi saukti par hexspeak.

Fun ar burvju numuriem: daži ievērojami piemēri

Katrs AppleScript beidzas ar FADEDEAD

Ja jūs ātri izpētīsiet Linux avota kodu, jūs redzēsiet, ka sistēmas izsaukumam Linux( _reboot() ir jāpieņem maģiskais mainīgaiskas ir vienāds ar heksadecimālo skaitli 0xfee1dead. Ja kaut kas mēģinātu izsaukt šo funkciju, vispirms nepārsniedzot šo burvju vērtību, tas tikai atgriezīs 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", par atsauci uz to, ka GPT parasti būtuko izmanto datoros, kas nomainīja BIOS ar UEFI, taču tam noteikti nav jābūt.

Microsoft gandrīz slēpa 0x0B00B135 to Hyper-V virtuālajā mašīnā, kas atbalsta Linux avota kodu, pēc tam tās mainīja vērtību 0xB16B00B5, un beidzot viņi to pārcēla uz decimālo, pirms tas tika noņemts no avota koda pavisam.

Vēl interesanti piemēri:

  • 0xbaaaaaad - tiek izmantots iOS crash logging, lai norādītu, ka žurnāls ir visas sistēmas kopējais skats.
  • 0xbad22222 - izmanto iOS crash reģistrēšanos, lai norādītu, ka iOS ir nogalinājusi VoIP lietotni, jo tā ir nepareizi izmantota.
  • 0x8badf00d -( Ate Bad Food), ko izmanto iOS avārijas žurnālos, lai norādītu, ka lietojumprogramma aizņēma pārāk ilgu laiku, lai kaut ko darītu, un tika nogalināts ar sargsuņa taimautu.
  • 0xdeadfa11 -( Dead Fall), ko izmanto iOS crash reģistrēšanā, kad lietotne ir piespiedu kārtā iziet no lietotāja.
  • 0xDEADD00D - izmanto Android, lai norādītu uz VM pārtraukšanu.
  • 0xDEAD10CC( Dead Lock), ko izmanto iOS avārijas žurnālā, kad lietojumprogramma fiksē resursu.
  • 0xBAADF00D( slikta pārtika), ko izmanto Windows LocalAlloc funkcijai atkļūdošanai.
  • 0xCAFED00D( Cafe dude), ko izmanto Java pack200 saspiešana.
  • 0xCAFEBABE( kafejnīcas babe), kuru Java izmantoja kā kompilēto klases failu identifikatoru
  • 0x0D15EA5E( slimība), ko Nintendo izmantoja Gamecube un Wii, lai parādītu normālu sāknēšanas darbību.
  • 0x1BADB002( 1 slikta sāknēšana), ko multiboota specifikācija izmanto kā burvju skaitli
  • 0xDEADDEAD - izmanto Windows, lai norādītu manuāli uzsākto atkļūdošanas avāriju, kas citādi pazīstama kā Blue Screen of Death.

Tie, protams, nav vienīgie, bet tikai īss piemēru saraksts, kas šķita jautri. Vai zināt vēl? Pastāsti mums komentāros.

Skatiet piemērus par sevi

Jūs varat redzēt vairāk piemēru, atverot hex redaktoru un pēc tam atverot jebkuru failu tipu skaitu. Windows, OS X vai Linux ir pieejami daudz brīvās versijas heksadecinātāju redaktori - vienkārši pārliecinieties, ka esat piesardzīgs, instalējot bezmaksas programmatūru, lai neinficētu ar crapware vai spiegprogrammatūru.

Kā pievienotu piemēru atgūšanas attēlus Android tālruņiem, piemēram, ClockworkMod, sākas ar "ANDROID!", Ja tos nolasa ASCII formātā.

Piezīme: neko nemainot, kamēr jūs skatāties apkārt. Hex redaktori var salauzt lietas!