Σημασία και χρήσεις της αποσυμπίλησης

click fraud protection

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

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

Hm, "οι πηγές δεν είναι διαθέσιμες", αυτό σημαίνει ότι μπορούμε να αναλύσουμε τα έργα των Δελφών άλλων ανθρώπων; Λοιπόν, ναι και όχι ...

Είναι δυνατή η πραγματική αποσυμπίληση;

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

Όταν ένα έργο Delphi συντάσσεται και συνδέεται για να παράγει ένα αυτόνομο εκτελέσιμο αρχείο, τα περισσότερα από τα ονόματα που χρησιμοποιούνται στο πρόγραμμα μετατρέπονται σε διευθύνσεις. Αυτή η απώλεια ονομάτων σημαίνει ότι ένα decompiler θα πρέπει να δημιουργεί μοναδικά ονόματα για όλες τις σταθερές, τις μεταβλητές, τις λειτουργίες και τις διαδικασίες. Ακόμη και αν επιτευχθεί ένας ορισμένος βαθμός επιτυχίας, ο παραγόμενος "πηγαίος κώδικας" στερείται σημαντικών ονομάτων μεταβλητών και λειτουργιών.

instagram viewer

Προφανώς, η σύνταξη της γλώσσας πηγής δεν υπάρχει πλέον στο εκτελέσιμο αρχείο. Θα ήταν πολύ δύσκολο για ένα decompiler να ερμηνεύσει τη σειρά οδηγιών γλώσσας μηχανής (ASM) που υπάρχουν σε ένα εκτελέσιμο αρχείο και να αποφασίσει ποια ήταν η αρχική εντολή πηγής.

Γιατί και πότε να χρησιμοποιήσετε την αποσυμπίληση

Η αντίστροφη μηχανική μπορεί να χρησιμοποιηθεί για διάφορους λόγους, μερικοί από τους οποίους είναι:

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

Είναι αυτό το νόμιμο;

Η αντίστροφη μηχανική ΔΕΝ σπάζει, αν και είναι μερικές φορές δύσκολο να σχεδιάσουμε την λεπτή γραμμή μεταξύ αυτών των δύο. Τα προγράμματα υπολογιστών προστατεύονται από τους νόμους περί πνευματικών δικαιωμάτων και εμπορικών σημάτων. Οι διαφορετικές χώρες έχουν διαφορετικές εξαιρέσεις από τα δικαιώματα των κατόχων πνευματικών δικαιωμάτων. Οι πιο συνηθισμένες δηλώνουν ότι είναι εντάξει η αποσυμπίληση: για λόγους ερμηνείας όπου δεν έχουν διατεθεί οι προδιαγραφές διεπαφής, για το για λόγους διόρθωσης σφαλμάτων, όταν ο κάτοχος των πνευματικών δικαιωμάτων δεν είναι διαθέσιμος για τη διόρθωση, για τον προσδιορισμό τμημάτων του προγράμματος που δεν προστατεύονται από πνευματική ιδιοκτησία. Φυσικά θα πρέπει να είστε πολύ προσεκτικοί / επικοινωνήστε με τον δικηγόρο σας αν έχετε αμφιβολίες για το αν σας επιτρέπεται να αποσυναρμολογήσετε το φάκελο exe ενός προγράμματος.

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

Προς το παρόν, το Borland δεν προσφέρει κανένα προϊόν ικανό να αποσυμπιέσει ένα εκτελέσιμο αρχείο (.exe) ή την "Delphi compiled unit" (.dcu) στον αρχικό πηγαίο κώδικα (.pas).

Συγκροτημένη Μονάδα Δελφών (DCU)

Όταν δημιουργείται ένα έργο Delphi ή εκτελείται ένα αρχείο μεταγλωττισμένης μονάδας (.pas). Από προεπιλογή, η μεταγλωττισμένη έκδοση κάθε μονάδας αποθηκεύεται σε ξεχωριστό αρχείο δυαδικής μορφής με το ίδιο όνομα με το αρχείο μονάδας, αλλά με την επέκταση .DCU. Για παράδειγμα, η μονάδα1.dcu περιέχει τον κώδικα και τα δεδομένα που δηλώνονται στο αρχείο unit1.pas.

