Δημιουργία ενός προσαρμοσμένου γνωστού τύπου αρχείου για το R-Studio. Προσδιορισμός του τύπου αρχείου με υπογραφή Τι είναι η υπογραφή αρχείου

Η εννοια του " μαγικός αριθμόςΤο "στον προγραμματισμό έχει τρεις έννοιες:

  • Υπογραφή δεδομένων
  • Διακεκριμένες μοναδικές τιμές που δεν πρέπει να είναι ίδιες με άλλες τιμές (όπως το UUID)
  • Κακή προγραμματιστική πρακτική.

Υπογραφή δεδομένων

μαγικός αριθμός, ή υπογραφή, είναι μια σταθερά ακέραιου αριθμού ή κειμένου που χρησιμοποιείται για τον μοναδικό προσδιορισμό ενός πόρου ή δεδομένων. Ένας τέτοιος αριθμός από μόνος του δεν έχει κανένα νόημα και μπορεί να προκαλέσει σύγχυση εάν εμφανιστεί στον κώδικα του προγράμματος χωρίς το κατάλληλο πλαίσιο ή σχόλιο, ενώ μια προσπάθεια αλλαγής του σε άλλο, έστω και κοντά σε αξία, μπορεί να οδηγήσει σε απολύτως απρόβλεπτες συνέπειες. Για το λόγο αυτό, τέτοιοι αριθμοί ονομάστηκαν ειρωνικά μαγικοί αριθμοί. Προς το παρόν, αυτό το όνομα είναι σταθερά εδραιωμένο ως όρος. Για παράδειγμα, οποιαδήποτε μεταγλωττισμένη τάξη γλώσσας Java ξεκινά με τον δεκαεξαδικό "μαγικό αριθμό" 0xCAFEBABE . Το δεύτερο ευρέως γνωστό παράδειγμα είναι οποιοδήποτε εκτελέσιμο αρχείο OS Microsoft Windowsμε την επέκταση .exe ξεκινά με την ακολουθία byte 0x4D5A (η οποία αντιστοιχεί στους χαρακτήρες ASCII MZ - τα αρχικά του Mark Zbikowski, ενός από τους δημιουργούς του MS-DOS). Ένα λιγότερο γνωστό παράδειγμα είναι ο μη αρχικοποιημένος δείκτης στο Microsoft Visual C++ (από την έκδοση του Microsoft Visual Studio το 2005), ο οποίος είναι 0xDEADBEEF στη λειτουργία εντοπισμού σφαλμάτων.

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

Κακή προγραμματιστική πρακτική

Επίσης, οι «μαγικοί αριθμοί» είναι μια κακή πρακτική προγραμματισμού όταν εμφανίζεται μια αριθμητική τιμή στο κείμενο προέλευσης και δεν είναι προφανές τι σημαίνει. Για παράδειγμα, ένα απόσπασμα όπως αυτό, γραμμένο σε Java, θα ήταν κακό:

drawSprite(53, 320, 240);

τελικό int SCREEN_WIDTH = 640 ; τελικό int SCREEN_HEIGHT = 480 ; τελικό int SCREEN_X_CENTER = SCREEN_WIDTH / 2 ; τελικό int SCREEN_Y_CENTER = SCREEN_HEIGHT / 2 ; τελικό int SPRITE_CROSSHAIR = 53 ; ... drawSprite(SPRITE_CROSSHAIR , SCREEN_X_CENTER , SCREEN_Y_CENTER );

Τώρα είναι ξεκάθαρο: αυτή η γραμμή εμφανίζει ένα ξωτικό στο κέντρο της οθόνης - το σταυρόνημα του οράματος. Στις περισσότερες γλώσσες προγραμματισμού, όλες οι τιμές που χρησιμοποιούνται για τέτοιες σταθερές θα υπολογιστούν κατά το χρόνο μεταγλώττισης και θα αντικατασταθούν στα σημεία όπου χρησιμοποιούνται οι τιμές. Επομένως, μια τέτοια αλλαγή στο κείμενο προέλευσης δεν επηρεάζει την απόδοση του προγράμματος.

Επιπλέον, οι μαγικοί αριθμοί αποτελούν πιθανή πηγή σφαλμάτων στο πρόγραμμα:

  • Εάν ο ίδιος μαγικός αριθμός χρησιμοποιείται περισσότερες από μία φορές σε ένα πρόγραμμα (ή θα μπορούσε ενδεχομένως να χρησιμοποιηθεί), τότε η αλλαγή του θα απαιτήσει επεξεργασία κάθε εμφάνισης (αντί απλώς να επεξεργαστείτε την τιμή της ονομαζόμενης σταθεράς). Εάν δεν διορθωθούν όλες οι εμφανίσεις, θα προκύψει τουλάχιστον ένα σφάλμα.
  • Σε τουλάχιστον ένα από τα περιστατικά, ο μαγικός αριθμός μπορεί να είναι αρχικά ανορθόγραφος και αυτό είναι αρκετά δύσκολο να εντοπιστεί.
  • Ο μαγικός αριθμός μπορεί να εξαρτάται από μια σιωπηρή παράμετρο ή από έναν άλλο μαγικό αριθμό. Εάν αυτές οι εξαρτήσεις, που δεν προσδιορίζονται ρητά, δεν ικανοποιούνται, θα προκύψει τουλάχιστον ένα σφάλμα.
  • Όταν τροποποιείτε τις εμφανίσεις ενός μαγικού αριθμού, είναι δυνατόν να αλλάξετε λανθασμένα έναν άλλο μαγικό αριθμό που είναι ανεξάρτητος αλλά έχει την ίδια αριθμητική τιμή.

Μαγικοί αριθμοί και cross-platform

Μερικές φορές οι μαγικοί αριθμοί βλάπτουν τον κώδικα πολλαπλών πλατφορμών. Το θέμα είναι ότι στο C σε λειτουργικό σύστημα 32 bit και 64 bit το μέγεθος των τύπων char , short και long long είναι εγγυημένο, ενώ το μέγεθος των int , long , size_t και ptrdiff_t μπορεί να αλλάξει (για τα δύο πρώτα - ανάλογα με το προτιμήσεις των προγραμματιστών μεταγλωττιστή). , για τα δύο τελευταία - ανάλογα με το βάθος bit του συστήματος προορισμού). Σε παλιό ή κακώς γραμμένο κώδικα, μπορεί να υπάρχουν "μαγικοί αριθμοί" που υποδεικνύουν το μέγεθος ενός τύπου - όταν μετακινείστε σε μηχανές με διαφορετικό bit, μπορεί να οδηγήσουν σε ανεπαίσθητα σφάλματα.

Για παράδειγμα:

const size_t NUMBER_OF_ELEMENTS = 10 ; μακρύ ένα [ NUMBER_OF_ELEMENTS ]; memset(a, 0, 10 * 4); // λάθος - το μήκος υποτίθεται ότι είναι 4 byte, χρησιμοποιείται μαγικός αριθμός στοιχείων memset(a , 0 , NUMBER_OF_ELEMENTS * 4 ); // λάθος - το μήκος θεωρείται ότι είναι 4 byte memset(a , 0 , NUMBER_OF_ELEMENTS * sizeof (μακρύ )); // δεν είναι εντελώς σωστό - αντιγραφή του ονόματος τύπου (αν αλλάξει ο τύπος, θα πρέπει να το αλλάξετε και εδώ) memset (a , 0 , NUMBER_OF_ELEMENTS * sizeof (a [ 0 ])); // σωστό, βέλτιστο για δυναμικούς πίνακες μη μηδενικού μεγέθους memset(a , 0 , sizeof(a )); // σωστό, βέλτιστο για στατικούς πίνακες

Νούμερα που δεν είναι μαγικά

Δεν χρειάζεται να μετατραπούν όλοι οι αριθμοί σε σταθερές. Για παράδειγμα, ο κωδικός για

Η σάρωση αναζητήσεων για αρχεία γνωστών τύπων (ή, όπως λέγεται συχνά, η αναζήτηση αρχείων με υπογραφές) είναι μία από τις πιο αποτελεσματικές που χρησιμοποιούνται στο βοηθητικό πρόγραμμα ανάκτησης δεδομένων R-Studio. Η χρήση μιας δεδομένης υπογραφής σάς επιτρέπει να επαναφέρετε αρχεία ενός συγκεκριμένου τύπου σε περίπτωση που λείπουν εν μέρει ή εντελώς (κατεστραμμένα) πληροφορίες σχετικά με τη δομή του καταλόγου και τα ονόματα αρχείων.

Συνήθως, ο πίνακας διαμερισμάτων δίσκου χρησιμοποιείται για τον προσδιορισμό της θέσης των αρχείων. Εάν συγκρίνουμε έναν δίσκο με ένα βιβλίο, τότε ο πίνακας διαμερισμάτων θα είναι παρόμοιος με τον πίνακα περιεχομένων του. Κατά τη σάρωση, το R-Studio αναζητά αρχεία γνωστών τύπων στον πίνακα διαμερισμάτων δίσκου σύμφωνα με ορισμένες προκαθορισμένες υπογραφές. Αυτό είναι δυνατό επειδή σχεδόν κάθε τύπος αρχείου έχει μια μοναδική υπογραφή ή μοτίβο δεδομένων. Οι υπογραφές αρχείων βρίσκονται σε μια συγκεκριμένη θέση στην αρχή του αρχείου και σε πολλές περιπτώσεις επίσης στο τέλος του αρχείου. Κατά τη σάρωση, το R-Studio αντιστοιχίζει τα δεδομένα που βρέθηκαν με τις υπογραφές αρχείων γνωστών τύπων, γεγονός που επιτρέπει την αναγνώρισή τους και την επαναφορά των δεδομένων τους.

Χρησιμοποιώντας την τεχνολογία σάρωσης αρχείων γνωστών τύπων, το R-Studio σάς επιτρέπει να ανακτήσετε δεδομένα από δίσκους που έχουν επαναδιαμορφωθεί, καθώς και των οποίων οι πίνακες διαμερισμάτων έχουν αντικατασταθεί. Επιπλέον, εάν ένα διαμέρισμα δίσκου αντικατασταθεί, καταστραφεί ή διαγραφεί, τότε η σάρωση γνωστών τύπων αρχείων είναι η μόνη δυνατή επιλογή.

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

