Nombor Magic Kod Rahsia yang Programmer Sembunyikan di PC anda
Sejak orang pertama menulis 5318008 pada kalkulator, kutu buku telah menyembunyikan nombor rahsia di dalam PC anda, dan menggunakannya untuk berunding jabat tangan rahsia antara aplikasi dan fail. Hari ini kita melihat dengan cepat beberapa contoh yang lebih menghiburkan.
Apakah Nombor Magic?
Kebanyakan bahasa pengaturcaraan menggunakan jenis integer 32-bit untuk mewakili jenis data tertentu di belakang tabir - secara dalaman nombor itu disimpan dalam RAM atau digunakan oleh CPU sebagai 32 dan nol, tetapi dalam kod sumbernya akan ditulis sama ada format perpuluhan yang tetap, atau sebagai format heksadesimal, yang menggunakan nombor 0 hingga 9 dan huruf A melalui F.
Apabila sistem pengendalian atau aplikasi ingin menentukan jenis fail, ia boleh melihat ke permulaan fail untuk penanda khas yang menandakan jenis fail tersebut. Sebagai contoh, fail PDF mungkin bermula dengan nilai hex 0x255044462D312E33, yang bersamaan dengan "% PDF-1.3" dalam format ASCII, atau fail ZIP bermula dengan 0x504B, yang sama dengan "PK", yang turun dari utiliti PKZip yang asal. Dengan melihat "tandatangan" ini, satu jenis fail dapat dikenal pasti dengan mudah tanpa sebarang metadata lain.
Fail Kelas Berkompilasi bermula dengan CAFEBABEUtiliti "fail" Linux boleh digunakan dari terminal untuk menentukan jenis fail - sebenarnya, ia membaca nombor sihir dari fail bernama "sihir."
Apabila aplikasi mahu memanggil fungsi, ia boleh lulus nilai ke fungsi tersebut menggunakan jenis standard seperti integer, yang boleh dinyatakan dalam kod sumber dalam format heksadesimal. Hal ini terutama berlaku untuk pemalar, yang pengenal pasti dengan nama yang boleh dibaca manusia seperti AUTOSAVE_INTERVAL, tetapi mereka memetakan ke nilai integer sebenar (atau jenis lain). Oleh itu, bukan seorang programmer menaip nilai seperti 60 setiap kali mereka memanggil fungsi dalam kod sumber, mereka boleh menggunakan pemalar AUTOSAVE_INTERVAL untuk pembacaan yang lebih baik. (Selalunya biasanya mudah dikenali kerana ia ditulis dalam semua huruf besar).
Kesemua contoh ini boleh didapati di bawah istilah Nombor Magic, kerana mereka mungkin memerlukan nombor heksadesimal khusus agar fungsi atau jenis fail berfungsi dengan baik ... jika nilai itu tidak betul, ia tidak akan berfungsi. Dan apabila pengaturcara ingin bersenang-senang, mereka mungkin menentukan nilai-nilai ini menggunakan nombor heksadesimal yang menguraikan sesuatu dalam bahasa Inggeris, atau dikenali sebagai hexspeak.
Fun With Magic Numbers: Beberapa Contoh Yang Menakjubkan
Setiap AppleScript berakhir dengan FADEDEADJika anda melihat dengan cepat kod sumber Linux, anda akan melihat bahawa panggilan sistem _reboot () pada Linux memerlukan pembolehubah "sihir" yang akan diluluskan yang bersamaan dengan nombor hexadecimal 0xfee1dead. Jika sesuatu cuba memanggil fungsi itu tanpa lulus dalam nilai sihir terlebih dahulu, ia hanya akan mengembalikan ralat.
GUID (pengecam unik di seluruh dunia) untuk pemisahan boot BIOS dalam skema pemisahan GPT ialah 21686148-6449-6E6F-744E-656564454649, yang membentuk rentetan ASCII "Hah! IdontNeedEFI", pernyataan kepada fakta bahawa GPT biasanya akan digunakan dalam komputer yang menggantikan BIOS dengan UEFI, tetapi tidak semestinya.
Microsoft terkenal menyembunyikan 0x0B00B135 dalam kod sumber maya Hyper-V yang menyokong kod sumbernya yang diserahkan kepada Linux, maka mereka mengubah nilai menjadi 0xB16B00B5, dan akhirnya mereka beralih ke desimal sebelum ia dikeluarkan dari kod sumber sama sekali.
Contoh yang lebih menyeronokkan termasuk:
- 0xbaaaaaad - digunakan oleh pembalakan kemalangan iOS untuk menunjukkan bahawa log adalah timbal balik dari seluruh sistem.
- 0xbad22222 - digunakan oleh pembalakan kemalangan iOS untuk menunjukkan bahawa aplikasi VoIP telah dibunuh oleh iOS kerana ia salah laku.
- 0x8badf00d - (Ate Bad Food) yang digunakan oleh log kemalangan iOS untuk menunjukkan bahawa aplikasi mengambil masa terlalu lama untuk melakukan sesuatu dan telah dibunuh oleh timeout watchdog.
- 0xdeadfa11 - (Dead Fall) yang digunakan oleh pembalakan kemalangan iOS apabila aplikasi berkuatkuasa keluar oleh pengguna.
- 0xDEADD00D - digunakan oleh Android untuk menunjukkan pengurangan VM.
- 0xDEAD10CC (Dead Lock) yang digunakan oleh pembalakan kemalangan iOS apabila aplikasi mengunci sumber di latar belakang.
- 0xBAADF00D (Makanan Bad) yang digunakan oleh fungsi LocalAlloc di Windows untuk debugging.
- 0xCAFED00D (Cafe dude) yang digunakan oleh Java pack200 compression.
- 0xCAFEBABE (Cafe babe) yang digunakan oleh Java sebagai pengenal untuk fail kelas terkumpul
- 0x0D15EA5E (Penyakit) yang digunakan oleh Nintendo pada Gamecube dan Wii untuk menunjukkan boot biasa berlaku.
- 0x1BADB002 (boot 1 buruk) yang digunakan oleh spesifikasi multiboot sebagai nombor ajaib
- 0xDEADDEAD - digunakan oleh Windows untuk menunjukkan kemalangan debug yang dimulakan secara manual, atau dikenali sebagai Skrin Kematian Blue.
Ini bukan satu-satunya di luar sana, tentu saja, tetapi hanya satu senarai pendek contoh yang kelihatan menyeronokkan. Ketahui lebih lanjut? Beritahu kami dalam ulasan.
Melihat Contoh untuk Diri Anda
Anda boleh melihat lebih banyak contoh dengan membuka editor hex dan kemudian membuka sebarang jenis fail. Terdapat banyak editor hex freeware yang tersedia untuk Windows, OS X, atau Linux - pastikan anda berhati-hati semasa memasang perisian percuma agar tidak dijangkiti crapware atau spyware.
Sebagai contoh yang ditambah, imej pemulihan untuk telefon Android seperti ClockworkMod bermula dengan "ANDROID!" Jika dibaca dalam format ASCII.
Catatan: jangan ubah apa-apa semasa anda melihat-lihat. Editor Hex boleh memecahkan perkara!