Αυτό σημαίνει ότι, αν έχετε μερικούς, για παράδειγμα, η συνιστώσα σύνθετη πηγή μόνο που πρέπει να κάνετε είναι να την αντιστρέψετε και να πάρετε τον κώδικα. Λανθασμένος. Η μορφή αρχείου DCU είναι μη τεκμηριωμένη (ιδιόκτητη μορφή) και μπορεί να αλλάξει από έκδοση σε έκδοση.

Μετά το Compiler: Delphi Αντίστροφη Μηχανική

Εάν θέλετε να προσπαθήσετε να κάνετε αποσυμπίεση ενός εκτελέσιμου αρχείου Delphi, αυτά είναι μερικά από τα πράγματα που πρέπει να ξέρετε:

Τα αρχεία προέλευσης των προγραμμάτων Delphi αποθηκεύονται συνήθως σε δύο τύπους αρχείων: Αρχεία κώδικα ASCII (.pas, .dpr) και αρχεία πόρων (.res, .rc, .dfm, .dcr). Τα αρχεία Dfm περιέχουν τις λεπτομέρειες (ιδιότητες) των αντικειμένων που περιέχονται σε μια φόρμα. Κατά τη δημιουργία ένα exe, Οι Δελφοί αντιγράφουν πληροφορίες σε αρχεία .dfm στο τελικό αρχείο κώδικα .exe. Τα αρχεία φορμών περιγράφουν κάθε στοιχείο στη φόρμα σας, συμπεριλαμβανομένων των τιμών όλων των επίμονων ιδιοτήτων. Κάθε φορά που αλλάζουμε τη θέση μιας φόρμας, την λεζάντα ενός κουμπιού ή εκχωρούμε μια διαδικασία συμβάντος σε ένα στοιχείο, τους Delphi γράφει αυτές τις τροποποιήσεις σε ένα αρχείο DFM (όχι τον κώδικα της διαδικασίας συμβάντος - αυτό αποθηκεύεται στο pas / dcu αρχείο). Για να πάρουμε το "dfm" από το εκτελέσιμο αρχείο, πρέπει να καταλάβουμε τι είδους πόροι αποθηκεύονται μέσα σε ένα εκτελέσιμο αρχείο Win32.

Όλα τα προγράμματα που συντάσσονται από τους Δελφούς έχουν τα ακόλουθα τμήματα: ΚΩΔΙΚΟΣ, ΔΕΔΟΜΕΝΑ, BSS, .idata, tls, .rdata, .rsrc. Τα πιο σημαντικά από την αποσυμπιεστική άποψη είναι τα τμήματα CODE και .rsrc. Στο "Προσθέτοντας λειτουργικότητα σε ένα πρόγραμμα Delphi"παρουσιάζουν ορισμένα ενδιαφέροντα γεγονότα σχετικά με τη μορφή των εκτελέσιμων δελτίων Delphi, τις πληροφορίες κλάσης και τους πόρους DFM: πώς να επαναπροσδιορίσετε τα συμβάντα που πρέπει να χειριστούν άλλοι χειριστές συμβάντων που ορίζονται στην ίδια φόρμα. Ακόμη περισσότερο: πώς να προσθέσετε το δικό σας χειριστή συμβάντων, προσθέτοντας τον κώδικα στο εκτελέσιμο, που θα αλλάξει τη λεζάντα ενός κουμπιού.

Μεταξύ πολλών τύπων πόρων που αποθηκεύονται σε ένα αρχείο exe, ο RT_RCDATA ή ο καθορισμένος από την εφαρμογή πόρος (raw data) περιέχει τις πληροφορίες που υπήρχαν στο αρχείο DFM πριν από τη σύνταξη. Για να εξαγάγουμε τα δεδομένα DFM από ένα αρχείο exe μπορούμε να καλέσουμε το EnumResourceNames Λειτουργία API... Για περισσότερες πληροφορίες σχετικά με την εξαγωγή του DFM από ένα εκτελέσιμο αρχείο, δείτε: Κωδικοποίηση ενός εξερευνητή DFM των Delphi άρθρο.

Η τέχνη της αντίστροφης μηχανικής είναι παραδοσιακά η γη των τεχνικών μάγοι, εξοικειωμένοι με τη γλώσσα συναρμολόγησης και τους εντοπιστές σφαλμάτων. Έχουν εμφανιστεί αρκετοί αποδιαμορφωτές των Delphi που επιτρέπουν σε οποιονδήποτε, ακόμα και με περιορισμένες τεχνικές γνώσεις, να αναστρέψει μηχανικά τα περισσότερα εκτελέσιμα αρχεία Delphi.

