.. | ||
README.md | ||
unpacking-binaries.md |
Κρυπτογραφικοί/Αλγόριθμοι Συμπίεσης
Κρυπτογραφικοί/Αλγόριθμοι Συμπίεσης
{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:Εκπαίδευση HackTricks AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: Εκπαίδευση HackTricks GCP Red Team Expert (GRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Κοινοποιήστε κόλπα χάκερ υποβάλλοντας PRs στα αποθετήρια HackTricks και HackTricks Cloud.
Αναγνώριση Αλγορίθμων
Εάν end σε έναν κώδικα χρησιμοποιώντας μετατοπίσεις δεξιά και αριστερά, XOR και αρκετές αριθμητικές πράξεις είναι πολύ πιθανό ότι είναι η υλοποίηση ενός κρυπτογραφικού αλγορίθμου. Εδώ θα δείξουμε κάποιους τρόπους για αναγνώριση του αλγορίθμου που χρησιμοποιείται χωρίς την ανάγκη αντιστροφής κάθε βήματος.
Συναρτήσεις API
CryptDeriveKey
Εάν χρησιμοποιείται αυτή η συνάρτηση, μπορείτε να βρείτε ποιος αλγόριθμος χρησιμοποιείται ελέγχοντας την τιμή της δεύτερης παραμέτρου:
Ελέγξτε εδώ τον πίνακα των πιθανών αλγορίθμων και των αντιστοιχισμένων τιμών τους: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
RtlCompressBuffer/RtlDecompressBuffer
Συμπιέζει και αποσυμπιέζει ένα δεδομένο buffer.
CryptAcquireContext
Από τα έγγραφα: Η συνάρτηση CryptAcquireContext χρησιμοποιείται για να αποκτήσει ένα χειριστή για ένα συγκεκριμένο δοχείο κλειδιών εντός ενός συγκεκριμένου παρόχου κρυπτογραφικών υπηρεσιών (CSP). Αυτός ο επιστρεφόμενος χειριστής χρησιμοποιείται σε κλήσεις συναρτήσεων CryptoAPI που χρησιμοποιούν τον επιλεγμένο CSP.
CryptCreateHash
Εκκινεί την κατακερματισμό ενός ρεύματος δεδομένων. Εάν χρησιμοποιείται αυτή η συνάρτηση, μπορείτε να βρείτε ποιος αλγόριθμος χρησιμοποιείται ελέγχοντας την τιμή της δεύτερης παραμέτρου:
Ελέγξτε εδώ τον πίνακα των πιθανών αλγορίθμων και των αντιστοιχισμένων τιμών τους: https://docs.microsoft.com/en-us/windows/win32/seccrypto/alg-id
Σταθερές κώδικα
Μερικές φορές είναι πραγματικά εύκολο να αναγνωρίσετε έναν αλγόριθμο χάρη στο γεγονός ότι χρειάζεται να χρησιμοποιήσει μια ειδική και μοναδική τιμή.
Εάν αναζητήσετε την πρώτη σταθερά στο Google, αυτό είναι το αποτέλεσμα:
Συνεπώς, μπορείτε να υποθέσετε ότι η αποσυναρμολογημένη συνάρτηση είναι ένας υπολογιστής sha256.
Μπορείτε να αναζητήσετε οποιαδήποτε άλλη σταθερά και θα λάβετε (πιθανόν) το ίδιο αποτέλεσμα.
Πληροφορίες δεδομένων
Εάν ο κώδικας δεν έχει κάποια σημαντική σταθερά, μπορεί να φορτώνει πληροφορίες από την ενότητα .data.
Μπορείτε να έχετε πρόσβαση σε αυτά τα δεδομένα, να ομαδοποιήσετε τον πρώτο λέξη και να το αναζητήσετε στο Google όπως κάναμε στην προηγούμενη ενότητα:
Σε αυτήν την περίπτωση, αν αναζητήσετε το 0xA56363C6 θα βρείτε ότι σχετίζεται με τις πίνακες του αλγορίθμου AES.
RC4 (Συμμετρική Κρυπτογραφία)
Χαρακτηριστικά
Αποτελείται από 3 κύρια μέρη:
- Στάδιο Αρχικοποίησης/: Δημιουργεί έναν πίνακα τιμών από 0x00 έως 0xFF (συνολικά 256 bytes, 0x100). Αυτός ο πίνακας ονομάζεται συνήθως Substitution Box (ή SBox).
- Στάδιο Ανακάτεμα: Θα επαναλάβει τον πίνακα που δημιουργήθηκε πριν (επανάληψη 0x100 φορές, ξανά) τροποποιώντας κάθε τιμή με ημι-τυχαία bytes. Για τη δημιουργία αυτών των ημι-τυχαίων bytes, χρησιμοποιείται το κλειδί του RC4. Τα κλειδιά του RC4 μπορεί να είναι μεταξύ 1 και 256 bytes μήκους, ωστόσο συνήθως συνιστάται να είναι πάνω από 5 bytes. Συνήθως, τα κλειδιά του RC4 είναι 16 bytes μήκους.
- Στάδιο XOR: Τέλος, το καθαρό κείμενο ή το κρυπτοκείμενο είναι XORed με τις τιμές που δημιουργήθηκαν πριν. Η λειτουργία για κρυπτογράφηση και αποκρυπτογράφηση είναι η ίδια. Για αυτό, θα εκτελεστεί μια επανάληψη μέσω των δημιουργημένων 256 bytes όσες φορές χρειάζεται. Αυτό αναγνωρίζεται συνήθως σε έναν αποσυναρμολογημένο κώδικα με ένα %256 (mod 256).
{% hint style="info" %} Για να αναγνωρίσετε ένα RC4 σε έναν κώδικα αποσυναρμολόγησης/αποσυναρμολογημένο κώδικα μπορείτε να ελέγξετε για 2 βρόχους μεγέθους 0x100 (με χρήση ενός κλειδιού) και στη συνέχεια ένα XOR των δεδομένων εισόδου με τις 256 τιμές που δημιουργήθηκαν πριν στους 2 βρόχους πιθανότατα χρησιμοποιώντας ένα %256 (mod 256) {% endhint %}
Στάδιο Αρχικοποίησης/Substitution Box: (Σημειώστε τον αριθμό 256 που χρησιμοποιείται ως μετρητής και πώς γράφεται ένα 0 σε κάθε θέση των 256 χαρακτήρων)
Στάδιο Ανακάτεμα:
Στάδιο XOR:
AES (Συμμετρική Κρυπτογραφία)
Χαρακτηριστικά
- Χρήση πίνακες αντικατάστασης και πινάκων αναζήτησης
- Είναι δυνατό να διακριθεί το AES χάρη στη χρήση συγκεκριμένων τιμών πινάκων αναζήτησης (σταθερές). _Σημειώστε ότι η σταθερά μπορεί να **απο
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 και να αναζητήσετε παρόμοια πράγματα online
Αναγνώριση
Το γράφημα είναι αρκετά μεγάλο:
Ελέγξτε 3 συγκρίσεις για να το αναγνωρίσετε: