Magic Numbers Οι μυστικοί κωδικοί που οι προγραμματιστές κρύβονται στον υπολογιστή σας
Από τότε που το πρώτο πρόσωπο έγραψε 5318008 σε μια αριθμομηχανή, τα κορίτσια έχουν κρύψει μυστικούς αριθμούς στο εσωτερικό του υπολογιστή σας και χρησιμοποιούν τα για να διαπραγματευτούν μυστικές χειραψίες μεταξύ εφαρμογών και αρχείων. Σήμερα ρίχνουμε μια γρήγορη ματιά σε μερικά από τα πιο διασκεδαστικά παραδείγματα.
Τι είναι οι Μαγικοί Αριθμοί?
Οι περισσότερες γλώσσες προγραμματισμού χρησιμοποιούν έναν ακέραιο τύπο 32 bit για να αντιπροσωπεύουν ορισμένους τύπους δεδομένων πίσω από τις σκηνές - εσωτερικά ο αριθμός αποθηκεύεται στη μνήμη RAM ή χρησιμοποιείται από τη CPU ως 32 και nul, αλλά στον πηγαίο κώδικα θα γράφεται είτε κανονική δεκαδική μορφή ή ως δεκαεξαδική μορφή, η οποία χρησιμοποιεί τους αριθμούς 0 έως 9 και τα γράμματα Α έως F.
Όταν το λειτουργικό σύστημα ή μια εφαρμογή θέλει να καθορίσει τον τύπο ενός αρχείου, μπορεί να αναζητήσει την αρχή του αρχείου για έναν ειδικό δείκτη που υποδηλώνει τον τύπο του αρχείου. Για παράδειγμα, ένα αρχείο PDF μπορεί να ξεκινά με την τιμή hex 0x255044462D312E33, η οποία ισούται με το "% PDF-1.3" σε μορφή ASCII ή ένα αρχείο ZIP αρχίζει με το 0x504B, το οποίο ισούται με το "PK", το οποίο κατεβαίνει από το αρχικό βοηθητικό πρόγραμμα PKZip. Με την εξέταση αυτής της "υπογραφής", ένας τύπος αρχείου μπορεί εύκολα να αναγνωριστεί ακόμα και χωρίς άλλα μεταδεδομένα.
Τα αρχεία Java Class που έχουν συνταχθεί ξεκινούν από το CAFEBABEΤο βοηθητικό πρόγραμμα "Linux" του Linux μπορεί να χρησιμοποιηθεί από το τερματικό για να καθορίσει τον τύπο ενός αρχείου - στην πραγματικότητα, διαβάζει τους μαγικούς αριθμούς από ένα αρχείο που ονομάζεται "magic".
Όταν μια εφαρμογή θέλει να καλέσει μια συνάρτηση, μπορεί να μεταβιβάσει τιμές σε αυτή τη λειτουργία χρησιμοποιώντας τυπικούς τύπους όπως ακέραιος, ο οποίος μπορεί να εκφραστεί στον πηγαίο κώδικα σε δεκαεξαδική μορφή. Αυτό ισχύει ιδιαίτερα για τις σταθερές, οι οποίες είναι αναγνωριστικά που ορίζονται με αναγνωρίσιμα από τον άνθρωπο ονόματα όπως το AUTOSAVE_INTERVAL, αλλά αντιστοιχούν σε πραγματικές τιμές ακέραιου (ή άλλου τύπου). Έτσι, αντί ενός προγραμματιστή που πληκτρολογεί μια τιμή όπως 60 κάθε φορά που καλούν τη λειτουργία στον πηγαίο κώδικα, θα μπορούσαν να χρησιμοποιήσουν τη σταθερά AUTOSAVE_INTERVAL για καλύτερη αναγνωσιμότητα. (Οι σταθερές συνήθως αναγνωρίζονται εύκολα επειδή είναι γραμμένες με όλα τα κεφαλαία γράμματα).
Όλα αυτά τα παραδείγματα μπορούν να εμπίπτουν στον όρο Μαγικοί αριθμοί, επειδή μπορεί να απαιτούν έναν συγκεκριμένο δεκαεξαδικό αριθμό για να λειτουργήσει σωστά ένας τύπος λειτουργίας ή αρχείου ... εάν η τιμή δεν είναι σωστή, δεν θα λειτουργήσει. Και όταν ένας προγραμματιστής θέλει να έχει λίγη διασκέδαση, μπορεί να ορίσει αυτές τις τιμές χρησιμοποιώντας δεκαεξαδικούς αριθμούς που εξηγούν κάτι στα αγγλικά, γνωστό και ως hexspeak.
Διασκέδαση με μαγικούς αριθμούς: Μερικά αξιοσημείωτα παραδείγματα
Κάθε AppleScript τελειώνει με FADEDEADΕάν εξετάσετε γρήγορα τον πηγαίο κώδικα του Linux, θα δείτε ότι η κλήση συστήματος _reboot () στο Linux απαιτεί να περάσει μια μεταβλητή "magic" που να αντιστοιχεί στον δεκαεξαδικό αριθμό 0xfee1dead. Αν κάτι προσπαθήσει να καλέσει αυτή τη λειτουργία χωρίς να περάσει πρώτα σε αυτή τη μαγική αξία, θα επιστρέψει απλά ένα λάθος.
Το GUID (παγκόσμιο μοναδικό αναγνωριστικό) για ένα διαμέρισμα εκκίνησης του BIOS στο σχήμα διαμέρισης GPT είναι 21686148-6449-6E6F-744E-656564454649, το οποίο σχηματίζει τη συμβολοσειρά ASCII "Hah! IdontNeedEFI", μια παραπομπή στο γεγονός ότι η GPT κανονικά θα χρησιμοποιηθεί σε υπολογιστές που αντικατέστησαν το BIOS με UEFI, αλλά δεν πρέπει απαραίτητα να είναι.
Η Microsoft κρύβει περίφημα το 0x0B00B135 στον πηγαίο κώδικα Hyper-V που υποστηρίζει την εικονική μηχανή που υποβλήθηκε στο Linux, κατόπιν άλλαξε την τιμή στο 0xB16B00B5 και τελικά το μετασχημάτισε σε δεκαδικό πριν αφαιρεθεί από τον πηγαίο κώδικα.
Τα πιο διασκεδαστικά παραδείγματα περιλαμβάνουν:
- 0xbaaaaaad - χρησιμοποιείται από την εγγραφή crash iOS για να υποδείξει ότι ένα αρχείο καταγραφής είναι ένα stackshot ολόκληρου του συστήματος.
- 0xbad22222 - που χρησιμοποιείται από την καταγραφή συντριβών iOS για να δείξει ότι μια εφαρμογή VoIP έχει σκοτωθεί από iOS γιατί έχει κακή συμπεριφορά.
- Το 0x8badf00d - (Ate Bad Food) που χρησιμοποιείται από τα αρχεία καταγραφής συνθηκών iOS για να δείξει ότι μια εφαρμογή χρειάστηκε πολύ χρόνο για να κάνει κάτι και σκοτώθηκε από το χρονικό όριο του watchdog.
- 0xdeadfa11 - (Dead Fall) που χρησιμοποιείται από την καταγραφή crash στο iOS όταν μια εφαρμογή τερματίζεται από ένα χρήστη.
- 0xDEADD00D - που χρησιμοποιείται από το Android για να υποδείξει μια VM abort.
- 0xDEAD10CC (Dead Lock) που χρησιμοποιείται από την καταγραφή συναγερμών iOS όταν μια εφαρμογή κλειδώνει έναν πόρο στο παρασκήνιο.
- 0xBAADF00D (κακή διατροφή) που χρησιμοποιείται από τη λειτουργία LocalAlloc στα Windows για σφαλμάτωση.
- 0xCAFED00D (Cafe dude) που χρησιμοποιείται από τη συμπίεση pack200 της Java.
- 0xCAFEBABE (Cafe babe) που χρησιμοποιείται από την Java ως αναγνωριστικό για τα αρχεία κατηγοριοποιημένων αρχείων
- 0x0D15EA5E (Ασθένεια) που χρησιμοποιείται από τη Nintendo στο Gamecube και το Wii για να δείξει ότι μια κανονική εκκίνηση έγινε.
- 0x1BADB002 (1 κακή εκκίνηση) που χρησιμοποιείται από την προδιαγραφή πολλαπλών εκκινήσεων ως μαγικό αριθμό
- 0xDEADDEAD - χρησιμοποιείται από τα Windows για να υποδείξει μια χειροκίνητη συντριβή εντοπισμού σφαλμάτων, γνωστή και ως μπλε οθόνη του θανάτου.
Αυτά δεν είναι τα μόνα εκεί έξω, βέβαια, αλλά μόνο μια σύντομη λίστα παραδειγμάτων που φαινόταν διασκεδαστική. Μάθετε περισσότερα; Πείτε μας στα σχόλια.
Βλέποντας παραδείγματα για τον εαυτό σας
Μπορείτε να δείτε περισσότερα παραδείγματα ανοίγοντας ένα hex editor και στη συνέχεια ανοίγοντας οποιοδήποτε αριθμό τύπων αρχείων. Υπάρχει αφθονία δωρεάν εικονικών επεξεργαστών για Windows, OS X ή Linux - βεβαιωθείτε ότι είστε προσεκτικοί κατά την εγκατάσταση του δωρεάν λογισμικού για να μην μολυνθείτε από crapware ή spyware.
Ως πρόσθετο παράδειγμα, οι εικόνες αποκατάστασης για τηλέφωνα Android όπως το ClockworkMod ξεκινούν με "ANDROID!" Εάν διαβάζονται σε μορφή ASCII.
Σημείωση: Μην αλλάζετε τίποτα ενώ κοιτάζετε. Οι Hex συντάκτες μπορούν να σπάσουν τα πράγματα!