Το R-Studio περιλαμβάνει ήδη υπογραφές για τους πιο συνηθισμένους τύπους αρχείων (προβολή πλήρης λίσταγνωστούς τύπους αρχείων, ανατρέξτε στην ηλεκτρονική βοήθεια του R-Studio.)

Εάν είναι απαραίτητο, ο χρήστης μπορεί να προσθέσει νέους τύπους αρχείων στο R-Studio. Για παράδειγμα, εάν πρέπει να βρείτε αρχεία μοναδικού τύπου ή αυτά που αναπτύχθηκαν μετά την ημερομηνία της τελευταίας κυκλοφορίας του R-Studio, μπορείτε να προσθέσετε τις δικές σας υπογραφές σε αρχεία γνωστών τύπων. Αυτή η διαδικασία θα συζητηθεί στη συνέχεια.

Αρχεία χρήστη γνωστών τύπων
Οι υπογραφές χρήστη για αρχεία γνωστών τύπων αποθηκεύονται σε αρχείο XML e καθορίζεται στο πλαίσιο διαλόγου Επιλογές. Η προσθήκη υπογραφής αποτελείται από δύο μέρη:

  1. Προσδιορισμός της υπογραφής του αρχείου που βρίσκεται στην αρχή του αρχείου και, εάν υπάρχει, στο τέλος του αρχείου.
  2. Δημιουργία ενός αρχείου XML που περιέχει την υπογραφή του αρχείου και άλλες πληροφορίες σχετικά με τον τύπο του αρχείου.

Όλα αυτά μπορούν να γίνουν με το R-Studio. Ταυτόχρονα, δεν χρειάζεται να είστε ειδικός στον τομέα της σύνταξης (επεξεργασίας) εγγράφων XML ή στον τομέα της δεκαεξαδικής επεξεργασίας - σε αυτό το εγχειρίδιο (άρθρο), που απευθύνεται στον χρήστη του επίπεδο εισόδου, όλα τα στάδια αυτής της διαδικασίας θα εξεταστούν λεπτομερώς.

Παράδειγμα: Προσθήκη υπογραφής για αρχείο MP4 (XDCam-EX Codec)
Εξετάστε το ενδεχόμενο να προσθέσετε μια υπογραφή αρχείου χρησιμοποιώντας το παράδειγμα ενός αρχείου .MP4 που δημιουργήθηκε με τη χρήση της Sony XDCAM-EX. Μπορεί να χρησιμοποιηθεί, για παράδειγμα, σε περίπτωση βλάβης της κάρτας SD για την οποία δεν έχετε καταφέρει ακόμα να αποθηκεύσετε στον σκληρό δίσκο του υπολογιστή.

Πρώτο βήμα: Προσδιορισμός της υπογραφής αρχείου
Για να προσδιορίσετε την υπογραφή του αρχείου, εξετάστε παραδείγματα αρχείων της ίδιας μορφής.

Ας είναι τέσσερα αρχεία βίντεο από τη Sony XDCAM-EX:
ZRV-3364_01.MP4
ZRV-3365_01.MP4
ZRV-3366_01.MP4
ZRV-3367_01.MP4

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

1. Ανοίξτε αρχεία στο R-Studio. Για να το κάνετε αυτό, κάντε δεξί κλικ σε κάθε αρχείο και επιλέξτε Προβολή/Επεξεργασία από το μενού περιβάλλοντος.

2. Συγκρίνετε αρχεία. Θα αναζητήσουμε το ίδιο μοτίβο που βρίσκεται και στα τέσσερα αρχεία. Θα είναι υπογραφή αρχείου. Κατά κανόνα, οι υπογραφές αρχείων βρίσκονται στην αρχή του αρχείου, αλλά μερικές φορές στο τέλος.

3. Καθορίστε την υπογραφή του αρχείου στην αρχή του αρχείου. Στο παράδειγμά μας, βρίσκεται στην αρχή του αρχείου. Σημειώστε ότι αυτό δεν συμβαίνει πάντα - συχνά η υπογραφή του αρχείου βρίσκεται στην αρχή του αρχείου, αλλά όχι στην πρώτη γραμμή (offset).

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


Κάντε κλικ στην εικόνα για μεγέθυνση


Κάντε κλικ στην εικόνα για μεγέθυνση


Κάντε κλικ στην εικόνα για μεγέθυνση


Κάντε κλικ στην εικόνα για μεγέθυνση

Η επιλεγμένη περιοχή στις εικόνες είναι μια υπογραφή αρχείου αυτού του τύπουαρχεία. Παρουσιάζεται τόσο σε κείμενο όσο και σε δεκαεξαδική μορφή.

Σε μορφή κειμένου, η υπογραφή του αρχείου έχει την ακόλουθη μορφή:
....ftypmp42....mp42.........δωρεάν

Οι τελείες (“) υποδηλώνουν χαρακτήρες που δεν μπορούν να αναπαρασταθούν ως κείμενο. Επομένως, είναι επίσης απαραίτητο να δοθεί η δεκαεξαδική μορφή της υπογραφής του αρχείου:
00 00 00 18 66 74 79 6D 70 34 32 00 00 00 00 6D 70 34 32 00 00 00 00 00 00 00 08 66 72 65 65

4. Με τον ίδιο τρόπο ορίζουμε την υπογραφή του αρχείου, αλλά στο τέλος του αρχείου. Μπορεί να είναι διαφορετική υπογραφή αρχείου, διαφορετικό μήκος.

Οι παρακάτω εικόνες επισημαίνουν την υπογραφή του αρχείου στο τέλος του αρχείου:


Κάντε κλικ στην εικόνα για μεγέθυνση


Κάντε κλικ στην εικόνα για μεγέθυνση


Κάντε κλικ στην εικόνα για μεγέθυνση


Κάντε κλικ στην εικόνα για μεγέθυνση

Σημειώστε ότι τα δεδομένα πριν από την επιλογή (υπογραφή αρχείου) είναι ίδια και στα τέσσερα αρχεία. Πρόκειται για τεχνικές πληροφορίες, οι οποίες δεν αποτελούν υπογραφή αρχείου, αλλά υποδεικνύουν ότι και οι τέσσερις εικόνες (αρχεία) τραβήχτηκαν χρησιμοποιώντας την ίδια κάμερα με τις ίδιες παραμέτρους. Είναι συνήθως δυνατό να διακρίνουμε τα μοτίβα που ταιριάζουν με τεχνικές πληροφορίες από την υπογραφή του αρχείου. Στο παράδειγμά μας, στην τελευταία γραμμή πριν από την αρχή της υπογραφής του αρχείου, βλέπουμε το κείμενο "RecordingMode type="normal"", το οποίο δείχνει ξεκάθαρα ότι πρόκειται για κάποιο είδος παραμέτρου αρχείου και όχι για υπογραφή. Να δίνετε πάντα μεγάλη προσοχή σε αυτή τη γραμμή, ώστε να μην συμπεριλάβετε κατά λάθος τεχνικές πληροφορίεςστην υπογραφή του αρχείου.

Στην περίπτωσή μας, η υπογραφή του αρχείου είναι το ακόλουθο κείμενο:
...
Θυμηθείτε ότι οι τελείες υποδηλώνουν χαρακτήρες που δεν μπορούν να αναπαρασταθούν σε μορφή κειμένου.

Στο δεκαεξαδικό, η υπογραφή του αρχείου είναι:
3N 2F 4E 6F 6E 52 65 61 6N 54 69 6A 65 4A 65 74 61 3E 0D 0A 00
Σημείωση: η υπογραφή δεν θα βρίσκεται πάντα στο τέλος του αρχείου.

Δεύτερο βήμα: Δημιουργήστε ένα αρχείο XML που περιγράφει τον Γνωστό Τύπο αρχείου
Τώρα, έχοντας ορίσει την υπογραφή του αρχείου, μπορείτε να δημιουργήσετε ένα αρχείο XML και να συμπεριλάβετε τον αντίστοιχο τύπο αρχείου στο R-Studio. Αυτό μπορεί να γίνει με δύο τρόπους:

2.1 Χρήση ενσωματωμένου επεξεργαστής γραφικώνυπογραφές αρχείου:
Επιλέξτε Ρυθμίσεις από το μενού Εργαλεία, στο παράθυρο διαλόγου Ρυθμίσεις που ανοίγει, κάντε κλικ στην καρτέλα Γνωστοί τύποι αρχείων και, στη συνέχεια, κάντε κλικ στο κουμπί Επεξεργασία τύπων αρχείων χρήστη.

Κάντε κλικ στην εικόνα για μεγέθυνση

Κάντε κλικ στο κουμπί Δημιουργία τύπου αρχείου στο παράθυρο διαλόγου Επεξεργασία τύπων αρχείων χρήστη.
Ορίστε τις ακόλουθες επιλογές:

  • Αναγνωριστικό - ένα μοναδικό ψηφιακό αναγνωριστικό. Δοσμένος αριθμόςθα επιλεγεί αυθαίρετα? Το μόνο πράγμα είναι ότι δεν πρέπει να ταιριάζει με το αριθμητικό αναγνωριστικό οποιουδήποτε άλλου τύπου αρχείου.
  • Περιγραφή ομάδας - η ομάδα στην οποία θα βρίσκονται τα αρχεία που βρέθηκαν στο R-Studio. Μπορείτε να ρυθμίσετε είτε νέα ομάδα, ή επιλέξτε ένα από αυτά που υπάρχουν ήδη. Για εμάς θα είναι μια ομάδα "Βίντεο πολυμέσων (Multimedia: Βίντεο)".
  • Περιγραφή- Σύντομη περιγραφήΤύπος αρχείου. Στο παράδειγμά μας, μπορείτε να χρησιμοποιήσετε, για παράδειγμα, "Sony cam video, XDCam-EX".
  • Επέκταση - επέκταση αρχείου αυτού του τύπου. Στην περίπτωσή μας - mp4.

Η παράμετρος Features είναι προαιρετική, στην περίπτωσή μας δεν χρειάζεται να τη χρησιμοποιήσουμε.

