http://www.spinellis.gr/pubs/trade/1993-Winmag/winlock/html/winlock.html
This is an HTML rendering of a working paper draft that led to a publication. The publication should always be cited in preference to this draft using the following reference:

The document's metadata is available in BibTeX format.

Find the publication on Google Scholar

This material is presented to ensure timely dissemination of scholarly and technical work. Copyright and all rights therein are retained by authors or by other copyright holders. All persons copying this information are expected to adhere to the terms and constraints invoked by each author's copyright. In most cases, these works may not be reposted without the explicit permission of the copyright holder.

Diomidis Spinellis Publications

Προστατεύοντας προγράμματα από παράνομη αντιγραφή

Διομήδης Δ. Σπινέλλης
Multimedia Products Technical Support
FAST Hellas S.A.
Εθνικής Αντιστάσεως 14α, 152 32 Χαλάνδρι

Συχνά είναι απαραίτητο ένα πρόγραμμα να προστατευτεί από την παράνομη και αθέμιτη αντιγραφή του. Εκτός από την προστασία που παρέχει ο νόμος, ο κατασκευαστής μπορεί να επιλέξει να χρησιμοποιήσει και κάποια τεχνικά μέσα για να αποτρέψει τον επίδοξο αντιγραφέα. Στο παρελθόν ένας συνηθισμένος τρόπος τέτοιας προστασίας ήταν η χρήση ειδικών τρόπων εγγραφής στις δισκέτες του προγράμματος. Αυτές ελέγχονταν κατά την εκτέλεση του προγράμματος για να διαπιστωθεί αν η δισκέτα ήταν γνήσια ή πειρατικό αντίγραφο. Ο τρόπος αυτός έχει πολλά μειονεκτήματα όπως η απαίτηση των προγραμμάτων που τον χρησιμοποιούν να μπορούν να διαβάσουν την πρωτότυπη δισκέτα τη στιγμή της εκτέλεσής τους, και η ύπαρξη ειδικών προγραμμάτων που αντιγράφουν τις προστατευμένες δισκέτες. Για το λόγο αυτό τα τελευταία χρόνια η μέθοδος προστασίας που χρησιμοποιείται περισσότερο είναι αυτή που βασίζεται σε ηλεκτρονικά κλειδιά (dongles) τα οποία συνδέονται με τον υπολογιστή με σκοπό να πιστοποιούν την αυθεντικότητα του προγράμματος. Ο συνηθέστερος τύπος τέτοιων κλειδιών συνδέεται στην παράλληλη θύρα του υπολογιστή και επιτρέπει τη σε σειρά σύνδεση του εκτυπωτή. Ενα τέτοιο προϊόν είναι το Hardlock EYE της Fast Electronic.

Λειτουργία του κλειδιού

Το Hardlock EYE περιέχει μέσα του ένα ηλεκτρονικό κύκλωμα που υλοποιεί μια μηχανή κρυπτογράφησης. Εδώ πρέπει να αναφέρουμε ότι ένα σύστημα κρυπτογράφησης - είτε αυτό είναι υλοποιημένο με λογισμικό είτε με ηλεκτρονικό τρόπο - μετατρέπει ένα κείμενο (το λεγόμενο "καθαρό κείμενο" - cleartext) στο κρυπτογραφικό αντίστοιχό του (το κρυπτογραφημένο κείμενο - cyphertext) με βάση ένα συγκεκριμένο κωδικό (κλειδάριθμος - key). Η διαδικασία αυτή είναι με κάποιο τρόπο αντιστρεπτή έτσι ώστε δίδοντας το κρυπτογραφημένο κείμενο και το σωστό κωδικό (που μπορεί να είναι ο ίδιος ή και διαφορετικός από τον κωδικό κρυπτογράφησης) να μπορούμε να ανακτήσουμε το αρχικό κείμενο. Φυσικά, αντί για κείμενο μπορεί να χρησιμοποιηθούν οποιαδήποτε δεδομένα όπως η ψηφιακή παράσταση μιας φωτογραφίας, ψηφιοποιημένος ήχος ή ο εκτελέσιμος κώδικας ενός προγράμματος. Πρέπει να τονίσουμε πως η ασφάλεια των κρυπτογραφικών συστημάτων δεν πρέπει ποτέ να βασίζεται στη μυστικότητα του τρόπου (αλγορίθμου) κρυπτογράφησης, αλλά στη μυστικότητα του κωδικού κρυπτογράφησης. Ο κωδικός αυτός δεν πρέπει να μπορεί να εξαχθεί ακόμα και αν είναι γνωστό κάποιο καθαρό κείμενο και το κρυπτογραφημένο αντίστοιχό του.

