hacktricks/reversing/cryptographic-algorithms/unpacking-binaries.md

37 lines
7.4 KiB
Markdown
Raw Normal View History

{% hint style="success" %}
Μάθετε & εξασκηθείτε στο AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Μάθετε & εξασκηθείτε στο GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
2022-04-28 16:01:33 +00:00
<details>
2022-04-28 16:01:33 +00:00
<summary>Υποστήριξη HackTricks</summary>
2022-04-28 16:01:33 +00:00
* Ελέγξτε τα [**σχέδια συνδρομής**](https://github.com/sponsors/carlospolop)!
* **Εγγραφείτε στην** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στην [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>
{% endhint %}
2022-04-28 16:01:33 +00:00
2022-05-01 16:32:23 +00:00
# Αναγνώριση πακεταρισμένων δυαδικών αρχείων
2022-05-01 16:32:23 +00:00
* **έλλειψη συμβολοσειρών**: Είναι κοινό να βρείτε ότι τα πακεταρισμένα δυαδικά αρχεία δεν έχουν σχεδόν καμία συμβολοσειρά
* Πολλές **μη χρησιμοποιούμενες συμβολοσειρές**: Επίσης, όταν ένα κακόβουλο λογισμικό χρησιμοποιεί κάποιο είδος εμπορικού πακετάρη, είναι κοινό να βρείτε πολλές συμβολοσειρές χωρίς διασταυρώσεις. Ακόμα και αν αυτές οι συμβολοσειρές υπάρχουν, αυτό δεν σημαίνει ότι το δυαδικό αρχείο δεν είναι πακεταρισμένο.
* Μπορείτε επίσης να χρησιμοποιήσετε κάποια εργαλεία για να προσπαθήσετε να βρείτε ποιος πακετάρης χρησιμοποιήθηκε για να πακετάρει ένα δυαδικό αρχείο:
2024-02-10 22:40:18 +00:00
* [PEiD](http://www.softpedia.com/get/Programming/Packers-Crypters-Protectors/PEiD-updated.shtml)
* [Exeinfo PE](http://www.softpedia.com/get/Programming/Packers-Crypters-Protectors/ExEinfo-PE.shtml)
* [Language 2000](http://farrokhi.net/language/)
2022-05-01 16:32:23 +00:00
# Βασικές Συστάσεις
* **Ξεκινήστε** να αναλύετε το πακεταρισμένο δυαδικό αρχείο **από το κάτω μέρος στο IDA και προχωρήστε προς τα πάνω**. Οι αποπακετάρηδες εξέρχονται μόλις ο αποπακεταρισμένος κώδικας εξέρχεται, οπότε είναι απίθανο ο αποπακετάρης να περάσει την εκτέλεση στον αποπακεταρισμένο κώδικα στην αρχή.
* Αναζητήστε **JMP's** ή **CALLs** σε **καταχωρητές** ή **περιοχές** της **μνήμης**. Αναζητήστε επίσης **συναρτήσεις που σπρώχνουν παραμέτρους και μια διεύθυνση και στη συνέχεια καλούν `retn`**, επειδή η επιστροφή της συνάρτησης σε αυτή την περίπτωση μπορεί να καλέσει τη διεύθυνση που μόλις σπρώχτηκε στο στοίβα πριν την καλέσει.
* Βάλτε ένα **breakpoint** στο `VirtualAlloc` καθώς αυτό εκχωρεί χώρο στη μνήμη όπου το πρόγραμμα μπορεί να γράψει αποπακεταρισμένο κώδικα. "τρέξτε στον κώδικα χρήστη" ή χρησιμοποιήστε το F8 για να **πάρετε την τιμή μέσα στο EAX** μετά την εκτέλεση της συνάρτησης και "**ακολουθήστε αυτή τη διεύθυνση στο dump**". Ποτέ δεν ξέρετε αν αυτή είναι η περιοχή όπου θα αποθηκευτεί ο αποπακεταρισμένος κώδικας.
* **`VirtualAlloc`** με την τιμή "**40**" ως επιχείρημα σημαίνει Ανάγνωση+Γράψιμο+Εκτέλεση (κάποιος κώδικας που χρειάζεται εκτέλεση θα αντιγραφεί εδώ).
* **Κατά την αποπακετοποίηση** του κώδικα είναι φυσιολογικό να βρείτε **πολλές κλήσεις** σε **αριθμητικές λειτουργίες** και συναρτήσεις όπως **`memcopy`** ή **`Virtual`**`Alloc`. Αν βρεθείτε σε μια συνάρτηση που προφανώς εκτελεί μόνο αριθμητικές λειτουργίες και ίσως κάποια `memcopy`, η σύσταση είναι να προσπαθήσετε να **βρείτε το τέλος της συνάρτησης** (ίσως ένα JMP ή κλήση σε κάποιον καταχωρητή) **ή** τουλάχιστον την **κλήση στην τελευταία συνάρτηση** και να τρέξετε σε αυτήν καθώς ο κώδικας δεν είναι ενδιαφέρον.
* Κατά την αποπακετοποίηση του κώδικα **σημειώστε** όποτε **αλλάζετε περιοχή μνήμης** καθώς μια αλλαγή περιοχής μνήμης μπορεί να υποδηλώνει την **έναρξη του αποπακεταρισμένου κώδικα**. Μπορείτε εύκολα να κάνετε dump μια περιοχή μνήμης χρησιμοποιώντας το Process Hacker (process --> properties --> memory).
* Κατά την προσπάθεια αποπακετοποίησης του κώδικα, ένας καλός τρόπος για να **γνωρίζετε αν ήδη εργάζεστε με τον αποπακεταρισμένο κώδικα** (έτσι ώστε να μπορείτε απλά να το κάνετε dump) είναι να **ελέγξετε τις συμβολοσειρές του δυαδικού αρχείου**. Αν σε κάποιο σημείο κάνετε ένα άλμα (ίσως αλλάζοντας την περιοχή μνήμης) και παρατηρήσετε ότι **προστέθηκαν πολλές περισσότερες συμβολοσειρές**, τότε μπορείτε να γνωρίζετε **ότι εργάζεστε με τον αποπακεταρισμένο κώδικα**.\
Ωστόσο, αν ο πακετάρης περιέχει ήδη πολλές συμβολοσειρές, μπορείτε να δείτε πόσες συμβολοσειρές περιέχουν τη λέξη "http" και να δείτε αν αυτός ο αριθμός αυξάνεται.
* Όταν κάνετε dump ένα εκτελέσιμο από μια περιοχή μνήμης, μπορείτε να διορθώσετε κάποιες κεφαλίδες χρησιμοποιώντας το [PE-bear](https://github.com/hasherezade/pe-bear-releases/releases).