Μου ζητήθηκε να ενημερώσω κάποιες μακροεντολές του Excel 2003, αλλά τα έργα VBA προστατεύονται με κωδικό πρόσβασης και φαίνεται ότι υπάρχει έλλειψη τεκμηρίωσης... κανείς δεν γνωρίζει τους κωδικούς πρόσβασης.
Υπάρχει τρόπος να αφαιρέσετε ή να σπάσετε τον κωδικό πρόσβασης σε ένα έργο VBA;
Ναι, υπάρχει, αρκεί να χρησιμοποιείτε ένα φύλλο εργασίας σε μορφή "xls" (η προεπιλογή για το Excel μέχρι το 2003). Για το Excel 2007 και μετά, η προεπιλογή είναι .xlsx
, η οποία είναι μια αρκετά ασφαλής μορφή, και αυτή η μέθοδος δεν θα λειτουργήσει.
Όπως λέει ο Treb, πρόκειται για μια απλή σύγκριση. Μια μέθοδος είναι να αντικαταστήσετε απλώς την καταχώρηση του κωδικού πρόσβασης στο αρχείο χρησιμοποιώντας έναν επεξεργαστή δεκαεξαδικών (βλ. Επεξεργαστές δεκαεξαδικών για Windows). Παράδειγμα βήμα προς βήμα:
Δημιουργήστε ένα νέο απλό αρχείο excel.
Στο τμήμα VBA, ορίστε έναν απλό κωδικό πρόσβασης (ας πούμε - 1234).
Αποθηκεύστε το αρχείο και βγείτε. Έπειτα ελέγξτε το μέγεθος του αρχείου - δείτε Stewbob's gotcha.
Ανοίξτε το αρχείο που μόλις δημιουργήσατε με έναν επεξεργαστή δεκαεξαδικών.
Αντιγράψτε τις γραμμές που αρχίζουν με τα ακόλουθα πλήκτρα:
CMG=....
DPB=...
GC=...
ΠΡΩΤΟ BACKUP του αρχείου excel για το οποίο δεν γνωρίζετε τον κωδικό πρόσβασης VBA, στη συνέχεια ανοίξτε το με τον επεξεργαστή δεκαεξαδικών και επικολλήστε τις παραπάνω αντιγραμμένες γραμμές από το εικονικό αρχείο.
Αποθηκεύστε το αρχείο excel και βγείτε.
Τώρα, ανοίξτε το αρχείο excel στο οποίο θέλετε να δείτε τον κώδικα VBA. Ο κωδικός πρόσβασης για τον κώδικα VBA θα είναι απλώς 1234 (όπως στο παράδειγμα που σας δείχνω εδώ).
Αν πρέπει να εργαστείτε με το Excel 2007 ή 2010, υπάρχουν μερικές άλλες απαντήσεις παρακάτω που μπορεί να σας βοηθήσουν, ιδίως αυτές: 1, 2, 3.
EDIT Φεβρουάριος 2015: Για μια άλλη μέθοδο που φαίνεται πολύ ελπιδοφόρα, κοιτάξτε την αυτή τη νέα απάντηση από τον Đức Thanh Nguyễn.
Ο Colin Pickard έχει μια εξαιρετική απάντηση, αλλά υπάρχει ένα 'προσέξτε' με αυτό. Υπάρχουν περιπτώσεις (δεν έχω βρει ακόμα την αιτία) όπου το συνολικό μήκος της εγγραφής "CMG=........GC=...." στο αρχείο είναι διαφορετικό από το ένα αρχείο excel στο άλλο. Σε ορισμένες περιπτώσεις, η εγγραφή αυτή θα είναι 137 bytes, ενώ σε άλλες θα είναι 143 bytes. Το μήκος 137 byte είναι το περίεργο και αν αυτό συμβεί όταν δημιουργείτε το αρχείο σας με τον κωδικό πρόσβασης '1234', απλώς δημιουργήστε ένα άλλο αρχείο και θα πρέπει να μεταβεί στο μήκος 143 byte.
Αν προσπαθήσετε να επικολλήσετε τον λάθος αριθμό bytes στο αρχείο, θα χάσετε το έργο VBA όταν προσπαθήσετε να ανοίξετε το αρχείο με το Excel.
EDIT
Αυτό δεν ισχύει για τα αρχεία του Excel 2007/2010. Η τυπική μορφή αρχείου .xlsx είναι στην πραγματικότητα ένα αρχείο .zip που περιέχει πολυάριθμους υποφακέλους με τη μορφοποίηση, τη διάταξη, το περιεχόμενο κ.λπ. αποθηκευμένα ως δεδομένα xml. Για ένα μη προστατευμένο αρχείο Excel 2007, μπορείτε απλώς να αλλάξετε την επέκταση .xlsx σε .zip, στη συνέχεια να ανοίξετε το αρχείο zip και να δείτε όλα τα δεδομένα xml. Είναι πολύ απλό.
Ωστόσο, όταν προστατεύετε με κωδικό πρόσβασης ένα αρχείο Excel 2007, ολόκληρο το αρχείο .zip (.xlsx) στην πραγματικότητα κρυπτογραφείται με κρυπτογράφηση RSA. Δεν είναι πλέον δυνατό να αλλάξετε την επέκταση σε .zip και να περιηγηθείτε στα περιεχόμενα του αρχείου.
Η προστασία είναι μια απλή σύγκριση κειμένου στο Excel. Φορτώστε το Excel στο αγαπημένο σας πρόγραμμα εντοπισμού σφαλμάτων (Ollydbg είναι το εργαλείο της επιλογής μου), βρείτε τον κώδικα που κάνει τη σύγκριση και διορθώστε τον ώστε να επιστρέφει πάντα true, αυτό θα σας επιτρέψει την πρόσβαση στις μακροεντολές.