Giusto, sto parlando del codice di convalida della licenza in un'applicazione desktop, ad es. un metodo bool ValidateLicense(string licenseCode)
. Ovviamente, qualsiasi schema di protezione può essere decodificato da un cracker esperto e determinato. Tuttavia, vorrei evitare che chiunque abbia qualche conoscenza di programmazione di base possa utilizzare Reflector per creare un keygen in un paio di minuti.Come mantenere la logica del programma .NET (ragionevolmente) segreta?
possibili approcci
Oscurazione. La mia comprensione è che offuscare causa un overhead delle prestazioni e può ostacolare il debug (legittimo). Quindi ci sono strumenti che consentono di offuscare solo i metodi selezionati?
Spostare il metodo sull'assembly di ngen o sulla DLL non gestita. Ma non è questo un invito a sostituire semplicemente la DLL? Qualche idea su come prevenirlo (leggi: renderlo un po 'più difficile per un aggressore)?
Altro?
PS: La domanda è ovviamente legato alla Protect .NET code from reverse engineering? cercando di mettere i pensieri da lì a praticare
UPDATE
A 1. Un primo passo offuscamento sarebbe sicuramente per rinominare il metodo di convalida. (Grazie, Jonathan)
A 2. Supponendo che l'applicazione utilizzi i metodi API Win32, è possibile reindirizzare le chiamate attraverso una DLL non gestita rendendola così parte integrante dell'applicazione. Giocherellare con le firme del metodo (ad esempio cambiare nome, parametri di swap) renderebbe questo meno ovvio. Pensi che gli inconvenienti innati siano giustificati?
A 3. Non distribuire il metodo di convalida appartiene qui. Conservalo sul tuo server e chiama da remoto, cioè usa la convalida online (Grazie, David Hedlund)
Abbiamo deciso di non offuscare e utilizzare un semplice meccanismo di chiave di licenza, insieme a un'attivazione online. Naturalmente questo può essere "incrinato" (e infatti lo era). Il nostro calcolo è il seguente: chi usa la versione pirata non avrebbe mai acquistato lo strumento, in più otteniamo una maggiore distribuzione del nostro software. Non perfetto, ma abbastanza buono rispetto allo sforzo di proteggere il software con la "protezione" (molto migliore) di scrivere buoni strumenti. –
Utilizzare una combinazione di VM oscura, convalida in linea e utilizzando un codice VM randomizzato fornito da un servizio di convalida in linea per alcune parti essenziali (ma non essenziali per le prestazioni) del codice. O addirittura spostare parti della funzionalità essenziale (non solo la convalida) in un servizio online. –