Κάθε εταιρία που χρησιμοποιεί το Hardlock EYE για να προστατέψει τα προϊόντα της εφοδιάζεται και με μια κάρτα προγραμματισμού του κλειδιού που προγραμματίζει τη μηχανή κρυπτογράφησης με ένα μοναδικό στον κόσμο κωδικό. Ο κωδικός αυτός μεταφέρεται από την κάρτα προγραμματισμού στο κλειδί και χρησιμοποιείται για την κρυπτογράφηση και αποκρυπτογράφηση. Ο συγκεκριμένος κωδικός μπορεί να προγραμματιστεί μόνο από την κάρτα που τον περιέχει. Ετσι, μόνο τα κλειδιά που έχουν προγραμματιστεί από τη συγκεκριμένη κάρτα είναι δυνατόν να χρησιμοποιηθούν από ένα πρόγραμμα που περιμένει να βρει πάνω στον υπολογιστή τη συγκεκριμένη κρυπτογραφική μηχανή. Ενας απλοϊκός τρόπος χρήσης του Hardlock EYE για την προστασία ενός προγράμματος θα ήταν λοιπόν η κρυπτογράφηση ενός συγκεκριμένου κειμένου από το πρόγραμμα με τη χρήση του Hardlock EYE και η σύγκρισή του με το από πριν υπολογισμένο αποτέλεσμα της κρυπτογράφησης φυλαγμένο μέσα στο πρόγραμμα. Στην πραγματικότητα για την αποτελεσματική προστασία από τους αντιγραφείς χρησιμοποιούνται πιο αναπτυγμένοι τρόποι, όπως η κρυπτογράφηση τμημάτων του εκτελέσιμου κώδικα, και αρχείων που χρειάζεται το πρόγραμμα για τη σωστή λειτουργία του.

Κατά τον προγραμματισμό του κλειδιού από το δημιουργό του προγράμματος είναι δυνατόν να αλλαχθεί και ένα τμήμα του κωδικού της κρυπτογράφησης, για τη δημιουργία "διαφορετικών" κλειδιών που θα χρησιμοποιούνται με διαφορετικά προγράμματα. Ακόμα υπάρχει μοντέλο του Hardlock EYE που περιέχει μνήμη EEPROM (Electrically Erasable Programmable Read Only Memory - μνήμη της οποίας τα στοιχεία παραμένουν χωρίς να απαιτείται τροφοδοσία). Ενα τμήμα της μνήμης αυτής μπορεί να προγραμματιστεί μόνο από την κάρτα προγραμματισμού και μπορεί να χρησιμοποιηθεί για να φυλάει χαρακτηριστικά του προγράμματος ή τον κωδικό του χρήστη. Το υπόλοιπο τμήμα της μνήμης μπορεί να προγραμματιστεί με κατάλληλες εντολές από τον υπολογιστή του τελικού χρήστη και μπορεί να χρησιμοποιηθεί για τη φύλαξη λειτουργικών παραμέτρων του προγράμματος ή τη μέτρηση του χρόνου χρήσης του προγράμματος.