Κάντε κλικ στην εικόνα για μεγέθυνση

Στη συνέχεια, πρέπει να εισαγάγετε την αρχική και την τελική υπογραφή του αρχείου. Για να το κάνετε αυτό, επιλέξτε Έναρξη (Έναρξη) και μετά μέσα κατάλογος συμφραζόμενωντην εντολή Προσθήκη υπογραφής.

Κάντε κλικ στην εικόνα για μεγέθυνση

Στη συνέχεια κάντε διπλό κλικ στο πεδίο<пустая сигнатура> () και εισάγετε το κατάλληλο κείμενο.

Κάντε κλικ στην εικόνα για μεγέθυνση

Στη συνέχεια, δημιουργήστε την τελική υπογραφή αρχείου. Μην ξεχάσετε να εισαγάγετε 21 στο πεδίο στήλης Από.

Κάντε κλικ στην εικόνα για μεγέθυνση

Δημιουργήσατε με επιτυχία τη δική σας υπογραφή αρχείου γνωστού τύπου.

Τώρα πρέπει να το σώσουμε. Υπάρχουν δύο τρόποι: μπορείτε είτε να το αποθηκεύσετε στο προεπιλεγμένο αρχείο που καθορίζεται στην καρτέλα Main του πλαισίου διαλόγου Ρυθμίσεις κάνοντας κλικ στο κουμπί Αποθήκευση. Ή κάντε κλικ στο κουμπί Αποθήκευση ως... και αποθηκεύστε την υπογραφή σε κάποιο άλλο αρχείο.

2.2 Δημιουργία ενός αρχείου XML που περιγράφει έναν γνωστό τύπο αρχείου με μη αυτόματο τρόπο:
Για τη δημιουργία δεδομένο αρχείοΑς χρησιμοποιήσουμε την έκδοση XML 1.0 και την κωδικοποίηση UTF-8. Μην απελπίζεστε αν δεν ξέρετε τι είναι - απλώς ανοίξτε οποιοδήποτε επεξεργαστής κειμένου(για παράδειγμα, Notepad.exe) και στην πρώτη γραμμή πληκτρολογήστε το ακόλουθο κείμενο:

Στη συνέχεια, θα δημιουργήσουμε μια ετικέτα XML που καθορίζει τον τύπο αρχείου (FileType). Δεδομένων των χαρακτηριστικών που περιγράφηκαν προηγουμένως, η ετικέτα XML θα μοιάζει με αυτό:

Τοποθετήστε το αμέσως μετά

Στη συνέχεια, ορίζουμε την υπογραφή του αρχείου (ετικέτα ). Η αρχική υπογραφή (στην αρχή του αρχείου) θα βρίσκεται μέσα στην ετικέτα χωρίς καμία ιδιότητα. Χρησιμοποιούμε τη μορφή κειμένου της υπογραφής, αλλά ταυτόχρονα αντικαθιστούμε με δεκαεξαδικούς χαρακτήρες που δεν μπορούν να αναπαρασταθούν σε μορφή κειμένου. Πριν από κάθε δεκαεξαδικό χαρακτήρα, εισάγετε "\x" Έτσι, η ετικέτα με μια υπογραφή αρχείου θα μοιάζει με αυτό:

Εάν υπάρχει, πρέπει επίσης να ορίσετε την τελική υπογραφή (στο τέλος του αρχείου). Για αυτό, χρησιμοποιείται η ίδια ετικέτα, αλλά με το στοιχείο "from" και το χαρακτηριστικό "end". Θα μοιάζει με αυτό:

Θυμηθείτε ότι δεν υπήρχαν χαρακτήρες εκτός κειμένου στην τελική υπογραφή του αρχείου, αλλά υπήρχαν κάθετες και τρίγωνες αγκύλες. Για να αποφύγουμε σύγχυση και σφάλματα στη σύνταξη XML, θα αντικαταστήσουμε τους χαρακτήρες "/", "<" и ">" με τις δεκαεξαδικές τους τιμές.

Στο τέλος, μετά τις υπογραφές του αρχείου, πρέπει να υπάρχουν οι ετικέτες FileType και FileTypeList που κλείνουν:

Οπότε ολόκληρο το αρχείο θα πρέπει να μοιάζει με αυτό:


\x00\x00\x00\x18ftypmp42\x00\x00\x00\x00mp42\x00\x00\x00\x00\x00\x00\x00\x08 δωρεάν
\x3C\x2FNonRealTimeMeta\x3E\x0D\x0A\x00

Θυμηθείτε: η σύνταξη XML κάνει διάκριση πεζών-κεφαλαίων, επομένως η σωστή ετικέτα είναι , αλλά όχι .

Ας αποθηκεύσουμε το αρχείο σε μορφή κειμένου με την επέκταση .xml. Για παράδειγμα: SonyCam.xml.

Δημιουργήσαμε με επιτυχία τη δική μας υπογραφή αρχείου γνωστού τύπου. Αυτό το παράδειγμα είναι αρκετό για να κατανοήσουμε τις βασικές αρχές δημιουργίας ενός προσαρμοσμένου τύπου αρχείου. Οι πιο προχωρημένοι χρήστες μπορούν να χρησιμοποιήσουν την XML έκδοση 2.0. Μπορείτε να διαβάσετε περισσότερα σχετικά με αυτό στην ενότητα ηλεκτρονικής βοήθειας του R-Studio.

Στάδιο 3: Έλεγχος και προσθήκη αρχείου που περιγράφει έναν γνωστό τύπο αρχείου
Το επόμενο βήμα είναι να προσθέσετε (ανεβάσετε) το αρχείο XML στο R-Studio. Στη συνέχεια θα ελεγχθεί αυτόματα.

Ας φορτώσουμε το αρχείο XML που δημιουργήθηκε στο προηγούμενο στάδιο στο R-Studio. Για να το κάνετε αυτό, επιλέξτε το στοιχείο Ρυθμίσεις από το μενού Εργαλεία. Στην περιοχή Τύποι αρχείων χρήστη της καρτέλας Main του παραθύρου διαλόγου Ρυθμίσεις, προσθέστε το αρχείο XML που δημιουργήσαμε (SonyCam.xml). Κάντε κλικ στο κουμπί Εφαρμογή.

Κάντε κλικ στην εικόνα για μεγέθυνση

2. Απαντήστε Ναι (Ναι) στο αίτημα για αποστολή νέου τύπου αρχείου.

Κάντε κλικ στην εικόνα για μεγέθυνση

3. Για να επιβεβαιώσετε ότι ο τύπος αρχείου φορτώθηκε με επιτυχία, κάντε κλικ στην καρτέλα Γνωστοί τύποι αρχείων του πλαισίου διαλόγου Ρυθμίσεις. Θυμηθείτε ότι προσθέσαμε τον τύπο αρχείου στην ομάδα Βίντεο Πολυμέσων (Πολυμέσα: Βίντεο). Επεκτείνοντας αυτήν την ομάδα (φάκελο), θα πρέπει να δούμε ένα στοιχείο με την περιγραφή που καθορίσαμε κατά τη δημιουργία του αρχείου XML: Sony cam video, XDCam-EX (.mp4).

Κάντε κλικ στην εικόνα για μεγέθυνση


Κάντε κλικ στην εικόνα για μεγέθυνση

Εάν υπάρχουν σφάλματα στη σύνταξη του αρχείου, θα δείτε το αντίστοιχο μήνυμα:

Κάντε κλικ στην εικόνα για μεγέθυνση

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

Στάδιο 4: Δοκιμή του αρχείου Περιγραφή του Γνωστού Τύπου αρχείου
Για να ελέγξουμε αν ο προσαρμοσμένος τύπος αρχείου που δημιουργήσαμε είναι σωστός, ας προσπαθήσουμε να βρούμε τα αρχεία μας .mp4 σε μια αφαιρούμενη μονάδα flash USB.

1. Στα Windows Vista ή Windows 7, εκτελέστε μια πλήρη (όχι γρήγορη) μορφή του δίσκου ή χρησιμοποιήστε ένα βοηθητικό πρόγραμμα καθαρισμού χώρου δίσκου (για παράδειγμα, R-Wipe & Clean) για να πλήρης αφαίρεσηόλα τα δεδομένα στο δίσκο. Αφήνω Δίσκος USBμορφοποιημένο σε FAT32 (το μέγεθος των απαιτούμενων αρχείων δεν υπερβαίνει τα 2 GB).

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

3. Στο λειτουργικό σύστημα, η μονάδα δίσκου θα οριστεί, για παράδειγμα, ως η λογική μονάδα δίσκου F:\.

4. Εκτελέστε το R-Studio. Επιλέξτε τη μονάδα μας (F:\) και κάντε κλικ στο κουμπί Σάρωση

Κάντε κλικ στην εικόνα για μεγέθυνση

5. Στο πλαίσιο διαλόγου Σάρωση, στην περιοχή Σύστημα αρχείων, κάντε κλικ στο κουμπί Αλλαγή... και καταργήστε όλα τα πλαίσια ελέγχου. Με αυτόν τον τρόπο θα απενεργοποιήσουμε την αναζήτηση συστημάτων αρχείων και αρχείων χρησιμοποιώντας τον πίνακα κατατμήσεων.
Κάντε κλικ στην εικόνα για μεγέθυνση

6. Επιλέξτε το πλαίσιο Πρόσθετη αναζήτηση για γνωστούς τύπους αρχείων. Αυτό θα επιτρέψει στο R-Studio να σαρώσει για γνωστούς τύπους αρχείων.

7. Για να ξεκινήσετε τη σάρωση, κάντε κλικ στο κουμπί Σάρωση.

8. Περιμένετε όσο το R-Studio σαρώνει το δίσκο. Η καρτέλα Πληροφορίες σάρωσης θα εμφανίσει την πρόοδο της σάρωσης.


Κάντε κλικ στην εικόνα για μεγέθυνση

9. Αφού ολοκληρωθεί η σάρωση, επιλέξτε το στοιχείο Extra Found Files και κάντε διπλό κλικ σε αυτό.


Κάντε κλικ στην εικόνα για μεγέθυνση

