24Aug

Nomor Sihir: Kode Rahasia yang Pemrogram Sembunyikan di PC Anda

Sejak orang pertama menulis 5318008 pada kalkulator, kutu buku menyembunyikan nomor rahasia di dalam PC Anda, dan menggunakannya untuk menegosiasikan jabat tangan rahasia antara aplikasi dan file. Hari ini kita melihat sekilas beberapa contoh yang lebih menghibur.

Apa itu Nomor Sihir?

Sebagian besar bahasa pemrograman menggunakan tipe integer 32 bit untuk mewakili beberapa jenis data di belakang layar - secara internal nomor tersebut disimpan dalam RAM atau digunakan oleh CPU sebanyak 32 digit dan nol, namun dalam kode sumber akan dituliskan dibaik format desimal biasa, atau format heksadesimal, yang menggunakan angka 0 sampai 9 dan huruf A sampai F.

Bila sistem operasi atau aplikasi ingin menentukan jenis file, file tersebut dapat melihat ke awal fileuntuk penanda khusus yang menandakan jenis file. Misalnya, file PDF mungkin dimulai dengan nilai hex 0x255044462D312E33, yang sama dengan "% PDF-1.3" dalam format ASCII, atau file ZIP dimulai dengan 0x504B, yang sama dengan "PK", yang turun dari utilitas PKZip asli. Dengan melihat "tanda tangan" ini, jenis file dapat dengan mudah diidentifikasi bahkan tanpa metadata lain.

Menyusun file Java Class dimulai dengan CAFEBABE

Utilitas Linux "file" dapat digunakan dari terminal untuk menentukan jenis file - sebenarnya, ia membaca angka ajaib dari sebuah file bernama "magic."

Ketika sebuah aplikasi menginginkanuntuk memanggil sebuah fungsi, ia dapat melewatkan nilai pada fungsi tersebut dengan menggunakan tipe standar seperti integer, yang dapat dinyatakan dalam kode sumber dalam format heksadesimal. Hal ini terutama berlaku untuk konstanta, yang merupakan pengenal yang didefinisikan dengan nama yang dapat dibaca manusia seperti AUTOSAVE_INTERVAL, namun mereka memetakan ke nilai bilangan bulat( atau jenis lainnya) yang sebenarnya. Jadi, alih-alih seorang programmer mengetikkan nilai seperti 60 setiap kali mereka memanggil fungsi di kode sumber, mereka bisa menggunakan konstanta AUTOSAVE_INTERVAL untuk keterbacaan yang lebih baik.(Konstanta biasanya mudah dikenali karena ditulis dalam huruf besar semua).

Semua contoh ini bisa jatuh di bawah istilah Magic Numbers, karena mungkin memerlukan nomor heksadesimal tertentu agar fungsi atau jenis file berfungsi dengan baik. .. jika nilainya tidak benar maka tidak akan berhasil. Dan ketika seorang programmer ingin bersenang-senang sedikit, mereka mungkin mendefinisikan nilai-nilai ini dengan menggunakan angka heksadesimal yang mengeja sesuatu dalam bahasa Inggris, atau dikenal dengan heksspeak.

Kesenangan Dengan Nomor Sihir: Beberapa Contoh Penting

Setiap AppleScript berakhir dengan FADEDEAD

Jika Anda melihat sekilas kode sumber Linux, Anda akan melihat bahwa sistem _reboot() memanggil sistem di Linux memerlukan variabel "ajaib" yang harus dilalui.itu sama dengan bilangan heksadesimal 0xfee1dead. Jika ada yang mencoba memanggil fungsi itu tanpa melewati nilai ajaib itu terlebih dahulu, itu hanya akan mengembalikan kesalahan.

GUID( pengenal unik global) untuk partisi boot BIOS dalam skema partisi GPT adalah 21686148-6449-6E6F-744E-656564454649, yang membentuk string ASCII "Hah! IdontNeedEFI", sebuah kiasan untuk fakta bahwa GPT biasanyaDigunakan di komputer yang menggantikan BIOS dengan UEFI, tapi tidak harus begitu.

Microsoft terkenal menyembunyikan 0x0B00B135 di kode sumber pendukung mesin virtual Hyper-V yang dikirimkan ke Linux, kemudian mengubah nilainya menjadi 0xB16B00B5, dan akhirnya mereka mengubahnya menjadi desimal sebelum dihapus dari kode sumber sama sekali.

Contoh yang lebih menyenangkan meliputi:

  • 0xbaaaaaad - digunakan oleh iOS crash logging untuk menunjukkan bahwa log adalah kumpulan dari keseluruhan sistem.
  • 0xbad22222 - digunakan oleh iOS crash logging untuk menunjukkan bahwa aplikasi VoIP telah terbunuh oleh iOS karena berperilaku tidak tepat.
  • 0x8badf00d -( Ate Bad Food) yang digunakan oleh log kecelakaan iOS untuk menunjukkan bahwa aplikasi memakan waktu terlalu lama untuk melakukan sesuatu dan terbunuh oleh batas waktu pengawas.
  • 0xdeadfa11 -( Jatuh Mati) yang digunakan oleh iOS crash logging saat sebuah aplikasi dipaksa berhenti oleh pengguna.
  • 0xDEADD00D - digunakan oleh Android untuk menunjukkan bahwa VM dibatalkan.
  • 0xDEAD10CC( Dead Lock) yang digunakan oleh iOS crash logging saat sebuah aplikasi mengunci sumber di latar belakang.
  • 0xBAADF00D( Makanan Buruk) yang digunakan oleh fungsi LocalAlloc di Windows untuk debugging.
  • 0xCAFED00D( Cafe dude) yang digunakan oleh kompresi pack200 di Jawa.
  • 0xCAFEBABE( Cafe babe) yang digunakan oleh Java sebagai pengenal untuk file kelas terkompilasi
  • 0x0D15EA5E( Penyakit) yang digunakan oleh Nintendo di Gamecube dan Wii untuk menunjukkan adanya boot normal terjadi.
  • 0x1BADB002( 1 boot buruk) yang digunakan oleh spesifikasi multiboot sebagai nomor ajaib
  • 0xDEADDEAD - digunakan oleh Windows untuk menunjukkan crash debug yang dimulai secara manual, atau dikenal sebagai Blue Screen of Death.

Ini bukan satu-satunya yang ada di luar sana, tentu saja, tapi hanya daftar singkat contoh yang terasa menyenangkan. Tahu lagi? Beritahu kami di komentar.

Melihat Contoh untuk Diri Anda

Anda dapat melihat lebih banyak contoh dengan membuka editor hex dan kemudian membuka sejumlah jenis file. Ada banyak editor hex freeware yang tersedia untuk Windows, OS X, atau Linux - pastikan Anda berhati-hati saat menginstal freeware agar tidak terinfeksi crapware atau spyware.

Sebagai contoh tambahan, gambar pemulihan untuk ponsel Android seperti ClockworkMod dimulai dengan "ANDROID!" Jika dibaca dalam format ASCII.

Catatan: jangan mengubah apapun saat Anda melihat-lihat. Editor Hex dapat memecahkan hal-hal!