Kopš pirmā persona kalkulatorā ir izrakstījusi 5318008, nerds slēpj slepenus numurus savā datorā 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.
Lielākā daļa programmēšanas valodu izmanto 32 bitu integer tipa, lai pārstāvētu dažus 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īts vai nu standarta decimāldaļskaitli vai kā heksadecimālu formātu, kurā tiek izmantoti skaitļi no 0 līdz 9 un burti no A līdz F.
Ja operētājsistēma vai lietojumprogramma vēlas noteikt faila tipu, faila sākumā tas var apskatīt īpašu marķieri, 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.
Sastādītā Java klases faili sākas ar CAFEBABELinux lietderība "fails" var tikt izmantota no termināļa, lai noteiktu faila tipu - patiesībā tā maina burtus numurus no faila ar nosaukumu "maģija".
Ja lietojumprogramma vēlas izsaukt funkciju, tā var nodot šīs funkcijas vērtības, izmantojot standarta veidus, piemēram, vesels skaitlis, kuru var izteikt pirmkodā heksadecimālā formātā. 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, tas 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.
Ja jūs ātri izpētīsiet Linux avota kodu, jūs redzēsiet, ka sistēmas pārlūka _reboot () sistēmai Linux ir nepieciešams mainīt "burvju" mainīgo, kas 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.
GUIT (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, taču tam noteikti nav jābūt.
Microsoft gandrīz slīda 0x0B00B135 to Hyper-V virtuālajā mašīnā, kas atbalsta Linux kodu, un pēc tam tās mainīja vērtību 0xB16B00B5, un visbeidzot tās pārcēlās uz decimālo, pirms tas tika noņemts no avota koda pavisam.
Vairāk jautrāku piemēri ir:
Protams, tie nav vienīgie, bet tikai īss piemēru saraksts, kas šķita jautri. Vai zināt vēl? Pastāsti mums komentāros.
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 lasāmi ASCII formātā.
Piezīme: neko nemainiet, kamēr skatāties apkārt. Hex redaktori var salauzt lietas!