Το Hadlock EYE τοποθετείται είτε στην παράλληλη θύρα του εκτυπωτή, είτε (με την μορφή μια μικρής κάρτας ISA ή MCA) κατευθείαν πάνω στο δίαυλο. Ενα σύστημα από βιβλιοθήκες λογισμικού και μια ειδική έκδοση του Hardlock EYE επιτρέπουν τον έλεγχο προγραμμάτων που τρέχουν σε δίκτυο υπολογιστών με την καταμέτρηση του αριθμού των προγραμμάτων που έχουν κάθε στιγμή αποκτήσει πρόσβαση στο κλειδί. Ετσι, ο τελικός χρήστης του κλειδιού αγοράζει άδειες χρήσης του προγράμματος ανάλογες με τις ανάγκες του, και όχι τόσες όσοι είναι οι υπολογιστές πάνω στο δίκτυο. Η επικοινωνία μεταξύ των σταθμών εργασίας και του σταθμού που διαμοιράζει και ελέγχει τις άδειες χρήσης γίνεται με τα πρωτόκολλα δικτύου NetBIOS ή IPX.

Η προστασία ενός προγράμματος με βάση το Hardlock EYE μπορεί να γίνει αυτόματα (δηλαδή χωρίς καμία μετατροπή του προγράμματος) ή με την προσθήκη ειδικών εντολών ελέγχου του κλειδιού.

Αυτόματη υποστήριξη σε Windows

Η αυτόματη προστασία ενός προγράμματος Windows με το Hardlock EYE γίνεται μέσω του προγράμματος HLWCRYPT. Το πρόγραμμα αυτό διαβάζει το εκτελέσιμο αρχείο του προγράμματος που θέλουμε να προστατέψουμε από αντιγραφή και το μετατρέπει σε ένα προστατευμένο πρόγραμμα. Το νέο προστατευμένο πρόγραμμα συμπεριφέρεται ακριβώς όπως και το μη προστατευμένο πρόγραμμα αλλά δεν μπορεί να εκτελεστεί αν δεν είναι συνδεδεμένο στον υπολογιστή το αντίστοιχο κλειδί που χρησιμοποιήθηκε για το "κλείδωμα" του προγράμματος. Ο έλεγχος για την ύπαρξη του κλειδιού γίνεται και κατά τη διάρκεια εκτέλεσης του προγράμματος. Αν το κλειδί δεν βρεθεί στον υπολογιστή, εμφανίζεται στην οθόνη ένα κουτί διαλόγου που ζητά από το χρήστη να συνδέσει στον υπολογιστή το κατάλληλο κλειδί. Για την προστασία του προγράμματος δεν είναι απαραίτητη η πρόσβαση στον πηγαίο κώδικά του.

Το πρόγραμμα της αυτόματης προστασίας μπορεί χρησιμοποιηθεί σε οποιοδήποτε εκτελέσιμο πρόγραμμα των Windows όπως αρχεία .EXE, οδηγοί συσκευών .DRV και δυναμικές βιβλιοθήκες .DLL. Εκτός από τα συνηθισμένα εκτελέσιμα προγράμματα, μπορούν να κλειδωθούν και εκτελέσιμα προγράμματα της Visual Basic (τα οποία χρησιμοποιούν διαφορετική δομή του .EXE αρχείου) καθώς και προγράμματα που χρησιμοποιούν τον επεκτατή (extender) 32-bit της Watcom. Το πρόγραμμα HLWCRYPT έχει δοκιμαστεί με επιτυχία στο υποσύστημα Windows 3.1 του OS/2 και στην άλφα έκδοση των επερχομένων Windows 4.0 που είναι γνωστά με την κωδική ονομασία Chicago. Για τα Windows NT έχει αναπτυχθεί ένας ειδικός οδηγός πρόσβασης στο Hardlock EYE αφού ο πυρήνας τους δεν επιτρέπει σε τυχαία προγράμματα απευθείας πρόσβαση σε περιφερειακά του υπολογιστή.

