Magic Numbers รหัสลับที่โปรแกรมเมอร์ซ่อนไว้ในพีซีของคุณ
นับตั้งแต่คนแรกที่เขียน 5318008 บนเครื่องคิดเลข nerds ได้ซ่อนตัวเลขลับไว้ในพีซีของคุณและใช้เพื่อเจรจาจับมือลับระหว่างแอปพลิเคชันและไฟล์ วันนี้เรามาดูตัวอย่างความบันเทิงที่รวดเร็วยิ่งขึ้น.
เบอร์เมจิกคืออะไร?
ภาษาการเขียนโปรแกรมส่วนใหญ่ใช้ชนิดจำนวนเต็ม 32- บิตเพื่อแสดงข้อมูลบางประเภทที่อยู่เบื้องหลัง - ภายในตัวเลขนั้นถูกเก็บไว้ใน RAM หรือใช้โดย CPU เป็น 32 ตัวและศูนย์ แต่ในซอร์สโค้ดมันจะเขียนออกมาทั้ง รูปแบบทศนิยมปกติหรือเป็นรูปแบบเลขฐานสิบหกซึ่งใช้ตัวเลข 0 ถึง 9 และตัวอักษร A ถึง F.
เมื่อระบบปฏิบัติการหรือแอปพลิเคชันต้องการกำหนดประเภทของไฟล์ระบบสามารถค้นหาจุดเริ่มต้นของไฟล์เพื่อหาเครื่องหมายพิเศษที่ระบุประเภทของไฟล์ ตัวอย่างเช่นไฟล์ PDF อาจเริ่มต้นด้วยค่าฐานสิบหก 0x255044462D312E33 ซึ่งเท่ากับ“% PDF-1.3” ในรูปแบบ ASCII หรือไฟล์ ZIP ขึ้นต้นด้วย 0x504B ซึ่งเท่ากับ“ PK” ซึ่งสืบทอดมาจากยูทิลิตี้ PKZip ดั้งเดิม โดยการดูที่“ ลายเซ็นต์นี้” ไฟล์ประเภทนั้นสามารถระบุได้ง่ายแม้ไม่มีเมทาดาทาอื่น ๆ.
ไฟล์ Java Class ที่คอมไพล์เริ่มต้นด้วย CAFEBABE"ไฟล์" ยูทิลิตี้ของ Linux สามารถใช้จากเทอร์มินัลเพื่อกำหนดประเภทของไฟล์ - ในความเป็นจริงมันอ่านหมายเลขเวทย์มนตร์จากไฟล์ที่เรียกว่า "เวท"
เมื่อแอปพลิเคชันต้องการเรียกใช้ฟังก์ชันสามารถส่งค่าไปยังฟังก์ชันนั้นโดยใช้ชนิดมาตรฐานเช่นจำนวนเต็มซึ่งสามารถแสดงในซอร์สโค้ดในรูปแบบเลขฐานสิบหก นี่คือความจริงโดยเฉพาะอย่างยิ่งสำหรับค่าคงที่ซึ่งเป็นตัวระบุที่กำหนดด้วยชื่อที่มนุษย์สามารถอ่านได้เช่น AUTOSAVE_INTERVAL แต่จะจับคู่กับค่าจำนวนเต็มจริง (หรือประเภทอื่น ๆ ) ดังนั้นแทนที่จะให้โปรแกรมเมอร์พิมพ์ค่าเช่น 60 ทุกครั้งที่เรียกฟังก์ชันในซอร์สโค้ดพวกเขาสามารถใช้ค่าคงที่ AUTOSAVE_INTERVAL เพื่อให้อ่านง่ายขึ้น (ค่าคงที่มักจะจดจำได้ง่ายเพราะเขียนด้วยตัวพิมพ์ใหญ่ทั้งหมด).
ตัวอย่างทั้งหมดเหล่านี้สามารถอยู่ภายใต้คำว่า Magic Numbers เนื่องจากอาจต้องใช้เลขฐานสิบหกเฉพาะเพื่อให้ฟังก์ชันหรือประเภทไฟล์ทำงานอย่างถูกต้อง ... หากค่าไม่ถูกต้องจะไม่ทำงาน และเมื่อโปรแกรมเมอร์ต้องการให้สนุกพวกเขาอาจกำหนดค่าเหล่านี้โดยใช้เลขฐานสิบหกที่สะกดสิ่งในภาษาอังกฤษหรือที่เรียกว่า hexspeak.
สนุกกับตัวเลขเวทย์: ตัวอย่างเด่น ๆ
AppleScript ทุกอันลงท้ายด้วย FADEDEADหากคุณมองเข้าไปในซอร์สโค้ด Linux อย่างรวดเร็วคุณจะเห็นว่าการเรียกระบบ _reboot () บน Linux ต้องใช้ตัวแปร“ เวทมนต์” ที่จะผ่านซึ่งเท่ากับเลขฐานสิบหก 0xfee1dead หากมีสิ่งใดที่พยายามเรียกใช้ฟังก์ชั่นนั้นโดยไม่ผ่านค่าเวทย์มนตร์นั้นก่อนมันก็แค่ส่งคืนข้อผิดพลาด.
GUID (ตัวระบุที่ไม่ซ้ำกันทั่วโลก) สำหรับพาร์ติชันสำหรับเริ่มระบบ BIOS ในรูปแบบการแบ่งพาร์ติชัน GPT คือ 21686148-6449-6E6F-744E-656564454649 ซึ่งเป็นสตริง ASCII“ Hah! IdontNeedEFI” ซึ่งเป็นการพาดพิงถึงความจริงที่ว่า GPT จะใช้งานตามปกติ ในคอมพิวเตอร์ที่แทนที่ BIOS ด้วย UEFI แต่ไม่จำเป็นต้องเป็น.
Microsoft มีชื่อเสียงซ่อน 0x0B00B135 ในเครื่องเสมือน Hyper-V ที่สนับสนุนซอร์สโค้ดที่ส่งไปยัง Linux จากนั้นพวกเขาเปลี่ยนค่าเป็น 0xB16B00B5 และในที่สุดพวกเขาก็เปลี่ยนเป็นทศนิยมก่อนที่จะถูกลบออกจากซอร์สโค้ดโดยสิ้นเชิง.
ตัวอย่างที่สนุกยิ่งขึ้น ได้แก่ :
- 0xbaaaaaad - ใช้โดยการบันทึกข้อผิดพลาดของ iOS เพื่อระบุว่าบันทึกเป็นภาพรวมของระบบทั้งหมด.
- 0xbad22222 - ใช้โดยการบันทึกข้อผิดพลาดของ iOS เพื่อระบุว่าแอพ VoIP ถูกฆ่าเพราะ iOS ทำงานผิดปกติ.
- 0x8badf00d - (Ate Bad Food) ใช้โดยบันทึกข้อผิดพลาดของ iOS เพื่อระบุว่าแอปพลิเคชันใช้เวลานานเกินไปในการทำบางสิ่งบางอย่างและถูกฆ่าโดยการจ้องจับผิดหมดเวลา.
- 0xdeadfa11 - (Dead Fall) ที่ใช้ในการบันทึกข้อผิดพลาดของ iOS เมื่อแอปบังคับให้ผู้ใช้ออกจากโปรแกรม.
- 0xDEADD00D - ใช้โดย Android เพื่อระบุ VM การยกเลิก.
- 0xDEAD10CC (Dead Lock) ที่ iOS ใช้ในการบันทึกข้อผิดพลาดเมื่อแอปพลิเคชันล็อคทรัพยากรในพื้นหลัง.
- 0xBAADF00D (อาหารไม่ดี) ที่ใช้โดยฟังก์ชัน LocalAlloc ใน Windows สำหรับการดีบัก.
- 0xCAFED00D (Cafe dude) ใช้โดยการบีบอัด pack200 ของ Java.
- 0xCAFEBABE (Cafe babe) ที่ใช้โดย Java เป็นตัวระบุสำหรับไฟล์คลาสที่คอมไพล์
- 0x0D15EA5E (โรค) ที่ใช้โดย Nintendo ในเกมคิวบ์และ Wii เพื่อระบุว่ามีการบูตปกติเกิดขึ้น.
- 0x1BADB002 (1 บูตไม่ดี) ที่ใช้โดยข้อมูลจำเพาะมัลติบูตเป็นหมายเลขมายากล
- 0xDEADDEAD - ใช้โดย Windows เพื่อระบุข้อผิดพลาดในการดีบักที่เริ่มต้นด้วยตนเองหรือที่เรียกว่า Blue Screen of Death.
แน่นอนว่าสิ่งเหล่านี้ไม่ใช่สิ่งเดียวที่อยู่ในนั้น แต่เป็นเพียงตัวอย่างสั้น ๆ ที่ดูสนุก รู้อะไรอีกบ้าง? บอกเราในความคิดเห็น.
ดูตัวอย่างด้วยตัวคุณเอง
คุณสามารถดูตัวอย่างเพิ่มเติมได้โดยเปิดตัวแก้ไข hex แล้วเปิดชนิดไฟล์จำนวนเท่าใดก็ได้ มีโปรแกรมแก้ไข hex ฟรีแวร์มากมายสำหรับ Windows, OS X หรือ Linux - เพียงตรวจสอบให้แน่ใจว่าคุณระมัดระวังในการติดตั้งฟรีแวร์เพื่อไม่ให้ติดไวรัส crapware หรือสปายแวร์.
เป็นตัวอย่างเพิ่มเติมรูปภาพกู้คืนสำหรับโทรศัพท์ Android เช่น ClockworkMod เริ่มต้นด้วย“ ANDROID!” ถ้าอ่านในรูปแบบ ASCII.
บันทึก: อย่าเปลี่ยนอะไรในขณะที่คุณมองไปรอบ ๆ ผู้แก้ไขฐานสิบหกสามารถทำลายสิ่งต่าง ๆ ได้!