10. Τα αρχεία δοκιμής μας θα βρίσκονται στο φάκελο βίντεο κάμερας Sony, στο φάκελο XDCam-EX (ή σε φάκελο με άλλο όνομα που ταιριάζει με την περιγραφή του τύπου αρχείου που καθορίζεται στο Δεύτερο Βήμα).


Κάντε κλικ στην εικόνα για μεγέθυνση

Μπορείτε να δείτε ότι τα ονόματα αρχείων, οι ημερομηνίες και οι τοποθεσίες (φάκελοι) δεν αποκαταστάθηκαν επειδή αυτή η πληροφορίααποθηκευμένο στο σύστημα αρχείων. Επομένως, το R-Studio θα εμφανίζει αυτόματα κάθε αρχείο με νέο όνομα.

Ωστόσο, φαίνεται ότι τα περιεχόμενα των αρχείων δεν είναι κατεστραμμένα. Για να το επαληθεύσουμε, ας τα ανοίξουμε στο κατάλληλο πρόγραμμα, για παράδειγμα, το πρόγραμμα αναπαραγωγής πολυμέσων VLC.


Κάντε κλικ στην εικόνα για μεγέθυνση

συμπέρασμα
Η ικανότητα του R-Studio να κάνει σάρωση για αρχεία γνωστών τύπων σάς επιτρέπει να ανακτάτε δεδομένα ακόμη και από έναν δίσκο του οποίου τα συστήματα αρχείων είτε είναι είτε αντικαθίστανται. Μπορείτε να αναζητήσετε αρκετά αποτελεσματικά αρχεία χρησιμοποιώντας τις υπογραφές τους, κάτι που είναι ιδιαίτερα χρήσιμο εάν γνωρίζετε ακριβώς τον τύπο των αρχείων που ανακτώνται, όπως, για παράδειγμα, στο παράδειγμά μας. Η δυνατότητα δημιουργίας προσαρμοσμένων τύπων αρχείων σάς επιτρέπει να προσθέσετε οποιοδήποτε αρχείο που έχει συγκεκριμένη υπογραφή αρχείου στη λίστα των γνωστών τύπων αρχείων.

Πολλοί μπορεί να έχουν ακούσει για αρχεία όπως το rarjpeg "και. Αυτό είναι ένα ειδικό είδος αρχείου, το οποίο είναι μια εικόνα jpeg και ένα αρχείο rar κολλημένα μεταξύ τους σφιχτά. Είναι ένα εξαιρετικό δοχείο για να κρύψετε το γεγονός της μεταφοράς πληροφοριών. Μπορείτε να δημιουργήσετε rarjpeg χρησιμοποιώντας τις παρακάτω εντολές:

UNIX: cat image1.jpg archive.rar > image2.jpg
ΠΑΡΑΘΥΡΑ: αντιγραφή /b image1.jpg+archive.rar image2.jpg

Ή αν έχετε ένα hex editor.

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

Οι μέθοδοι για την ανίχνευση κολλημένων αρχείων μπορούν να χωριστούν σε τρεις ομάδες:

  1. Μέθοδος ελέγχου της περιοχής μετά τον δείκτη ΕΟΦ. Πολλές δημοφιλείς μορφές αρχείων έχουν τον λεγόμενο δείκτη τέλους αρχείου, ο οποίος είναι υπεύθυνος για την εμφάνιση των επιθυμητών δεδομένων. Για παράδειγμα, οι θεατές φωτογραφιών διαβάζουν όλα τα byte μέχρι αυτόν τον δείκτη, ωστόσο, η περιοχή μετά από αυτήν παραμένει αγνοημένη. Αυτή η μέθοδος είναι ιδανική για μορφές: JPEG, PNG, GIF, ZIP, RAR, PDF.
  2. Μέθοδος ελέγχου μεγέθους αρχείου. Η δομή ορισμένων μορφών (κοντέινερ ήχου και βίντεο) σάς επιτρέπει να υπολογίσετε το πραγματικό μέγεθος αρχείου και να το συγκρίνετε με το αρχικό μέγεθος. Μορφές: AVI, WAV, MP4, MOV.
  3. Μέθοδος ελέγχου αρχείων CFB. Το CFB ή Compound File Binary Format είναι μια μορφή εγγράφου που αναπτύχθηκε από τη Microsoft, η οποία είναι ένα κοντέινερ με το δικό της σύστημα αρχείων. Αυτή η μέθοδος βασίζεται στον εντοπισμό ανωμαλιών σε ένα αρχείο.

Υπάρχει ζωή μετά το τέλος του αρχείου;

JPEG

Για να βρείτε την απάντηση σε αυτό το ερώτημα, είναι απαραίτητο να εμβαθύνετε στις προδιαγραφές της μορφής, που είναι ο «πρόγονος» των κολλημένων αρχείων και να κατανοήσετε τη δομή της. Οποιοδήποτε JPEG ξεκινά με την υπογραφή 0xFF 0xD8.

Μετά από αυτήν την υπογραφή, υπάρχουν πληροφορίες υπηρεσίας, προαιρετικά ένα εικονίδιο εικόνας και, τέλος, η ίδια η συμπιεσμένη εικόνα. Σε αυτή τη μορφή, το τέλος της εικόνας επισημαίνεται με υπογραφή δύο byte 0xFF 0xD9.

PNG

Τα πρώτα οκτώ byte ενός αρχείου PNG καταλαμβάνονται από την ακόλουθη υπογραφή: 0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A. Η υπογραφή τέλους που τερματίζει τη ροή δεδομένων: 0x49, 0x45, 0x4E, 0x44, 0xAE, 0x42, 0x60, 0x82.

RAR

Κοινή υπογραφή για όλα τα αρχεία rar: 0x52 0x61 0x72 0x21 (Rar!). Μετά έρχονται πληροφορίες σχετικά με την έκδοση του αρχείου και άλλα σχετικά δεδομένα. Εμπειρικά, διαπιστώθηκε ότι το αρχείο τελειώνει με την υπογραφή 0x0A, 0x25, 0x25, 0x45, 0x4F, 0x46.

Πίνακας μορφών και οι υπογραφές τους:
Ο αλγόριθμος για τον έλεγχο της κόλλησης σε αυτές τις μορφές είναι εξαιρετικά απλός:

  1. Βρείτε την αρχική υπογραφή.
  2. Βρείτε την τελική υπογραφή.
  3. Εάν δεν υπάρχουν δεδομένα μετά την τελική υπογραφή - το αρχείο σας είναι καθαρό και δεν περιέχει συνημμένα! Διαφορετικά, είναι απαραίτητο να αναζητήσετε άλλες μορφές μετά την τελική υπογραφή.

GIF και PDF

Ένα έγγραφο PDF μπορεί να έχει περισσότερους από έναν δείκτες EOF, για παράδειγμα λόγω λανθασμένης δημιουργίας εγγράφων. Ο αριθμός των τελικών υπογραφών σε ένα αρχείο GIF είναι ίσος με τον αριθμό των καρέ σε αυτό. Με βάση τα χαρακτηριστικά αυτών των μορφών, είναι δυνατό να βελτιωθεί ο αλγόριθμος για τον έλεγχο για συνημμένα αρχεία.
  1. Το στοιχείο 1 επαναλαμβάνεται από τον προηγούμενο αλγόριθμο.
  2. Το στοιχείο 2 επαναλαμβάνεται από τον προηγούμενο αλγόριθμο.
  3. Όταν βρίσκετε την τελική υπογραφή, θυμηθείτε τη θέση της και αναζητήστε περαιτέρω.
  4. Εάν ο τελευταίος δείκτης ΕΟΦ φτάσει με αυτόν τον τρόπο, το αρχείο είναι καθαρό.
  5. Εάν το αρχείο δεν τελειώνει με την υπογραφή τέλους, το goto είναι η θέση της τελευταίας υπογραφής που βρέθηκε.
Μια μεγάλη διαφορά μεταξύ του μεγέθους του αρχείου και της θέσης μετά την τελευταία τελική υπογραφή υποδηλώνει την παρουσία ενός κολλώδους συνημμένου. Η διαφορά μπορεί να είναι μεγαλύτερη από δέκα byte, αν και μπορούν να οριστούν άλλες τιμές.

φερμουάρ

Ένα χαρακτηριστικό των αρχείων ZIP είναι η παρουσία τριών διαφορετικών υπογραφών: Η δομή του αρχείου είναι η εξής:
Κεφαλίδα τοπικού αρχείου 1
Δεδομένα αρχείου 1
Περιγραφέας δεδομένων 1
Κεφαλίδα τοπικού αρχείου 2
Δεδομένα αρχείου 2
Περιγραφέας δεδομένων 2
...
Κεφαλίδα τοπικού αρχείου n
Δεδομένα αρχείου n
Περιγραφέας δεδομένων n
Κεφαλίδα αποκρυπτογράφησης αρχειοθέτησης
Αρχειοθέτηση επιπλέον εγγραφής δεδομένων
Κεντρικός κατάλογος
Το πιο ενδιαφέρον είναι ο κεντρικός κατάλογος, ο οποίος περιέχει μεταδεδομένα για τα αρχεία στο αρχείο. Ο κεντρικός κατάλογος ξεκινά πάντα με την υπογραφή 0x50 0x4b 0x01 0x02 και τελειώνει με την υπογραφή 0x50 0x4b 0x05 0x06, ακολουθούμενος από 18 byte μεταδεδομένων. Είναι ενδιαφέρον ότι τα άδεια αρχεία αποτελούνται μόνο από την τελική υπογραφή και 18 null byte. Μετά από 18 byte έρχεται η περιοχή σχολίων αρχειοθέτησης, η οποία είναι το τέλειο κοντέινερ για την απόκρυψη ενός αρχείου.

Για να ελέγξετε ένα αρχείο ZIP, πρέπει να βρείτε την τελική υπογραφή του κεντρικού καταλόγου, να παραλείψετε 18 byte και να αναζητήσετε υπογραφές γνωστών μορφών στην περιοχή σχολίων. Μεγάλο μέγεθοςΟ σχολιασμός μαρτυρεί και το γεγονός της κόλλησης.

Το μέγεθος μετράει

AVI

