Λοιπόν, πρέπει να γίνει μία διάκριση προβλημάτων εδώ:
άλλο είναι το πρόβλημα με τους decompilers και
άλλο είναι το πρόβλημα της πειρατείας και του κλειδώματος.
Η αρχική σου ερώτηση είναι για τους decompilers. Αν όντως αυτός είναι ο προβληματισμός σου (το να μπορεί, δηλαδή, να δει κάποιος τον κώδικά σου), τότε και το εργαλείο που κοιτάς είναι λάθος, αλλά και όλη η συζήτηση έχει ξεφύγει.
Η αρχική απάντηση του cgeo είναι σωστή - πάντα θα μπορεί να γίνει decompile ο κώδικάς σου, και αυτό επειδή οι .NET compilers παράγουν IL (intermediate language). Το ίδιο πρόβλημα (by the way) έχει και η Java.
Όμως, υπάρχει λύση στο πρόβλημά σου, και μάλιστα μία απλή έκδοσή της έρχεται μαζί με το Visual Studio .NET και λέγεται
dotfuscator. Η τεχνική λέγεται obfuscation και κάνει το εξής (θα δώσω ένα απλό παράδειγμα για να καταλάβεις):
Έχω το:
dim strFirstName as String
dim strLastName as String
for i as integer = 1 to 10
'Do something
next i
Μετά το obsuscation θα γίνει:
dim a3244532d2 as String
dim f6382hrk239 as String
for g3k21 as integer = 232 to 84422 step 432
'Do something
g3k21 = (g3k21 + 43222) / f8372
next g3k21 (στο περίπου τώρα - την ιδέα να πιάσεις!)
Έτσι, αυτοί που θα την κάνουν decompile, να δουν έναν κώδικα τόσο μπερδεμένο, που δεν θα μπορούν να βγάλουν άκρη. Φυσικά, το πρόγραμμά σου θα παίζει κανονικά!
Υπάρχουν πολλά resources για obfuscation, και η
Desaware έχει ένα e-book για αυτό το θέμα (μαζί με το e-book σου δίνουν και εργαλείο).
Όσο για το licensing... συμφωνώ με τους υπόλοιπους - χάνεις περισσότερα από όσα κερδίζεις με το κλείδωμα, και είναι λίγες (αν υπάρχουν) οι περιπτώσεις που παίζει σωστά αυτό (κυρίως εφαρμογές που έχουν και κάποιο subscription που ενημερώνεται online, κλπ).
Patrick