Cryptographic/Compression Algorithms
Κρυπτογραφικοί/Αλγόριθμοι Συμπίεσης
Αναγνώριση Αλγορίθμων
Εάν καταλήξετε σε κώδικα που χρησιμοποιεί δεξιές και αριστερές μετατοπίσεις, XOR και πολλές αριθμητικές πράξεις, είναι πολύ πιθανό ότι πρόκειται για την υλοποίηση ενός κρυπτογραφικού αλγορίθμου. Εδώ θα παρουσιαστούν ορισμένοι τρόποι για να αναγνωρίσετε τον αλγόριθμο που χρησιμοποιείται χωρίς να χρειάζεται να αναστρέψετε κάθε βήμα.
Συναρτήσεις API
CryptDeriveKey
Εάν χρησιμοποιείται αυτή η συνάρτηση, μπορείτε να βρείτε ποιος αλγόριθμος χρησιμοποιείται ελέγχοντας την τιμή της δεύτερης παραμέτρου:
Ελέγξτε εδώ τον πίνακα των πιθανών αλγορίθμων και των αντιστοιχισμένων τιμών τους: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
RtlCompressBuffer/RtlDecompressBuffer
Συμπιέζει και αποσυμπιέζει έναν δοσμένο πίνακα δεδομένων.
CryptAcquireContext
Από τα έγγραφα: Η συνάρτηση CryptAcquireContext χρησιμοποιείται για να αποκτήσει ένα χειριστή για ένα συγκεκριμένο δοχείο κλειδιών εντός ενός συγκεκριμένου παρόχου κρυπτογραφικών υπηρεσιών (CSP). Αυτός ο χειριστής που επιστρέφεται χρησιμοποιείται σε κλήσεις συναρτήσεων CryptoAPI που χρησιμοποιούν τον επιλεγμένο CSP.
CryptCreateHash
Ξεκινά τον υπολογισμό του κατακερματισμού ενός ρεύματος δεδομένων. Εάν χρησιμοποιείται αυτή η συνάρτηση, μπορείτε να βρείτε ποιος αλγόριθμος χρησιμοποιείται ελέγχοντας την τιμή της δεύτερης παραμέτρου:
Ελέγξτε εδώ τον πίνακα των πιθανών αλγορίθμων και των αντιστοιχισμένων τιμών τους: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
Σταθερές κώδικα
Μερικές φορές είναι πολύ εύκολο να αναγνωρίσετε έναν αλγόριθμο χάρη στο γεγονός ότι χρειάζεται να χρησιμοποιήσει μια ειδική και μοναδική τιμή.
Εά
RSA (Ασύμμετρη Κρυπτογραφία)
Χαρακτηριστικά
Πιο πολύπλοκο από τους συμμετρικούς αλγορίθμους
Δεν υπάρχουν σταθερές! (η προσαρμογή προσαρμοσμένων υλοποιήσεων είναι δύσκολη)
Ο KANAL (ένας κρυπτοαναλυτής) αποτυγχάνει να εμφανίσει υποδείξεις για το RSA καθώς βασίζεται σε σταθερές.
Αναγνώριση με συγκρίσεις
Στη γραμμή 11 (αριστερά) υπάρχει το
+7) >> 3
που είναι το ίδιο με τη γραμμή 35 (δεξιά):+7) / 8
Η γραμμή 12 (αριστερά) ελέγχει αν
modulus_len < 0x040
και στη γραμμή 36 (δεξιά) ελέγχει ανinputLen+11 > modulusLen
MD5 & SHA (κατακερματισμός)
Χαρακτηριστικά
3 συναρτήσεις: Init, Update, Final
Παρόμοιες συναρτήσεις αρχικοποίησης
Αναγνώριση
Init
Μπορείτε να αναγνωρίσετε και τα δύο ελέγχοντας τις σταθερές. Σημειώστε ότι η sha_init έχει 1 σταθερά που η MD5 δεν έχει:
Μετασχηματισμός MD5
Σημειώστε τη χρήση περισσότερων σταθερών
CRC (κατακερματισμός)
Μικρότερο και πιο αποδοτικό καθώς η λειτουργία του είναι να εντοπίζει ατύχημα αλλαγές στα δεδομένα
Χρησιμοποιεί πίνακες αναζήτησης (ώστε να μπορείτε να αναγνωρίσετε σταθερές)
Αναγνώριση
Ελέγξτε τις σταθερές του πίνακα αναζήτησης:
Ένας αλγόριθμος κατακερματισμού CRC φαίνεται όπως εξής:
APLib (Συμπίεση)
Χαρακτηριστικά
Δεν υπάρχουν αναγνωρίσιμες σταθερές
Μπορείτε να δοκιμάσετε να γράψετε τον αλγόριθμο σε Python και να αναζητήσετε παρόμοια πράγματα στο διαδίκτυο
Αναγνώριση
Το γράφημα είναι αρκετά μεγάλο:
Ελέγξτε 3 συγκρίσεις για να το αναγνωρίσετε:
Last updated