Αν σας ενδιαφέρει η αντίστροφη μηχανική Delphi προγράμματα σας προτείνω να ρίξετε μια ματιά στα ακόλουθα λίγα "decompilers":

Ένα αποσυμπιληστή αρχείων εκτελέσιμων αρχείων (EXE) και δυναμικές βιβλιοθήκες (DLL), γραμμένο στους Δελφούς και εκτελούμενο σε περιβάλλον Windows32. Ο τελικός στόχος του έργου είναι η ανάπτυξη του προγράμματος ικανό να αποκαταστήσει το μεγαλύτερο μέρος των αρχικών Δελφών κωδικούς πηγής από το compiled file, αλλά το IDR, καθώς και άλλοι αποσυμπιεστές Delphi, δεν μπορούν να το κάνουν ακόμα. Παρόλα αυτά, η IDR βρίσκεται σε κατάσταση που διευκολύνει σημαντικά αυτή τη διαδικασία. Σε σύγκριση με άλλους γνωστούς αποδιαμορφωτές Delphi, το αποτέλεσμα της ανάλυσης IDR έχει τη μεγαλύτερη πληρότητα και αξιοπιστία.

Το Revendepro βρίσκει σχεδόν όλες τις δομές (τάξεις, τύπους, διαδικασίες κ.λπ.) στο πρόγραμμα και δημιουργεί την αναπαράσταση pascal, οι διαδικασίες θα γραφτούν στον assembler. Λόγω κάποιου περιορισμού στον assembler, η παραγόμενη παραγωγή δεν μπορεί να ανασυσταθεί. Η πηγή σε αυτό το decompiler είναι ελεύθερα διαθέσιμη. Δυστυχώς, αυτό είναι το μοναδικό decompiler που δεν μπόρεσα να χρησιμοποιήσω - προτρέπει με μια εξαίρεση όταν προσπαθείτε να κάνετε αποσυμπίεση ενός εκτελέσιμου αρχείου Delphi.

Το EMS Source Rescuer είναι μια εύχρηστη εφαρμογή οδηγού, η οποία μπορεί να σας βοηθήσει να αποκαταστήσετε τον χαμένο πηγαίο κώδικα. Εάν χάσετε τις πηγές του έργου Delphi ή C ++ Builder, αλλά έχετε ένα εκτελέσιμο αρχείο, τότε αυτό το εργαλείο μπορεί να διασώσει μέρος των χαμένων πηγών. Ο διασώστης παράγει όλες τις μορφές έργου και τις ενότητες δεδομένων με όλες τις καθορισμένες ιδιότητες και συμβάντα. Οι διαδικασίες συμβάντων που παράγονται δεν έχουν σώμα (δεν είναι αποσυμπιεστής), αλλά έχουν διεύθυνση κώδικα σε εκτελέσιμο αρχείο. Στις περισσότερες περιπτώσεις ο Rescueer εξοικονομεί 50-90% του χρόνου σας για την αποκατάσταση του έργου.

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

  • Όλα τα αρχεία dfm του στόχου. Θα μπορείτε να τα ανοίξετε και να τα επεξεργαστείτε με τους Δελφούς.
  • Όλες οι δημοσιευμένες μέθοδοι στον καλά σχολιασμένο κώδικα ASM με αναφορές σε συμβολοσειρές, εισαγόμενες κλήσεις λειτουργιών, κλήσεις μεθόδων τάξεων, στοιχεία της μονάδας, Try-Except και Try-Finally blocks. Από προεπιλογή, το DeDe ανακτά μόνο τις δημοσιευμένες πηγές μεθόδων, αλλά μπορείτε επίσης να επεξεργαστείτε μια άλλη διαδικασία σε ένα εκτελέσιμο αν γνωρίζετε την μετατόπιση RVA χρησιμοποιώντας τα εργαλεία | Αποσυναρμολογήστε το μενού Proc.
  • Πολλές πρόσθετες πληροφορίες.
  • Μπορείτε να δημιουργήσετε ένα φάκελο έργου Delphi με όλα τα αρχεία dfm, pas, dpr. Σημείωση: Τα αρχεία pas περιέχουν τον προαναφερθέντα κώδικα ASM που προαναφέρθηκε. Δεν μπορούν να ξανασυμβληθούν!
instagram story viewer