24Aug

Magic Numbers: Οι μυστικοί κωδικοί που οι προγραμματιστές κρύβουν στον υπολογιστή σας

click fraud protection

Από τη στιγμή που το πρώτο άτομο έγραψε 5318008 σε μια αριθμομηχανή, τα κορίτσια έχουν κρύβει μυστικούς αριθμούς στο εσωτερικό του υπολογιστή σας και χρησιμοποιούν τα για να διαπραγματεύονται μυστικές χειραψίες μεταξύ εφαρμογών και αρχείων.Σήμερα ρίχνουμε μια γρήγορη ματιά σε μερικά από τα πιο διασκεδαστικά παραδείγματα.

Τι είναι οι μαγικοί αριθμοί;

Οι περισσότερες γλώσσες προγραμματισμού χρησιμοποιούν έναν ακέραιο τύπο 32-bit για να αντιπροσωπεύουν ορισμένους τύπους δεδομένων πίσω από τις σκηνές - εσωτερικά ο αριθμός αποθηκεύεται στη μνήμη RAM ή χρησιμοποιείται από την CPU ως 32 και μηδενικά, αλλά στον πηγαίο κώδικα θα γράφτηκε σεείτε κανονική δεκαδική μορφή είτε ως δεκαεξαδική μορφή, η οποία χρησιμοποιεί τους αριθμούς 0 έως 9 και τα γράμματα Α έως F.

Όταν το λειτουργικό σύστημα ή μια εφαρμογή θέλει να καθορίσει τον τύπο ενός αρχείου, μπορεί να αναζητήσει την αρχή του αρχείουγια έναν ειδικό δείκτη που υποδηλώνει τον τύπο του αρχείου.Για παράδειγμα, ένα αρχείο PDF μπορεί να ξεκινήσει με την τιμή hex 0x255044462D312E33, η οποία ισούται με το "% PDF-1.3" σε μορφή ASCII ή ένα αρχείο ZIP αρχίζει με το 0x504B, το οποίο ισούται με το "PK" που κατεβαίνει από το αρχικό βοηθητικό πρόγραμμα PKZip.Με την εξέταση αυτής της "υπογραφής", ένας τύπος αρχείου μπορεί να αναγνωριστεί εύκολα ακόμα και χωρίς άλλα μεταδεδομένα.

instagram viewer

Τα αρχεία Java Class Compiled ξεκινούν με το CAFEBABE

Το βοηθητικό πρόγραμμα "Linux" του Linux μπορεί να χρησιμοποιηθεί από το τερματικό για να καθορίσει τον τύπο ενός αρχείου - στην πραγματικότητα διαβάζει τους μαγικούς αριθμούς από ένα αρχείο που ονομάζεται "μαγικό".

Όταν μια εφαρμογή θέλειγια να καλέσει μια συνάρτηση, μπορεί να μεταβιβάσει τιμές σε αυτή τη λειτουργία χρησιμοποιώντας τυπικούς τύπους όπως ακέραιος, ο οποίος μπορεί να εκφραστεί στον πηγαίο κώδικα σε δεκαεξαδική μορφή.Αυτό ισχύει ιδιαίτερα για τις σταθερές, οι οποίες είναι αναγνωριστικά που ορίζονται με αναγνωρίσιμα από τον άνθρωπο ονόματα όπως το 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 - χρησιμοποιείται από την καταγραφή συντριβής iOS για να υποδείξει ότι ένα αρχείο καταγραφής είναι ένα stackshot ολόκληρου του συστήματος.
  • 0xbad22222 - χρησιμοποιείται από την καταγραφή συντριβών iOS για να υποδείξει ότι μια εφαρμογή VoIP έχει σκοτωθεί από iOS επειδή έχει κακή συμπεριφορά.
  • 0x8badf00d -( Ate Bad Food) που χρησιμοποιείται από τα αρχεία καταγραφής συνθηκών iOS για να δείξει ότι μια εφαρμογή πήρε πολύ χρόνο για να κάνει κάτι και σκοτώθηκε από το χρονικό όριο του watchdog.
  • 0xdeadfa11 -( Dead Fall) που χρησιμοποιείται από την καταγραφή συναγερμών iOS όταν μια εφαρμογή τερματίζεται από ένα χρήστη.
  • 0xDEADD00D - χρησιμοποιείται από το Android για να υποδείξει μια VM abort.
  • 0xDEAD10CC( Dead Lock) που χρησιμοποιείται από την καταγραφή συναγερμών iOS όταν μια εφαρμογή κλειδώνει έναν πόρο στο παρασκήνιο.
  • 0xBAADF00D( κακή διατροφή) που χρησιμοποιείται από τη λειτουργία LocalAlloc στα Windows για σφάλμα.
  • 0xCAFED00D( Cafe dude) που χρησιμοποιείται από τη συμπίεση pack200 της Java.Το
  • 0xCAFEBABE( Cafe babe) που χρησιμοποιείται από την Java ως αναγνωριστικό για τα αρχεία κατηγορίας
  • 0x0D15EA5E( Disease) που χρησιμοποιούνται από τη Nintendo στο Gamecube και το Wii για να δείξει ότι μια κανονική εκκίνηση έγινε.
  • 0x1BADB002( 1 κακή εκκίνηση) που χρησιμοποιείται από την προδιαγραφή πολλαπλών εκκινήσεων ως μαγικό αριθμό
  • 0xDEADDEAD - χρησιμοποιείται από τα Windows για να υποδείξει ένα χειροκίνητο σφάλμα εντοπισμού σφαλμάτων, γνωστό και ως μπλε οθόνη θανάτου.

Αυτά δεν είναι τα μόνα εκεί έξω, βέβαια, αλλά απλά μια σύντομη λίστα παραδειγμάτων που φαινόταν διασκεδαστική.Μάθετε περισσότερα;Πείτε μας στα σχόλια.

Βλέποντας Παραδείγματα για τον εαυτό σας

Μπορείτε να δείτε περισσότερα παραδείγματα ανοίγοντας ένα hex editor και στη συνέχεια ανοίγοντας οποιοδήποτε αριθμό τύπων αρχείων.Υπάρχουν διαθέσιμα πλήκτρα δωρεάν editors για Windows, OS X ή Linux - βεβαιωθείτε ότι είστε προσεκτικοί κατά την εγκατάσταση του δωρεάν λογισμικού για να μην μολυνθείτε από crapware ή spyware.

Ως πρόσθετο παράδειγμα, οι εικόνες αποκατάστασης για τηλέφωνα Android όπως το ClockworkMod ξεκινούν με "ANDROID!" Εάν διαβάζονται σε μορφή ASCII.

Σημείωση: Το δεν αλλάζει τίποτα ενώ κοιτάζετε.Οι Hex συντάκτες μπορούν να σπάσουν τα πράγματα!