Η δομή ενός αρχείου AVI είναι η εξής: κάθε αρχείο ξεκινά με μια υπογραφή RIFF (0x52 0x49 0x46 0x46). Στο byte 8 υπάρχει μια υπογραφή AVI που καθορίζει τη μορφή (0x41 0x56 0x49 0x20). Το μπλοκ στο offset 4, που αποτελείται από 4 byte, περιέχει το αρχικό μέγεθος του μπλοκ δεδομένων (η σειρά των byte είναι μικρή endian). Για να μάθετε τον αριθμό του μπλοκ που περιέχει το επόμενο μέγεθος, πρέπει να προσθέσετε το μέγεθος της κεφαλίδας (8 byte) και το μέγεθος που λαμβάνεται στο μπλοκ των 4-8 byte. Αυτό υπολογίζει το συνολικό μέγεθος του αρχείου. Είναι πιθανό το υπολογισμένο μέγεθος να είναι μικρότερο από το πραγματικό μέγεθος αρχείου. Μετά το υπολογισμένο μέγεθος, το αρχείο θα περιέχει μόνο μηδέν byte (απαιτούνται για την ευθυγράμμιση του ορίου 1 Kb).

Παράδειγμα υπολογισμού μεγέθους:


WAV

Όπως το AVI, ένα αρχείο WAV ξεκινά με την υπογραφή RIFF, ωστόσο, αυτό το αρχείο έχει υπογραφή 8 byte - WAVE (0x57 0x41 0x56 0x45). Το μέγεθος του αρχείου υπολογίζεται με τον ίδιο τρόπο όπως το AVI. Το πραγματικό μέγεθος πρέπει να ταιριάζει ακριβώς με το υπολογισμένο μέγεθος.

MP4

Το MP4 ή MPEG-4 είναι μια μορφή κοντέινερ πολυμέσων που χρησιμοποιείται για την αποθήκευση ροών βίντεο και ήχου και παρέχει επίσης την αποθήκευση υποτίτλων και εικόνων.
Σε μετατόπιση 4 byte υπάρχουν υπογραφές: τύπος αρχείου ftyp (66 74 79 70) (Τύπος αρχείου κοντέινερ QuickTime) και υποτύπος αρχείου mmp4 (6D 6D 70 34). Για αναγνώριση κρυφά αρχεία, μας ενδιαφέρει η δυνατότητα υπολογισμού του μεγέθους του αρχείου.

Εξετάστε ένα παράδειγμα. Το μέγεθος του πρώτου μπλοκ είναι στη μετατόπιση μηδέν και είναι 28 (00 00 00 1C, Big Endian byte σειρά). Υποδεικνύει επίσης τη μετατόπιση όπου βρίσκεται το μέγεθος του δεύτερου μπλοκ δεδομένων. Στην 28η μετατόπιση, βρίσκουμε το επόμενο μέγεθος μπλοκ ίσο με 8 (00 00 00 08). Για να βρείτε το επόμενο μέγεθος μπλοκ, πρέπει να προσθέσετε τα μεγέθη των προηγούμενων μπλοκ που βρέθηκαν. Έτσι, το μέγεθος του αρχείου υπολογίζεται:

MOV

Αυτή η ευρέως χρησιμοποιούμενη μορφή είναι επίσης ένα κοντέινερ MPEG-4. Το MOV χρησιμοποιεί έναν αποκλειστικό αλγόριθμο συμπίεσης δεδομένων, έχει δομή παρόμοια με το MP4 και χρησιμοποιείται για τον ίδιο σκοπό - για την αποθήκευση δεδομένων ήχου και βίντεο, καθώς και σχετικού υλικού.
Όπως το MP4, κάθε αρχείο mov έχει υπογραφή ftyp 4 byte στο offset 4, ωστόσο, η επόμενη υπογραφή έχει την τιμή qt__ (71 74 20 20). Ο κανόνας για τον υπολογισμό του μεγέθους του αρχείου δεν έχει αλλάξει: ξεκινώντας από την αρχή του αρχείου, υπολογίζουμε το μέγεθος του επόμενου μπλοκ και το προσθέτουμε.

Η μέθοδος ελέγχου αυτής της ομάδας μορφών για την παρουσία "συνημμένων" αρχείων είναι ο υπολογισμός του μεγέθους σύμφωνα με τους παραπάνω κανόνες και η σύγκριση με το μέγεθος του αρχείου που ελέγχεται. Εάν το τρέχον μέγεθος αρχείου είναι πολύ μικρότερο από το υπολογιζόμενο, τότε αυτό δείχνει το γεγονός της συγχώνευσης. Κατά τον έλεγχο αρχείων AVI, επιτρέπεται το υπολογισμένο μέγεθος να είναι μικρότερο από το μέγεθος του αρχείου λόγω της παρουσίας πρόσθετων μηδενικών για τη στοίχιση των περιγραμμάτων. Σε μια τέτοια περίπτωση, είναι απαραίτητο να ελέγξετε για μηδενικά μετά το υπολογισμένο μέγεθος αρχείου.

Ελέγξτε τη δυαδική μορφή σύνθετου αρχείου

Αυτή η μορφή αρχείου που αναπτύχθηκε από τη Microsoft είναι επίσης γνωστή ως OLE (Σύνδεση και ενσωμάτωση αντικειμένου) ή COM (Μοντέλο αντικειμένου στοιχείου). Τα αρχεία DOC, XLS, PPT ανήκουν στην ομάδα των μορφών CFB.

Το αρχείο CFB αποτελείται από μια κεφαλίδα 512 byte και τομείς του ίδιου μήκους που αποθηκεύουν ροές δεδομένων ή πληροφορίες υπηρεσίας. Κάθε τομέας έχει τον δικό του μη αρνητικό αριθμό, με εξαίρεση τους ειδικούς αριθμούς: "-1" - αριθμεί τον ελεύθερο τομέα, "-2" - αριθμεί τον τομέα που κλείνει την αλυσίδα. Όλες οι αλυσίδες τομέων ορίζονται στον πίνακα FAT.

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

Μη φυσιολογικό μέγεθος αρχείου

Όπως αναφέρθηκε παραπάνω, κάθε αρχείο CFB αποτελείται από μια κεφαλίδα και τομείς ίσου μήκους. Για να μάθετε το μέγεθος του τομέα, πρέπει να διαβάσετε τον αριθμό των δύο byte στην 30ή μετατόπιση από την αρχή του αρχείου και να αυξήσετε το 2 στην ισχύ αυτού του αριθμού. Αυτός ο αριθμός πρέπει να είναι ίσος με 9 (0x0009) ή 12 (0x000C), αντίστοιχα, το μέγεθος του τομέα αρχείου είναι 512 ή 4096 byte. Αφού βρείτε τον τομέα, πρέπει να ελέγξετε την ακόλουθη ισότητα:

(FileSize - 512) mod SectorSize = 0

Εάν αυτή η ισότητα δεν ικανοποιείται, τότε μπορείτε να υποδείξετε το γεγονός της συγχώνευσης αρχείων. Ωστόσο, αυτή η μέθοδος έχει ένα σημαντικό μειονέκτημα. Εάν ο εισβολέας γνωρίζει το μέγεθος του τομέα, τότε αρκεί να κολλήσει το αρχείο του και n περισσότερα byte έτσι ώστε το μέγεθος των κολλημένων δεδομένων να είναι πολλαπλάσιο του μεγέθους του τομέα.

Άγνωστος τύπος τομέα

Εάν ο εισβολέας γνωρίζει μια μέθοδο παράκαμψης του προηγούμενου ελέγχου, τότε αυτή τη μέθοδομπορεί να ανιχνεύσει την παρουσία τομέων με απροσδιόριστους τύπους.

Ας ορίσουμε την ισότητα:

FileSize = 512 + CountReal * SectorSize, όπου FileSize είναι το μέγεθος αρχείου, SectorSize είναι το μέγεθος τομέα, CountReal είναι ο αριθμός των τομέων.

Ορίζουμε επίσης τις ακόλουθες μεταβλητές:

  1. CountFat - ο αριθμός των τομέων FAT. Βρίσκεται στο offset 44 από την αρχή του αρχείου (4 byte).
  2. CountMiniFAT - ο αριθμός των τομέων MiniFAT. Βρίσκεται στο offset 64 από την αρχή του αρχείου (4 byte).
  3. CountDIFAT - αριθμός τομέων DIFAT. Βρίσκεται στο offset 72 από την αρχή του αρχείου (4 byte).
  4. Το CountDE είναι ο αριθμός των τομέων καταχώρισης καταλόγου. Για να βρείτε αυτή τη μεταβλητή, πρέπει να βρείτε τον πρώτο τομέα DE, ο οποίος βρίσκεται στην 48η μετατόπιση. Στη συνέχεια, πρέπει να λάβετε την πλήρη αναπαράσταση του DE από το FAT και να μετρήσετε τον αριθμό των τομέων DE.
  5. CountStreams - αριθμός τομέων με ροές δεδομένων.
  6. CountFree - ο αριθμός των ελεύθερων τομέων.
  7. CountClassified - ο αριθμός των τομέων με συγκεκριμένο τύπο.
CountClassified = CountFAT + CountMiniFAT + CountDIFAT + CountDE + CountStreams + CountFree

Είναι προφανές ότι εάν το CountClassified και το CountReal δεν είναι ίσα, μπορούμε να συμπεράνουμε ότι τα αρχεία ενδέχεται να συγχωνευθούν.

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

Λόγος του συγγραφέα

ανάλυση υπογραφής

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

Υπάρχουν διάφορες μέθοδοι εδώ. Εναλλακτικά, χρησιμοποιήστε μια υπογραφή που αποτελείται από N byte ενός κακόβουλου αντικειμένου. Σε αυτή την περίπτωση, είναι δυνατόν να μην γίνει μια ανόητη σύγκριση, αλλά μια σύγκριση με κάποια μάσκα (όπως η αναζήτηση bytes EB ?? ?? CD 13). Ή ορίστε πρόσθετες συνθήκες όπως "τέτοια byte πρέπει να βρίσκονται στο σημείο εισόδου στο πρόγραμμα" και ούτω καθεξής. Η υπογραφή του Μάλβαρη είναι μια ιδιαιτερότητα.

