kagelos Δημοσ. 23 Αυγούστου 2012 Δημοσ. 23 Αυγούστου 2012 Έχω φτιάξει μια desktop εφαρμογή σε C# .Net και ο πελάτης σκοπεύει να την εγκαταστήσει σε ένα εργαστήριο εκπαιδευτικού οργανισμού. Θα ήθελε αφενός να είναι σχετικά δύσκολο να αντιγράψει κανείς το πρόγραμμα σε κάποιον άλλο υπολογιστή και αφετέρου να μην είναι και διαθέσιμος απευθείας ο κώδικας με εργαλεία τύπου Reflector. Λέγοντας "σχετικά δύσκολο", εννοώ πως για την συγκεκριμένη εγκατάσταση δεν απαιτείται και το απολύτως καλύτερο κλείδωμα, η εφαρμογή δεν θα φτάσει (σε αυτή τη φάση / έκδοση) στα χέρια αποφασισμένων crackers. Συνεπώς προτείνετε αγορά κάποιου πακέτου για αυτό το σκοπό ή την υλοποίηση κάποιας απλοϊκής τεχνικής κλειδώματος μαζί με obfuscation;
Directx Δημοσ. 23 Αυγούστου 2012 Δημοσ. 23 Αυγούστου 2012 Πριν μερικά χρόνια είχα δοκιμάσει την τότε ελεύθερη έκδοση (τώρα είναι εμπορικό πακέτο) του Eazfuscator.NET και μου είχε αφήσει καλές εντυπώσεις (.NET 3.5/C#). Όσον αφορά το κλείδωμα.. θα μπορούσες να δέσεις το λογισμικό σου με ένα Product Key που θα προερχόταν κατά το ήμισυ από το hardware (βλ. WMI) ή software του Η/Υ και το υπόλοιπο από τα στοιχεία του πελάτη (αυτά σε .NET είναι πολύ εύκολο να γραφούν). 1
kagelos Δημοσ. 23 Αυγούστου 2012 Μέλος Δημοσ. 23 Αυγούστου 2012 Για την τρέχουσα φάση το Eazfuscator είναι λίγο ακριβό. Το πρόγραμμα δεν θα πουληθεί, απλά θα παρουσιαστεί και θα εγκατασταθεί σε μερικούς υπολογιστές για αξιολόγηση. Ας πούμε ότι το Dotfuscator community edition είναι αρκετό. Η προσέγγιση με το hardware / client info key θα μπορούσε να γίνει με hash; Θα μπορούσε το πρόγραμμα να διαβάζει π.χ. τον σειριακό από τον σκληρό δίσκο και σε συνδυασμό με το όνομα του πελάτη να παράγει ένα hash, το οποίο τελικά θα το συγκρίνει με ένα κλειδί που θα εισάγει ο χρήστης;
nilosgr Δημοσ. 23 Αυγούστου 2012 Δημοσ. 23 Αυγούστου 2012 Πριν μερικά χρόνια είχα δοκιμάσει την τότε ελεύθερη έκδοση (τώρα είναι εμπορικό πακέτο) του Eazfuscator.NET και μου είχε αφήσει καλές εντυπώσεις (.NET 3.5/C#). Όσον αφορά το κλείδωμα.. θα μπορούσες να δέσεις το λογισμικό σου με ένα Product Key που θα προερχόταν κατά το ήμισυ από το hardware (βλ. WMI) ή software του Η/Υ και το υπόλοιπο από τα στοιχεία του πελάτη (αυτά σε .NET είναι πολύ εύκολο να γραφούν). ναι, κατι τετοιο. Και να γρψεις και κανα-δυο πληροφοεις; στη registry, καθως και σε local αρχεια, ωστα να μην κανει πχ την εγκατασταση σε εξωτερικο μεσο και την χρησημοποιει ως portable
kagelos Δημοσ. 23 Αυγούστου 2012 Μέλος Δημοσ. 23 Αυγούστου 2012 Βρήκα μια πολύ Site: ενδιαφέρουσα προσέγγιση . Βασικά λέει να κάνεις τα εξής: 1) Obfuscate τον κώδικα 2) Δημιουργείς ένα ζεύγος private / public κλειδιών. Γράφεις ένα απλό text αρχείο με τα στοιχεία του πελάτη (και πιθανόν του hardware). Το υπογράφεις ψηφιακά με το private κλειδί. Το πρόγραμμα έχει μέσα το public κλειδί και έτσι πιστοποιεί ότι το plain text αρχείο είναι γνήσιο. 3) Να κάνεις sign το assembly σου ώστε να ξέρεις ότι το πρόγραμμα δεν έχει μεταβληθεί - και συνεπώς δεν έχει πειράξει κάποιος το public key. Νομίζω ότι τα μέτρα αυτά είναι αρκετά για μια απλή κατάσταση.
NikosKallithea Δημοσ. 23 Αυγούστου 2012 Δημοσ. 23 Αυγούστου 2012 Ο καλύτερος τρόπος για να κλειδώσεις ενα πρόγραμμα πέραν του hardware και του κλειδιού, ειναι αν εχεις κάποιον server στο internet το πρόγραμμα να ανταλλάσσει με αυτόν τα κλειδιά. Οποτε ανα πασα στιγμη μπορείς και να μπλοκάρεις το συγκεκριμένο πρόγραμμα ή χρήστη.
kagelos Δημοσ. 23 Αυγούστου 2012 Μέλος Δημοσ. 23 Αυγούστου 2012 Και πάλι κάποιος μπορεί να το "πειράξει" ώστε να μην επικοινωνεί με το internet. Εφόσον δεν πρόκειται για web application, δεν νομίζω ότι υπάρχει λύση 100%. Ο αποφασισμένος και γνώστης τελικά θα το σπάσει.
NikosKallithea Δημοσ. 23 Αυγούστου 2012 Δημοσ. 23 Αυγούστου 2012 Και πάλι κάποιος μπορεί να το "πειράξει" ώστε να μην επικοινωνεί με το internet. Εφόσον δεν πρόκειται για web application, δεν νομίζω ότι υπάρχει λύση 100%. Ο αποφασισμένος και γνώστης τελικά θα το σπάσει. Αν δεν επικοινωνεί με το internet ή τον server απλα δεν δουλεύει,το εχω κανει και προσφέρει 100% προστασία για τα πνευματικά σου δικαιώματα.
IHateLove Δημοσ. 23 Αυγούστου 2012 Δημοσ. 23 Αυγούστου 2012 Για την τρέχουσα φάση το Eazfuscator είναι λίγο ακριβό. Το πρόγραμμα δεν θα πουληθεί, απλά θα παρουσιαστεί και θα εγκατασταθεί σε μερικούς υπολογιστές για αξιολόγηση. Ας πούμε ότι το Dotfuscator community edition είναι αρκετό. Η προσέγγιση με το hardware / client info key θα μπορούσε να γίνει με hash; Θα μπορούσε το πρόγραμμα να διαβάζει π.χ. τον σειριακό από τον σκληρό δίσκο και σε συνδυασμό με το όνομα του πελάτη να παράγει ένα hash, το οποίο τελικά θα το συγκρίνει με ένα κλειδί που θα εισάγει ο χρήστης; θες απλά να μην τρέχει σε άλλον υπολογιστή ή να μην μπορούν να δουν τον κώδικα; γιατί αυτό που λες για Hardware key Protection είναι για να το κλειδώσεις ώστε να μην τρέχει σε οποιονδήποτε αλλά και πάλι από την ώρα που είναι ορατός ο κώδικας μην χάνεις τον χρόνο σου. Γιατί δεν το γράφεις σε C/C++; αν ζορίζεσαι τότε υπάρχει το QT(κάπως έτσι) με αρκετά έτοιμα πράγματα.
kagelos Δημοσ. 23 Αυγούστου 2012 Μέλος Δημοσ. 23 Αυγούστου 2012 Μπορείς να μου πεις περίπου πως γίνεται αυτό; Εννοώ πως κάποιος μπορεί να επέμβει στο εκτελέσιμο αρχείο και να αφαιρέσει τη ρουτίνα που τσεκάρει τον σέρβερ (patching). Συνεπώς το πρόγραμμα θα λειτουργεί και δεν θα ελέγχει τίποτα. Φυσικά το ίδιο μπορεί να γίνει με οποιαδήποτε μέθοδο κλειδώματος.
IHateLove Δημοσ. 23 Αυγούστου 2012 Δημοσ. 23 Αυγούστου 2012 Μπορείς να μου πεις περίπου πως γίνεται αυτό; Εννοώ πως κάποιος μπορεί να επέμβει στο εκτελέσιμο αρχείο και να αφαιρέσει τη ρουτίνα που τσεκάρει τον σέρβερ (patching). φυσικά, και φαντάσου τα προγράμματα όπως NET Reflector στο κάνουν Export κατευθείαν το Project και γλυτώνεις το Copy/Paste
kagelos Δημοσ. 23 Αυγούστου 2012 Μέλος Δημοσ. 23 Αυγούστου 2012 θες απλά να μην τρέχει σε άλλον υπολογιστή ή να μην μπορούν να δουν τον κώδικα; γιατί αυτό που λες για Hardware key Protection είναι για να το κλειδώσεις ώστε να μην τρέχει σε οποιονδήποτε αλλά και πάλι από την ώρα που είναι ορατός ο κώδικας μην χάνεις τον χρόνο σου. Γιατί δεν το γράφεις σε C/C++; αν ζορίζεσαι τότε υπάρχει το QT(κάπως έτσι) με αρκετά έτοιμα πράγματα. Η εφαρμογή είναι πολύ μεγάλη, θα χρειαζόταν μήνες για να γίνει port σε κάτι άλλο και ούτως η άλλως η επιλογή των τεχνολογιών έγινε συνειδητά. Για την απόκρυψη του κώδικα νομίζω πως το Dotfuscator είναι αρκετό για τώρα. Για την προστασία αντιγραφής σκέφτομαι να προσπαθήσω τη μέθοδο με την ψηφιακή υπογραφή.
IHateLove Δημοσ. 23 Αυγούστου 2012 Δημοσ. 23 Αυγούστου 2012 Η εφαρμογή είναι πολύ μεγάλη, θα χρειαζόταν μήνες για να γίνει port σε κάτι άλλο και ούτως η άλλως η επιλογή των τεχνολογιών έγινε συνειδητά. 1)Για την απόκρυψη του κώδικα νομίζω πως το Dotfuscator είναι αρκετό για τώρα. 2)Για την προστασία αντιγραφής σκέφτομαι να προσπαθήσω τη μέθοδο με την ψηφιακή υπογραφή. Για το πρώτο που είπες μην κοιμάσαι ήσυχος... Για το 2ο, Νομίζω ότι θα μπορούσες να δημιουργήσεις ένα αρχείο-Library(DLL?) σε C++ (μπορείς να ενσωματώσεις κώδικα C σε .ΝΕΤ) Το αρχείο αυτό θα περιέχει τις λειτουργίες για την ταυτοποίηση, θα διαβάζει αρκετά Hardware IDs (Μην βασίζεσαι σε 1) και θα τα στέλνει στον Server σου, θα μπορούσες να έχεις έναν πίνακα που τα αποθηκεύεις αυτά και έχεις ένα πεδίο "Allow" που Bydefault είναι false Το πεδίο αυτό θα το βάζεις εσύ χειροκίνητα, πάρε όλα τα HWID από τους πελάτες σου και κάνε την επαλήθευση στην βάση Το πρόγραμμα όταν πάει να ανοίξει θα συνδεθεί στον Server σου και θα γίνει ένας έλεγχος για το εαν μπορεί να ανοίξει...
Directx Δημοσ. 23 Αυγούστου 2012 Δημοσ. 23 Αυγούστου 2012 Για την τρέχουσα φάση το Eazfuscator είναι λίγο ακριβό. Το πρόγραμμα δεν θα πουληθεί, απλά θα παρουσιαστεί και θα εγκατασταθεί σε μερικούς υπολογιστές για αξιολόγηση. Ας πούμε ότι το Dotfuscator community edition είναι αρκετό. Καταλαβαίνω, απλά θα ήμουν πολύ επιφυλακτικός προς την Community Edition του Dotfuscator αφού την εποχή που είχα ασχοληθεί με αυτό το ζήτημα (VS08), ο Reflector τα κατάφερνε μια χαρά μαζί του . Βέβαια σήμερα μπορεί να έχει βελτιωθεί αρκετά η ασφάλεια που παρέχει και η "Community Edition" (μια δοκιμή με το .NET Reflector θα σε βοηθήσει να καταλήξεις σε ασφαλή συμπεράσματα). Η προσέγγιση με το hardware / client info key θα μπορούσε να γίνει με hash; Θα μπορούσε το πρόγραμμα να διαβάζει π.χ. τον σειριακό από τον σκληρό δίσκο και σε συνδυασμό με το όνομα του πελάτη να παράγει ένα hash, το οποίο τελικά θα το συγκρίνει με ένα κλειδί που θα εισάγει ο χρήστης; Yeap. Υ.Γ. Ότι κλειδώνει - ξεκλειδώνει, αλλά state-of-the-art εργαλεία για τέτοιες δουλειές θα βρεις για native παρά για managed κώδικα (οξύμωρο!)
παπι Δημοσ. 24 Αυγούστου 2012 Δημοσ. 24 Αυγούστου 2012 Για το "μη αντιγραψιμο", αρκει ενα κλειδι στο registry με ονομα πχ installed. Αυτο το κλειδι θα το φτιαχνει ο installer και το προγραμμα απλα θα τσεκαρει αν υπαρχει. Συνηθως τα απλα πραγματα δυσκολα τα βρισκεις (για τον επιορκο κρακερ το λεω) βεβαια μπορεις παιξεις και με hash καποιων δεδομενων αλλα προς θεου οχι bound to hardware, καντο bound to os τα windows εχουν id (product id κατι τετοιο) εχουν user κλπ κλπ. Για το κειδι της αδειας μπορεις να εφαρμοσεις υπαρχουσες τεχνικες. Αλλα αποψη μου μην στεκεσαι για πολυ εκει, δες τον νομο 2121 του 93 (2121/93) διαβασε το καμια 20 φορες (δυστυχος ειναι γελοιος επειδη μπηκε λογο εε δλδ μια ξεπετα, τεσπα δες τις τελευταιες τροποποιησεις μπας και βγαλεις κανα συμπερασμα) και γραψε δικο σου license. Αν ο πελατης παραβιασει την πνευματικη σου ιδιοκτησια τοτε απλα επικαλεισαι τους νομους.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα