Αναζήτηση για χαμένα αρχεία με υπογραφή. Προσδιορισμός του τύπου αρχείου με υπογραφή. Μαγικοί αριθμοί και cross-platform

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

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

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

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

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

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

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

  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 να σαρώσει το δίσκο. Στην καρτέλα Scan Information (Πληροφορίες σάρωσης) θα εμφανιστεί η πρόοδος σάρωσης (πρόοδος).


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

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


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

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


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

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

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


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

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

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

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

Ανάλυση υπογραφών

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

Υπάρχουν διάφορες τεχνικές εδώ. Μια εναλλακτική είναι να χρησιμοποιήσετε μια υπογραφή που αποτελείται από 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, καθώς και πώς να επισυνάπτω υπογραφές ιών από το δωρεάν λογισμικό και συσκευαστές από το 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++.

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

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

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

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

3. Κάθε γραμμή στην ενότητα συμβολοσειρών έχει το δικό της αναγνωριστικό, το οποίο ξεκινά με το σύμβολο $ - γενικά, όπως μια δήλωση μεταβλητής στην 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)

Αυτή η καταχώρηση πρέπει να διαβαστεί ως εξής: από τις συμβολοσειρές που καθορίζονται στο σύνολο συμβολοσειρών_, τουλάχιστον τα κομμάτια έκφρασης πρέπει να ικανοποιούν τη συνθήκη 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 για αυτό και να το ρυθμίσω ώστε να λειτουργεί ως υπηρεσία ιστού. Με λίγη δημιουργικότητα, τα στεγνά αποτελέσματα του αναλυτή είναι ήδη χρωματισμένα με διαφορετικά χρώματα, υποδεικνύοντας τον βαθμό επικινδυνότητας του εντοπισμένου κακόβουλου λογισμικού. Μια μικρή ενημέρωση της βάσης δεδομένων και για πολλούς από τους κρυπτογράφους είναι διαθέσιμη μια σύντομη περιγραφή, και μερικές φορές ακόμη και οδηγίες αποσυσκευασίας. Το πρωτότυπο έχει δημιουργηθεί και λειτουργεί άψογα, και τα αφεντικά χορεύουν από χαρά!

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

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

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

Μαγικός αριθμός, ή υπογραφή, - μια σταθερά ακέραιου αριθμού ή κειμένου που χρησιμοποιείται για τον μοναδικό προσδιορισμό ενός πόρου ή δεδομένων. Ένας τέτοιος αριθμός από μόνος του δεν έχει κανένα νόημα και μπορεί να προκαλέσει σύγχυση εάν εμφανίζεται στον κώδικα του προγράμματος χωρίς το κατάλληλο πλαίσιο ή σχόλιο, ενώ μια προσπάθεια αλλαγής του σε άλλον, έστω και κοντινής αξίας, μπορεί να οδηγήσει σε εντελώς απρόβλεπτες συνέπειες. Για το λόγο αυτό, τέτοιοι αριθμοί ονομάζονταν ειρωνικά μαγικοί αριθμοί. Επί του παρόντος, αυτό το όνομα έχει καθιερωθεί ως όρος. Για παράδειγμα, οποιαδήποτε μεταγλωττισμένη τάξη γλώσσας Java ξεκινά με τον δεκαεξαδικό "μαγικό αριθμό" 0xCAFEBABE. Το δεύτερο γνωστό παράδειγμα είναι ότι οποιοδήποτε εκτελέσιμο αρχείο των Microsoft Windows με επέκταση .exe ξεκινά με την ακολουθία byte 0x4D5A (η οποία αντιστοιχεί στους χαρακτήρες ASCII MZ - τα αρχικά του Mark Zbikowski, ενός από τους δημιουργούς του MS-DOS). Ένα λιγότερο γνωστό παράδειγμα είναι ο μη αρχικοποιημένος δείκτης στο Microsoft Visual C++ (από την έκδοση 2005 του Microsoft Visual Studio), ο οποίος έχει τη διεύθυνση 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 και 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(long)); // δεν είναι εντελώς σωστό - αντιγραφή του ονόματος τύπου (αν αλλάξει ο τύπος, θα πρέπει να το αλλάξετε και εδώ) memset (a , 0 , NUMBER_OF_ELEMENTS * sizeof (a [ 0 ])); // σωστό, βέλτιστο για δυναμικούς πίνακες μη μηδενικού μεγέθους memset(a, 0, sizeof(a)); // σωστό, βέλτιστο για στατικούς πίνακες

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

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

Πολλοί μπορεί να έχουν ακούσει για αρχεία όπως το rarjpeg Αυτό είναι ένας ειδικός τύπος αρχείου, ο οποίος είναι μια εικόνα jpeg και ένα αρχείο rar που είναι κολλημένο μαζί τις παρακάτω εντολές:

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
Κεφαλίδα αποκρυπτογράφησης αρχειοθέτησης
Αρχειοθέτηση επιπλέον εγγραφής δεδομένων
Κεντρικός κατάλογος
Το πιο ενδιαφέρον είναι ο κεντρικός κατάλογος, ο οποίος περιέχει μεταδεδομένα για τα αρχεία στο αρχείο. Ο κεντρικός κατάλογος ξεκινά πάντα με την υπογραφή 0x50 0x4b 0x01 0x02 και τελειώνει με την υπογραφή 0x50 0x4b 0x05 0x06, ακολουθούμενο από 18 byte μεταδεδομένων. Είναι ενδιαφέρον ότι τα άδεια αρχεία αποτελούνται μόνο από την τελική υπογραφή και 18 μηδέν byte. Μετά από 18 byte έρχεται η περιοχή σχολίων αρχειοθέτησης, η οποία είναι ένα ιδανικό κοντέινερ για την απόκρυψη του αρχείου.

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

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

AVI

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

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


WAV

Όπως το AVI, ένα αρχείο WAV ξεκινά με μια υπογραφή RIFF, ωστόσο, αυτό το αρχείο έχει υπογραφή από το byte 8 - 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 (Component Object Model). Τα αρχεία DOC, XLS, PPT ανήκουν στην ομάδα των μορφών CFB.

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

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

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

Όπως αναφέρθηκε παραπάνω, κάθε αρχείο 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 είναι άνισα, μπορούμε να συμπεράνουμε ότι τα αρχεία ενδέχεται να συγχωνευθούν.

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

7 6 5 4 3 2 1 0 FC: Αίτημα κωδικού συνάρτησης
1 Ζητήστε Telegram
Χ FCV = Εναλλασσόμενο bit ενεργοποιημένο
Χ href=”http://profibus.felser.ch/en/funktionscode.htm#aufruffolgebit”>FCB = Εναλλασσόμενο bit (από τον αριθμό καρέ)
1 0 (0x0) Βιογραφικό = Τιμή Ρολογιού()
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 στη μνήμη