Με τον ίδιο τρόπο, περιγράφονται ορισμένα σημάδια με τα οποία είναι δυνατό να προσδιοριστεί ότι το εκτελέσιμο αρχείο είναι γεμάτο με έναν ή τον άλλο κρυπτογράφο ή συσκευαστή (για παράδειγμα, το κοινότυπο ASPack). Εάν διαβάσετε προσεκτικά το περιοδικό μας, τότε σίγουρα ακούσατε για ένα εργαλείο όπως το PEiD, το οποίο μπορεί να προσδιορίσει τους πιο συχνά χρησιμοποιούμενους συσκευαστές, κρυπτογράφους και μεταγλωττιστές (υπάρχει μεγάλος αριθμός υπογραφών στη βάση δεδομένων) για το αρχείο PE που μεταφέρεται στο το. Δυστυχώς, οι νέες εκδόσεις του προγράμματος δεν έχουν κυκλοφορήσει εδώ και πολύ καιρό και πρόσφατα εμφανίστηκε ένα μήνυμα στον επίσημο ιστότοπο ότι το έργο δεν θα αναπτυχθεί περαιτέρω. Είναι κρίμα, γιατί οι δυνατότητες του PEiD (ειδικά δεδομένου του συστήματος πρόσθετων) θα μπορούσαν κάλλιστα να είναι χρήσιμες για μένα. Μετά από μια σύντομη ανάλυση, κατέστη σαφές ότι αυτό δεν ήταν μια επιλογή. Αλλά αφού έψαξα σε αγγλόφωνα blogs, βρήκα γρήγορα αυτό που μου ταίριαζε. Έργο YARA (code.google.com/p/yara-project).

Τι είναι το YARA;

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

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

Εάν πληρούνται οι προϋποθέσεις ενός από τους κανόνες για το αρχείο υπό διερεύνηση, προσδιορίζεται αναλόγως (για παράδειγμα, ένα σκουλήκι τέτοιο και αυτό). Ένα απλό παράδειγμα κανόνα για να καταλάβετε τι διακυβεύεται:

κανόνας silent_banker: τραπεζίτης
{
meta:
περιγραφή = "Αυτό είναι απλώς ένα παράδειγμα"
νήμα_επίπεδο = 3
in_the_wild = αληθινό
χορδές:
$a = (6A 40 68 00 30 00 00 6A 14 8D 91)
$b = (8D 4D B0 2B C1 83 C0 27 99 6A 4E 59 F7 F9)
$c = "UVODFRYSIHLNWPEJXQZAKCBGMT"
κατάσταση:
$a ή $b ή $c
}

Σε αυτόν τον κανόνα, λέμε στο YARA ότι οποιοδήποτε αρχείο περιέχει τουλάχιστον ένα από τα δείγματα συμβολοσειρών που περιγράφονται στις μεταβλητές $a, $b, $c θα πρέπει να ταξινομηθεί ως trojan silent_banker. Και αυτός είναι ένας πολύ απλός κανόνας. Στην πραγματικότητα, οι τροχοί μπορεί να είναι πολύ πιο περίπλοκοι (θα μιλήσουμε για αυτό παρακάτω).
Ακόμη και η λίστα των έργων που το χρησιμοποιούν ήδη μιλά για την εξουσία του έργου YARA και αυτό:

  • VirusTotal Malware Intelligence Services (vt-mis.com);
  • jsunpack-n (jsunpack.jeek.org);
  • Παρακολουθούμε τον ιστότοπό σας (wewatchyourwebsite.com).

Όλος ο κώδικας είναι γραμμένος σε Python και στον χρήστη προσφέρεται τόσο η ίδια η ενότητα για χρήση στις εξελίξεις τους, όσο και απλώς ένα εκτελέσιμο αρχείο για να χρησιμοποιήσει το YARA ως αυτόνομη εφαρμογή. Ως μέρος της δουλειάς μου, επέλεξα την πρώτη επιλογή, αλλά για λόγους απλότητας, στο άρθρο θα χρησιμοποιήσουμε τον αναλυτή απλώς ως εφαρμογή κονσόλας.

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

Εγκατάσταση

Όπως είπα, το έργο είναι γραμμένο σε Python, επομένως μπορεί να εγκατασταθεί εύκολα σε Linux, Windows και Mac. Στην αρχή, μπορείτε απλώς να πάρετε το δυαδικό. Εάν καλέσουμε την εφαρμογή στην κονσόλα, θα εκτελεστούν οι κανόνες.

$yara
χρήση: yara ... ... ΑΡΧΕΙΟ | PID

Δηλαδή, η μορφή κλήσης του προγράμματος είναι η εξής: πρώτα έρχεται το όνομα του προγράμματος, μετά η λίστα επιλογών, μετά την οποία υποδεικνύεται το αρχείο με τους κανόνες και στο τέλος - το όνομα του αρχείου υπό διερεύνηση (ή τον κατάλογο που περιέχει τα αρχεία) ή το αναγνωριστικό διεργασίας. Τώρα θα ήταν ωραίο να εξηγήσω πώς συντάσσονται αυτοί οι ίδιοι κανόνες, αλλά δεν θέλω να σας φορτώσω αμέσως με μια ξερή θεωρία. Ως εκ τούτου, θα ενεργήσουμε διαφορετικά και θα δανειστούμε τις υπογραφές άλλων ανθρώπων, ώστε η YARA να μπορεί να εκτελέσει μία από τις εργασίες που έχουμε θέσει - πλήρη ανίχνευση ιών με υπογραφές.

Το antivirus σας

Το πιο σημαντικό ερώτημα: πού να βρείτε τη βάση δεδομένων υπογραφής γνωστών ιών; Οι εταιρείες προστασίας από ιούς μοιράζονται ενεργά τέτοιες βάσεις δεδομένων μεταξύ τους (άλλες πιο γενναιόδωρα, άλλες λιγότερο). Για να είμαι ειλικρινής, στην αρχή αμφέβαλα ακόμη και ότι κάπου στο Διαδίκτυο κάποιος ανέβαζε ανοιχτά τέτοια πράγματα. Αλλά, όπως αποδείχθηκε, υπάρχουν καλοί άνθρωποι. Μια κατάλληλη βάση από το δημοφιλές antivirus ClamAV είναι διαθέσιμη σε όλους (clamav.net/lang/en). Στην ενότητα "Τελευταία σταθερή κυκλοφορία", μπορείτε να βρείτε έναν σύνδεσμο προς τελευταία έκδοσηπροϊόν προστασίας από ιούς, καθώς και συνδέσμους για τη λήψη βάσεων δεδομένων ιών ClamAV. Θα μας ενδιαφέρουν πρωτίστως τα αρχεία main.cvd (db.local.clamav.net/main.cvd) και daily.cvd (db.local.clamav.net/daily.cvd).

Το πρώτο περιέχει την κύρια βάση δεδομένων των υπογραφών, το δεύτερο - το πιο πλήρες αυτή τη στιγμήβάση με διάφορες προσθήκες. Για τον σκοπό αυτό αρκεί το daily.cvd, το οποίο περιέχει περισσότερες από 100.000 εκπομπές κακόβουλου λογισμικού. Ωστόσο, η βάση ClamAV δεν είναι βάση YARA, επομένως πρέπει να τη μετατρέψουμε στη σωστή μορφή. Αλλά πως? Εξάλλου, ακόμα δεν γνωρίζουμε τίποτα ούτε για τη μορφή ClamAV ούτε για τη μορφή Yara. Αυτό το πρόβλημα έχει ήδη επιλυθεί ενώπιόν μας προετοιμάζοντας ένα μικρό σενάριο που μετατρέπει τη βάση δεδομένων υπογραφών του ιού ClamAV σε ένα σύνολο κανόνων YARA. Το σενάριο ονομάζεται clamav_to_yara.py και είναι γραμμένο από τον Matthew Richard (bit.ly/ij5HVs). Κατεβάστε το σενάριο και μετατρέψτε τις βάσεις δεδομένων:

$ python clamav_to_yara.py -f daily.cvd -o clamav.yara

Ως αποτέλεσμα, θα λάβουμε μια βάση υπογραφής στο αρχείο clamav.yara, η οποία θα είναι αμέσως έτοιμη για χρήση. Τώρα ας δοκιμάσουμε τον συνδυασμό YARA και βάσης ClamAV σε δράση. Η σάρωση ενός φακέλου με χρήση υπογραφής πραγματοποιείται με μία μόνο εντολή:

$ yara -r clamav.yara /pentest/msf3/data

Η επιλογή -r καθορίζει ότι η σάρωση πρέπει να εκτελείται αναδρομικά σε όλους τους υποφακέλους του τρέχοντος φακέλου. Εάν υπήρχαν σώματα ιών στο φάκελο /pentest/msf3/data (τουλάχιστον αυτά στη βάση δεδομένων ClamAV), τότε η YARA θα το αναφέρει αμέσως. Κατ 'αρχήν, αυτός είναι ένας έτοιμος σαρωτής υπογραφών. Για περισσότερη ευκολία, έγραψα ένα απλό σενάριο που έλεγχε για ενημερώσεις της βάσης δεδομένων ClamAV, ανέβασα νέες υπογραφές και τις μετέτρεψα σε μορφή YARA. Αυτά όμως είναι λεπτομέρειες. Ένα μέρος της εργασίας ολοκληρώθηκε, τώρα μπορούμε να αρχίσουμε να γράφουμε κανόνες για τον ορισμό των συσκευαστών/κρυπτογράφησης. Αλλά για αυτό ήταν απαραίτητο να ασχοληθούμε λίγο μαζί τους.

Το παιχνίδι σύμφωνα με τους κανόνες

Έτσι, ο κανόνας είναι ο κύριος μηχανισμός του προγράμματος που σας επιτρέπει να αντιστοιχίσετε ένα δεδομένο αρχείο σε οποιαδήποτε κατηγορία. Οι κανόνες περιγράφονται σε ξεχωριστό αρχείο (ή αρχεία) και μοιάζουν πολύ στην εμφάνιση με την κατασκευή struct() από τη γλώσσα C/C++.