Η προστασία του εκτελέσιμου προγράμματος γίνεται με την πλήρη κωδικοποίηση του προγράμματος έτσι ώστε να μην είναι δυνατή η αντίστροφη συμβολομετάφρασή του (disassembly). O έλεγχος για την ύπαρξη του κλειδιού γίνεται είτε τοπικά, είτε μέσω δικτύου.

Προγραμματιστική υποστήριξη σε Windows

Εκτός από την αυτόματη προστασία εκτελέσιμων αρχείων, είναι δυνατή και η επικοινωνία με το Hardlock EYE μέσα από το πρόγραμμα. Με τον τρόπο αυτό μπορούν να προστατευτούν προγράμματα τα οποία δεν υλοποιούνται με τη μορφή ενός εκτελέσιμου αρχείου, ή να υλοποιηθούν πιο σύνθετοι και εξειδικευμένοι τρόποι προστασίας. Η επικοινωνία με το Hardlock EYE γίνεται μέσω ενός καθορισμένου API (Application Programmer Interface) του οποίου η πρόσβαση γίνεται μέσω στατικά συνδεδεμένων βιβλιοθηκών ή DLL. Η χρήση DLL επιτρέπει την πρόσβαση στο Hardlock EYE οποιασδήποτε γλώσσας επιτρέπει τη σύνδεση με τις δυναμικές βιβλιοθήκες των Windows. Η εικόνα 1 απεικονίζει το πρόγραμμα ελέγχου του API στο οποίο διακρίνονται οι συναρτήσεις του API καθώς και το αποτέλεσμα της κλίσης τους. Με το πρόγραμμα αυτό μπορεί ο προγραμματιστής να εξοικειωθεί και να πειραματιστεί με τη χρήση του API.

Εικόνα 1: Το πρόγραμμα ελέγχου του Hardlock API
Ενα τυπικό παράδειγμα χρήσης του API μέσα από τη Visual Basic βλέπουμε στις εικόνες 2-4. Η εικόνα 2 περιέχει τις τυπικές δηλώσεις για τη σύνδεση της βιβλιοθήκης DLL με το πρόγραμμα, η εικόνα 3 ένα κουτί διαλόγου που παρουσιάζει τα χαρακτηριστικά του Hardlock EYE και η εικόνα 4 ένα τυπικό παράδειγμα κώδικα που αντιστοιχεί σε ένα από τα κουμπιά της εικόνας 3.

Εικόνα 2: Δηλώσεις για τις συναρτήσεις του API από τη Visual Basic

Εικόνα 3: Παράδειγμα προγράμματος ελέγχου του κλειδιού με Visual Basic

Εικόνα 4: Κώδικας ελέγχου του κλειδιού σε Visual Basic
Μερικά από τα συστήματα ανάπτυξης εφαρμογών Windows που υποστηρίζονται είναι η γλώσσα C με τους διερμηνευτές Borland, Microsoft και Watcom, η Borland Pascal, η βάση δεδομένων FoxPro, οι επεκτάσεις του AutoCAD για Windows με το διερμηνευτή της Watcom C και φυσικά οποιοδήποτε σύστημα μπορεί να καλεί βιβλιοθήκες DLL (Access, Excel, Toolbook κ.λπ.)

Εικόνα 5: Κώδικας ελέγχου του κλειδιού σε FoxPro

Βλέπουμε συμπερασματικά πως το Hardlock EYE είναι ένα εργαλείο που επιτρέπει την προστασία από παράνομη αντιγραφή ενός μεγάλου εύρους προγραμμάτων που τρέχουν κάτω από Windows. Η προστασία αυτή μπορεί να γίνει σε τοπικό επίπεδο, ή σε επίπεδο δικτύου.


(C) Copyright 1993-97 Διομήδης Σπινέλλης. Επιτρέπεται η ελεύθερη ανάγνωση από browsers του WWW και παρόμοια προγράμματα. Με την επιφύλαξη κάθε άλλου δικαιώματος.