κυβερνήστε το Bad Boy
{
χορδές:
$a = "win.exe"
$b = "http://foo.com/badfile1.exe"
$c = "http://bar.com/badfile2.exe"
κατάσταση:
$a και ($b ή $c)
}

Κατ 'αρχήν, δεν υπάρχει τίποτα περίπλοκο στη σύνταξη κανόνων. Στο πλαίσιο αυτού του άρθρου, έθιξα μόνο τα κύρια σημεία και θα βρείτε τις λεπτομέρειες στο εγχειρίδιο. Προς το παρόν, τα δέκα πιο σημαντικά σημεία είναι:

1. Κάθε κανόνας ξεκινά με τη λέξη-κλειδί κανόνα ακολουθούμενη από το αναγνωριστικό κανόνα. Τα αναγνωριστικά μπορούν να έχουν τα ίδια ονόματα με τις μεταβλητές στο C/C++, δηλαδή να αποτελούνται από γράμματα και ψηφία και ο πρώτος χαρακτήρας δεν μπορεί να είναι ψηφίο. Μέγιστο μήκοςόνομα αναγνωριστικού - 128 χαρακτήρες.

2. Συνήθως, οι κανόνες αποτελούνται από δύο ενότητες: μια ενότητα ορισμών (συμβολοσειρές) και μια ενότητα συνθηκών. Η ενότητα συμβολοσειρών περιέχει δεδομένα, βάσει των οποίων θα ληφθεί απόφαση στην ενότητα συνθηκών εάν το καθορισμένο αρχείο πληροί ορισμένες προϋποθέσεις.

3. Κάθε γραμμή στην ενότητα strings έχει το δικό της αναγνωριστικό, το οποίο ξεκινά με ένα σύμβολο $ - γενικά, όπως μια δήλωση μεταβλητής σε php. Το YARA υποστηρίζει κανονικές χορδές που περικλείονται μέσα διπλά εισαγωγικά(" ") και δεκαεξαδικές συμβολοσειρές που περικλείονται σιδερακια ΔΟΝΤΙΩΝ(()), καθώς και κανονικές εκφράσεις:

$my_text_string = "κείμενο εδώ"
$my_hex_string = ( E2 34 A1 C8 23 FB )

4. Η ενότητα συνθήκη περιέχει όλη τη λογική του κανόνα. Αυτή η ενότητα πρέπει να περιέχει μια δυαδική έκφραση που καθορίζει πότε το αρχείο ή η διεργασία ταιριάζει με τον κανόνα. Συνήθως, αυτή η ενότητα αναφέρεται σε συμβολοσειρές που έχουν δηλωθεί προηγουμένως. Και το αναγνωριστικό της σειράς αντιμετωπίζεται ως μεταβλητή boolean που επιστρέφει true αν η σειρά βρέθηκε στη μνήμη αρχείου ή διεργασίας, και false διαφορετικά. Ο παραπάνω κανόνας καθορίζει ότι τα αρχεία και οι διεργασίες που περιέχουν τη συμβολοσειρά win.exe και μία από τις δύο διευθύνσεις URL πρέπει να κατηγοριοποιούνται ως BadBoy (με το όνομα του κανόνα).

5. Οι δεκαεξαδικές συμβολοσειρές επιτρέπουν τρεις κατασκευές που τις καθιστούν πιο ευέλικτες: χαρακτήρες μπαλαντέρ, άλματα και εναλλακτικές. Οι αντικαταστάσεις είναι θέσεις σε μια συμβολοσειρά που είναι άγνωστες και μπορεί να έχουν οποιαδήποτε τιμή. Συμβολίζονται με το σύμβολο "?":

$hex_string = ( E2 34 ?? C8 A? FB )

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

$hex_string = ( F4 23 62 B4 )

Αυτή η καταχώρηση σημαίνει ότι στη μέση της γραμμής μπορεί να υπάρχουν από 4 έως 6 διαφορετικά byte. Μπορείτε επίσης να εφαρμόσετε μια εναλλακτική επιλογή:

$hex_string = ( F4 23 (62 B4 | 56) 45 )

Αυτό σημαίνει ότι στη θέση του τρίτου byte μπορεί να υπάρχουν 62 B4 ή 56, μια τέτοια καταχώρηση αντιστοιχεί στις γραμμές F42362B445 ή F4235645.

6. Για να ελέγξετε ότι μια δεδομένη συμβολοσειρά βρίσκεται σε μια συγκεκριμένη μετατόπιση σε ένα χώρο διευθύνσεων αρχείου ή διεργασίας, χρησιμοποιήστε τη δήλωση at:

$a στα 100 και $b στα 200

Εάν η συμβολοσειρά μπορεί να βρίσκεται μέσα σε ένα συγκεκριμένο εύρος διευθύνσεων, χρησιμοποιείται ο τελεστής in:

$a σε (0..100) και $b σε (100..fi lesize)

Μερικές φορές υπάρχουν περιπτώσεις όπου είναι απαραίτητο να υποδειχθεί ότι το αρχείο πρέπει να περιέχει έναν συγκεκριμένο αριθμό από ένα δεδομένο σύνολο. Αυτό γίνεται χρησιμοποιώντας τον τελεστή:

κανόνας του παραδείγματος 1
{
χορδές:
$foo1 = "εικονικό1"
$foo2 = "dummy2"
$foo3 = "dummy3"
κατάσταση:
2 από ($foo1,$foo2,$foo3)
}

Ο παραπάνω κανόνας απαιτεί το αρχείο να περιέχει δύο οποιεσδήποτε γραμμές από το σύνολο ($foo1,$foo2,$foo3). Αντί να καθορίσετε έναν συγκεκριμένο αριθμό γραμμών σε ένα αρχείο, μπορείτε να χρησιμοποιήσετε τις μεταβλητές any (τουλάχιστον μία γραμμή από ένα δεδομένο σύνολο) και όλες (όλες τις γραμμές από ένα δεδομένο σύνολο).

7. Λοιπόν, η τελευταία ενδιαφέρουσα δυνατότητα που πρέπει να εξετάσετε είναι η εφαρμογή μιας συνθήκης σε πολλές σειρές. Αυτό το χαρακτηριστικό είναι πολύ παρόμοιο με το του τελεστή, μόνο πιο ισχυρό είναι το for..of operator:

για έκφραση του συνόλου συμβολοσειρών: (boolean_expression)

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

Κάνοντας PEiD

Έτσι, όταν όλα έγιναν λίγο-πολύ ξεκάθαρα με τους κανόνες, μπορούμε να αρχίσουμε να εφαρμόζουμε τον ανιχνευτή συσκευαστών και κρυπτογράφων στο έργο μας. Ως πρώτη ύλη, αρχικά δανείστηκα τις υπογραφές γνωστών συσκευαστών από το ίδιο PEiD. Ο φάκελος plugins περιέχει το αρχείο userdb.txt, το οποίο περιέχει ό,τι χρειαζόμαστε. Υπήρχαν 1850 υπογραφές στη βάση δεδομένων μου.

Πολλά, οπότε για να τα εισαγάγετε πλήρως, σας συμβουλεύω να γράψετε κάποιο είδος σεναρίου. Η μορφή αυτής της βάσης είναι απλή - η συνηθισμένη αρχείο κειμένου, το οποίο αποθηκεύει εγγραφές της φόρμας:


υπογραφή = 50 E8 ?? ?? ?? ?? 58 25 ?? F0 FF FF 8B C8 83 C1 60 51 83 C0 40 83 EA 06 52 FF 20 9D C3
ep_only=αληθής

Η πρώτη γραμμή καθορίζει το όνομα του πακέτου που θα εμφανίζεται στο PEiD, αλλά για εμάς θα είναι το αναγνωριστικό κανόνα. Το δεύτερο είναι η ίδια η υπογραφή. Η τρίτη είναι η σημαία ep_only, η οποία καθορίζει εάν θα αναζητηθεί η δεδομένη γραμμή μόνο στη διεύθυνση του σημείου εισόδου ή σε ολόκληρο το αρχείο.

Λοιπόν, ας προσπαθήσουμε να δημιουργήσουμε έναν κανόνα, ας πούμε, για το ASPack; Όπως αποδείχθηκε, δεν υπάρχει τίποτα περίπλοκο σε αυτό. Αρχικά, ας δημιουργήσουμε ένα αρχείο για να αποθηκεύσουμε τους κανόνες και να το ονομάσουμε, για παράδειγμα, packers.yara. Στη συνέχεια αναζητούμε στη βάση δεδομένων PEiD όλες τις υπογραφές με ASPack στα ονόματά τους και τις μεταφέρουμε στον κανόνα:

κανόνας ASPack
{
χορδές:
$ = ( 60 E8 ?? ?? ?? ?? 5D 81 ED ?? ?? (43 | 44) ?? B8 ?? ?? (43 | 44) ?? 03 C5 )
$ = ( 60 EB ?? 5D EB ?? FF ?? ?? ?? ?? ?? E9 )
[.. Τομή..]
$ = ( 60 E8 03 00 00 00 E9 EB 04 5D 45 55 C3 E8 01 )
κατάσταση:
για οποιοδήποτε από αυτά: ($στο σημείο εισόδου)
}

Όλες οι καταχωρήσεις που βρέθηκαν έχουν τη σημαία ep_only σε true, δηλαδή αυτές οι γραμμές πρέπει να βρίσκονται στη διεύθυνση του σημείου εισόδου. Έτσι γράφουμε την ακόλουθη συνθήκη: "για οποιοδήποτε από αυτά: ($ στο σημείο εισόδου)".

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

Για να ελέγξετε τη λειτουργικότητα του λαμβανόμενου συστήματος, αρκεί να εκτελέσετε την εντολή στην κονσόλα:

$ yara -r packers.yara somefi le.exe

Αφού τροφοδότησα μερικές εφαρμογές γεμάτες με ASPack εκεί, βεβαιώθηκα ότι όλα λειτουργούν!

Τελειωμένο πρωτότυπο

Το YARA αποδείχθηκε ότι ήταν ένα εξαιρετικά σαφές και διαφανές εργαλείο. Δεν ήταν δύσκολο για μένα να γράψω ένα webadmin για αυτό και να το ρυθμίσω ως υπηρεσία web. Με λίγη δημιουργικότητα, τα στεγνά αποτελέσματα του αναλυτή είναι ήδη χρωματισμένα με διαφορετικά χρώματα, υποδεικνύοντας τον βαθμό επικινδυνότητας του εντοπισμένου κακόβουλου λογισμικού. Μια μικρή ενημέρωση της βάσης δεδομένων και για πολλούς από τους κρυπτογράφους είναι διαθέσιμη μια σύντομη περιγραφή, και μερικές φορές ακόμη και οδηγίες για την αποσυσκευασία. Το πρωτότυπο έχει δημιουργηθεί και λειτουργεί άψογα, και οι αρχές χορεύουν από χαρά!

Ο κωδικός λειτουργίας (FC) στην κεφαλίδα του τηλεγραφήματος προσδιορίζει τον τύπο του τηλεγραφήματος, όπως Αίτημα τηλεγράφημα (Αίτηση ή Αποστολή/Αίτηση) και Τηλεγράφημα Επιβεβαίωσης ή Απάντησης (Πλαίσιο επιβεβαίωσης, πλαίσιο απόκρισης). Επιπλέον, ο κωδικός λειτουργίας περιέχει την πραγματική λειτουργία μετάδοσης και πληροφορίες ελέγχου που αποτρέπουν την απώλεια και την αντιγραφή μηνυμάτων ή τον τύπο σταθμού με κατάσταση FDL .

7 6 5 4 3 2 1 0 FC: Αίτημα κωδικού συνάρτησης
1 Ζητήστε Telegramm
Χ FCV = Εναλλασσόμενο bit ενεργοποιημένο
Χ href="http://profibus.felser.ch/en/funktionscode.htm#aufruffolgebit">FCB = Εναλλασσόμενο bit (από τον αριθμό καρέ)
1 0 (0x0) CV = ClockValue()
1 άλλα Κατοχυρωμένα
0 0 (0x0) TE = Συμβάν ώρας (συγχρονισμός ρολογιού)
0 3 (0x3) SDA_LOW = Αποστολή δεδομένων με αναγνώριση - χαμηλή προτεραιότητα
0 4 (0x4) SDN_LOW = Αποστολή δεδομένων Δεν αναγνωρίζεται - χαμηλή προτεραιότητα
0 5 (0x5) SDA_HIGH = Αποστολή δεδομένων με αναγνώριση - υψηλή προτεραιότητα
0 6 (0x6) SDN_HIGH = Αποστολή δεδομένων Δεν αναγνωρίζεται
0 7 (0x7) MSRD = Αποστολή δεδομένων αιτήματος με απάντηση πολλαπλής εκπομπής
0 9 (0x9) Ζητήστε την κατάσταση FDL
0 12 (0xC) SRD low = Αποστολή και αίτηση δεδομένων
0 13 (0xD) SRD high = Αποστολή και αίτηση δεδομένων
0 14 (0xE) Αίτημα Αναγνώρισης με απάντηση
0 15 (0xF) Αίτημα κατάστασης LSAP με απάντηση 1)
0 άλλα Κατοχυρωμένα

1) αυτή η τιμή βρίσκεται στην τελευταία έκδοση του προτύπου που δεν ορίζεται πλέον αλλά έχει δεσμευτεί μόνο

7 6 5 4 3 2 1 0 FC: Απόκριση κώδικα συνάρτησης
0 τηλεγράφημα απάντησης
0 Κατοχυρωμένα
0 0 δούλος
0 1 Ο Δάσκαλος δεν είναι έτοιμος
1 0 Ο κύριος έτοιμος, χωρίς διακριτικό
1 1 Έτοιμο το Master, σε συμβολικό δαχτυλίδι
0 (0x0) Εντάξει
1 (0x1) UE = Σφάλμα χρήστη
2 (0x2) RR = Χωρίς πόρους
3 (0x3) RS = SAP δεν είναι ενεργοποιημένο
8 (0x8) DL = Data Low (κανονική περίπτωση με DP)
9 (0x9) NR = Δεν υπάρχουν έτοιμα δεδομένα απόκρισης
10 (0xA) DH = Data High (η διάγνωση DP εκκρεμεί)
12 (0xC) RDL = Δεδομένα δεν λαμβάνονται και Δεδομένα Χαμηλά
13 (0xD) RDH = Δεδομένα που δεν ελήφθησαν και Δεδομένα Υψηλά
άλλα Κατοχυρωμένα

Bit μέτρησης καρέ Το bit μέτρησης καρέ FCB (b5) αποτρέπει την αντιγραφή μηνυμάτων από τον σταθμό αναγνώρισης ή απόκρισης (ανταποκριτή) και οποιαδήποτε απώλεια από τον καλούντα σταθμό (εκκινητή). Εξαιρούνται από αυτό τα αιτήματα χωρίς επιβεβαίωση (SDN) και τα αιτήματα FDL Status, Ident και LSAP Status.

Για την ακολουθία ασφαλείας, ο εκκινητής πρέπει να φέρει ένα FCB για κάθε απάντηση. Όταν ένα τηλεγράφημα Αίτησης (Αίτημα ή Αποστολή/Αίτημα) αποστέλλεται σε έναν αποκριτή για πρώτη φορά ή εάν αποστέλλεται εκ νέου σε έναν αποκριτή που έχει επισημανθεί επί του παρόντος ως μη λειτουργικός, το FCB πρέπει να οριστεί όπως ορίζεται στον αποκριτή. Ο εκκινητής το επιτυγχάνει αυτό σε ένα τηλεγράφημα Αίτησης με FCV=0 και FCB=1. Ο απαντών πρέπει να αξιολογήσει ένα τηλεγράφημα αυτού του είδους ως τον πρώτο κύκλο μηνυμάτων και να αποθηκεύσει το FCB=1 μαζί με τη διεύθυνση του εκκινητή (SA) (βλ. παρακάτω πίνακα). Αυτός ο κύκλος μηνυμάτων δεν θα επαναληφθεί από τον εκκινητή. Σε επόμενα τηλεγραφήματα Αίτησης προς τον ίδιο αποκριτή, ο εκκινητής πρέπει να ορίσει FCV=1 και να αλλάζει το FCB με κάθε νέο τηλεγράφημα Αίτησης. Οποιοσδήποτε ανταποκρινόμενος λαμβάνει τηλεγράφημα Αίτησης που απευθύνεται σε αυτόν με FCV=1 πρέπει να αξιολογήσει το FCB. Εάν το FCB έχει αλλάξει σε σύγκριση με το τελευταίο τηλεγράφημα Αίτησης από τον ίδιο εκκινητή (το ίδιο SA), αυτό είναι έγκυρη επιβεβαίωση ότι ο προηγούμενος κύκλος μηνυμάτων ολοκληρώθηκε σωστά. Εάν το τηλεγράφημα Αίτησης προέρχεται από διαφορετικό εκκινητή (διαφορετικό SA), η αξιολόγηση του FCB δεν είναι πλέον απαραίτητη. Και στις δύο περιπτώσεις, ο ανταποκρινόμενος πρέπει να αποθηκεύσει το FCB με την πηγή SA μέχρι τη λήψη νέου τηλεγραφήματος που απευθύνεται σε αυτόν. Σε περίπτωση απώλειας ή βλάβης τηλεγραφήματος επιβεβαίωσης ή απάντησης, το FCB δεν πρέπει να αλλάξει από τον εκκινητή στην επανάληψη της αίτησης: αυτό θα υποδείξει ότι ο προηγούμενος κύκλος μηνύματος ήταν ελαττωματικός. Εάν ο ανταποκρινόμενος λάβει ένα τηλεγράφημα αιτήματος με FCV=1 και το ίδιο FCB με το τελευταίο τηλεγράφημα Αίτησης από τον ίδιο εκκινητή (ίδιο SA), αυτό θα υποδηλώνει μια επανάληψη αίτησης. Ο ανταποκρινόμενος πρέπει με τη σειρά του να αναμεταδώσει το τηλεγράφημα επιβεβαίωσης ή απάντησης που διατηρείται σε ετοιμότητα. Μέχρι την προαναφερθείσα επιβεβαίωση ή λήψη τηλεγραφήματος με διαφορετική διεύθυνση (SA ή DA) που δεν επιβεβαιώνεται (Send Data with No Acknowledge, SDN) ο απαντών πρέπει να διατηρεί το τελευταίο τηλεγράφημα επιβεβαίωσης ή απάντησης σε ετοιμότητα για κάθε πιθανή επανάληψη αίτησης . Στην περίπτωση τηλεγραφημάτων Αίτησης που δεν αναγνωρίζονται και με Κατάσταση Αίτησης FDL, Ident και Κατάσταση LSAP, FCV=0 και FCB=0. η αξιολόγηση από τον απαντώντα δεν είναι πλέον απαραίτητη.

β5 β4 θέση bit
FCB FCV Κατάσταση Εννοια Δράση
0 0 DA=TS/127 Αίτημα χωρίς επιβεβαίωση
Αίτημα FDL Status/ Ident/ LSAP Status
Διαγραφή τελευταίας επιβεβαίωσης
0/1 0/1 DA#TS Αίτημα σε άλλον ανταποκριτή
1 0 DA=TS Πρώτο αίτημα FCBM:= 1
SAM:=SA
Διαγραφή τελευταίας επιβεβαίωσης / απάντησης
0/1 1 DA=TS
SA=SAM
FCB#FCBM
Νέο αίτημα Διαγραφή τελευταίας επιβεβαίωσης / απάντησης
FCBM:= FCB
Κρατήστε την αναγνώριση / απάντηση σε ετοιμότητα για επανάληψη
0/1 1 DA=TS
SA=SAM
FCB=FCBM
Επανάληψη Αίτησης FCBM:= FCB
Επαναλάβετε την αναγνώριση / απάντηση και συνεχίστε να είστε σε ετοιμότητα
0/1 1 DA=TS
SA#SAM
Νέος εμπνευστής FCBM:= FCB
SAM:= SA Κρατήστε επιβεβαίωση / απάντηση σε ετοιμότητα για επανάληψη

Το FCBM αποθήκευσε το FCB στη μνήμη Η SAM αποθήκευσε το SA στη μνήμη




Μπλουζα