Come generare e convalidare una chiave di licenza software?


236

Attualmente sono coinvolto nello sviluppo di un prodotto (sviluppato in C #) che sarà disponibile per il download e l'installazione gratuitamente ma in una versione molto limitata. Per accedere a tutte le funzionalità l'utente deve pagare una tassa di licenza e ricevere una chiave. Quella chiave verrà quindi inserita nell'applicazione per "sbloccare" la versione completa.

Dato che usare una chiave di licenza del genere è un po 'normale, mi chiedo:

  1. Come si risolve di solito?
  2. Come posso generare la chiave e come può essere convalidata dall'applicazione?
  3. Come posso anche evitare che una chiave venga pubblicata su Internet e utilizzata da altri che non hanno pagato la licenza (una chiave che in pratica non è "loro").

Immagino che dovrei anche legare la chiave alla versione dell'applicazione in qualche modo, quindi sarà possibile addebitare nuove chiavi nelle versioni delle funzionalità.

Qualcos'altro a cui dovrei pensare in questo scenario?

Risposte:


127

Avvertenza: non è possibile impedire agli utenti di piratare, ma solo rendere più facile per gli utenti onesti fare la cosa giusta.

Supponendo che non desideri fare una build speciale per ciascun utente, quindi:

  • Genera una chiave segreta per il prodotto
  • Prendi il nome dell'utente
  • Concatena il nome utente, la chiave segreta e l'hash con (ad esempio) SHA1
  • Scompatta l'hash SHA1 come stringa alfanumerica. Questa è la "Product Key" del singolo utente
  • All'interno del programma, esegui lo stesso hash e confrontalo con il codice Product Key. Se uguale, OK.

Ma, ripeto: questo non impedisce la pirateria


Di recente ho letto che questo approccio non è crittograficamente molto valido. Ma questa soluzione è già debole ( poiché il software stesso deve includere la chiave segreta da qualche parte ), quindi non credo che questa scoperta invalidi la soluzione fino in fondo.

Ho pensato che avrei dovuto menzionarlo, comunque; se hai intenzione di derivare qualcos'altro da questo, fai attenzione.


13
se il programma include la chiave segreta (come suggerito dai passaggi precedenti), decifrarla è banale
Steven A. Lowe

2
modificato per essere più ovvio; non posso enfatizzare eccessivamente qualcosa di così fondamentale ;-)
Steven A. Lowe il

23
Utilizzare un metodo crittografico asimmetrico (come RSA) per generare e decodificare la chiave del prodotto per evitare di incorporare il segreto nel codice.
Amir Moghimi,

6
Penso che quando qualcuno sta hackerando il tuo codice (possibilmente a livello di assembly) per trovare la tua chiave segreta, probabilmente sono anche al livello in cui possono semplicemente bypassare completamente i tuoi controlli. Non credo che ci sia un metodo di registrazione così sicuro da poter sopravvivere a un buon hacker che esegue il programma localmente. Come diceva il commento originale, si tratta davvero di tutto ciò che lo rende un passo più difficile della semplice copia del file. Molti giochi in questi giorni hanno rinunciato alla protezione della copia e portano semplicemente il contenuto del gioco online, nel qual caso il codice è nelle mani dell'hacker.
JamieB,

1
È comune includere restrizioni nella chiave di licenza? Ad esempio, limiti di tempo, conteggio degli utenti simultanei, moduli da installare, ecc.?
Carlo,

97

Esistono molti modi per generare le chiavi di licenza, ma pochissimi di questi sono veramente sicuri. Ed è un peccato, perché per le aziende, le chiavi di licenza hanno quasi lo stesso valore del denaro reale.

Idealmente, le chiavi di licenza dovrebbero avere le seguenti proprietà:

  1. Solo la tua azienda dovrebbe essere in grado di generare chiavi di licenza per i tuoi prodotti, anche se qualcuno decodifica completamente i tuoi prodotti (cosa che succederà, parlo per esperienza). Offuscare l'algoritmo o nascondere una chiave di crittografia all'interno del software è davvero fuori discussione se si prende sul serio il controllo delle licenze. Se il tuo prodotto ha successo, qualcuno produrrà un generatore di chiavi nel giro di pochi giorni dal rilascio.

  2. Una chiave di licenza dovrebbe essere utilizzabile su un solo computer (o almeno dovresti essere in grado di controllarlo molto strettamente)

  3. Una chiave di licenza deve essere breve e facile da digitare o dettare al telefono. Non vuoi che tutti i clienti chiamino il supporto tecnico perché non capiscono se la chiave contiene una "l" o un "1". Il tuo dipartimento di supporto ti ringrazierà per questo e avrai costi più bassi in questo settore.

Quindi, come risolvi queste sfide?

  1. La risposta è semplice ma tecnicamente impegnativa: firme digitali che utilizzano la crittografia a chiave pubblica. Le tue chiavi di licenza dovrebbero infatti essere firmate "documenti", contenenti alcuni dati utili, firmate con la chiave privata della tua azienda. Le firme dovrebbero essere parte della chiave di licenza. Il prodotto deve convalidare le chiavi di licenza con la chiave pubblica corrispondente. In questo modo, anche se qualcuno ha pieno accesso alla logica del tuo prodotto, non può generare chiavi di licenza perché non ha la chiave privata. Una chiave di licenza sarebbe simile a questa: BASE32 (CONCAT (DATA, PRIVATE_KEY_ENCRYPTED (HASH (DATA)))) La sfida più grande qui è che i classici algoritmi a chiave pubblica hanno dimensioni di firma di grandi dimensioni. RSA512 ha una firma a 1024 bit. Non vuoi che le tue chiavi di licenza contengano centinaia di caratteri. Uno degli approcci più potenti è utilizzare la crittografia a curva ellittica (con attente implementazioni per evitare i brevetti esistenti). Le chiavi ECC sono 6 volte più corte delle chiavi RSA, per la stessa forza. Puoi ridurre ulteriormente le dimensioni della firma usando algoritmi come l'algoritmo di firma digitale Schnorr (brevetto scaduto nel 2008 - buono :))

  2. Ciò è possibile con l'attivazione del prodotto (Windows ne è un buon esempio). Fondamentalmente, per un cliente con una chiave di licenza valida, è necessario generare alcuni "dati di attivazione" che sono un messaggio firmato che incorpora l'ID hardware del computer come dati firmati. Questo di solito viene eseguito su Internet, ma solo UNA VOLTA: il prodotto invia la chiave di licenza e l'id hardware del computer a un server di attivazione e il server di attivazione restituisce il messaggio firmato (che può anche essere reso breve e facile da dettare sul Telefono). Da quel momento in poi, il prodotto non controlla la chiave di licenza all'avvio, ma i dati di attivazione, che richiedono che il computer sia lo stesso per convalidare (altrimenti, i DATI sarebbero diversi e la firma digitale non verificherebbe).

  3. Bene, basta eliminare caratteri ridondanti come "1", "l", "0", "o" dai tasti. Dividi la stringa della chiave di licenza in gruppi di caratteri.


8
Non potrebbero semplicemente modificare il software aggiungendo / rimuovendo il codice in modo tale che il controllo venga completamente ignorato?
Pacerier,

La risposta al numero 1 richiede essenzialmente un servizio di attivazione / disattivazione online?
Dan W,

2
Vorrei sottolineare quanto questa risposta sia di gran lunga superiore all'altra cosa hash.
Erik Aronesty,

1
@Pacerier Ci sono molte cose da cui le chiavi di licenza proteggono le aziende di software. La modifica dell'exe non è una di queste.
Erik Aronesty,

1
Vale la pena notare che anche con la crittografia asimmetrica chiavi private / pubbliche, è ancora possibile generare licenze false, semplicemente sostituendo la chiave pubblica fornita nel software con un'altra chiave pubblica e utilizzando la chiave privata corrispondente per firmare la licenza falsa. Questo è il motivo per cui abbiamo e abbiamo bisogno delle autorità di certificazione attendibili BTW, che associano le chiavi pubbliche alle identità. Quindi, sebbene ciò possa aggiungere un altro telaio per saltare, non garantisce da solo il n. 1.
Saeb Amini

76

Risposta semplice - Non importa quale schema usi, può essere decifrato.

Non punire i clienti onesti con un sistema pensato per prevenire gli hacker, poiché gli hacker lo faranno a pezzi.

Un semplice codice hash legato alla loro e-mail o simili è probabilmente abbastanza buono. Gli ID basati su hardware diventano sempre un problema quando le persone devono reinstallare o aggiornare l'hardware.

Buona discussione sulla questione: http://discuss.joelonsoftware.com/default.asp?biz.5.82298.34


2
concordato, non vuoi turbare gli utenti che stanno effettivamente acquistando il tuo prodotto! (attenzione a $, mela, ecc ...)
Jason

2
MS, Apple, ecc. Possono cavarsela in quanto sono grandi e forniscono prodotti chiave che è difficile da trovare altrove o che hanno una grande ombra di mercato che possono usare per forzare le persone. Il piccolo sviluppatore non può.
goletta

1
uno schema di firma delle chiavi pub / priv non può essere "crackato" per produrre nuove chiavi valide per gli utenti che vogliono eseguire codice firmato scaricato dal sito degli editori, anziché software crackato. mentre uno schema hash / simmetrico può essere decifrato per produrre nuove chiavi di licenza valide indistinguibili da quelle non valide. Differenza enorme.
Erik Aronesty,

Collegamento interrotto ....
stigzler

56

Quando si genera la chiave, non dimenticare di concatenare la versione e costruire il numero sulla stringa su cui si calcola l'hash. In questo modo non ci sarà una sola chiave che sblocca tutto ciò che hai mai rilasciato.

Dopo aver trovato alcune chiavi o patch fluttuanti in astalavista.box.sk saprai che sei riuscito a creare qualcosa di abbastanza popolare che qualcuno si è preso la briga di rompere. Rallegrarsi!


8
"non dimenticare di concatenare la versione e costruire il numero con la stringa su cui calcoli l'hash" - ma questo non interromperà la chiave quando l'utente aggiorna a una versione di patch minore?
Thom

1
@thomthom Che ne dici di associare una versione massima a una chiave? L'idea della versione in sé è plausibile e aggiunge più sicurezza
Marvin Thobejane il

@MarvinThobejane per associare una ver massima puoi firmare la ver massima consentita e avere il codice iterare la sua versione un po '. ma no> = ops consentito in sigs.
Erik Aronesty,

22

Oltre a quanto già affermato ....

Qualsiasi utilizzo delle applicazioni .NET è intrinsecamente fragile a causa di problemi di linguaggio intermedi. Un semplice disassemblaggio del codice .NET aprirà il tuo prodotto a chiunque. A quel punto possono facilmente aggirare il codice di licenza.

Non è nemmeno più possibile utilizzare i valori hardware per creare una chiave. Le macchine virtuali ora consentono a qualcuno di creare un'immagine di una macchina "autorizzata" ed eseguirla su qualsiasi piattaforma che scelgono.

Se è un software costoso ci sono altre soluzioni. In caso contrario, rendilo abbastanza difficile per l'hacker occasionale. E accetta il fatto che alla fine ci saranno copie senza licenza.

Se il tuo prodotto è complicato, i problemi di supporto inerenti creeranno una certa protezione per te.


9
+1 per prevenire la debolezza dei valori hardware a causa delle macchine virtuali.
Rubens Mariuzzo,

3
Ecco a cosa serve la denominazione forte per la firma .NET e Authenticode per PE. Se qualcuno ha decompilato, modificato e ricostruito la tua libreria non verrà firmata e l'applicazione semplicemente non verrà eseguita. La macchina virtuale .NET non lo consentirà.
Stephen Tunney,

2
La firma serve per convalidare l'origine del programma che eseguirai. Se l'utente non si preoccupa dell'origine perché sa che è stato modificato e rotto, il cracker eliminerebbe la firma o addirittura la firmerebbe con la propria firma. La firma non interrompe la miscelazione di assiemi affidabili con assiemi non affidabili.
jesusduarte,

un'app mobile può essere utilizzata come chiave hardware truccata dalla giuria per software costoso .... basta pagare usando l'app e incorporare una chiave di firma nell'elemento sicuro dell'app. quindi puoi attivare utilizzando l'app desktop + ... disattivando l'altro desktop. la raccolta di alcune aree di codice di sezione critica nell'app e / o nei servizi di calcolo omomorfo online può aiutare a prevenire la decompilazione banale.
Erik Aronesty,

12

Il motore C # / .NET che utilizziamo per la generazione di chiavi di licenza è ora gestito come open source:

https://github.com/appsoftware/.NET-Licence-Key-Generator .

È basato su un sistema di "Verifica parziale della chiave" che significa che solo un sottoinsieme della chiave che usi per generare la chiave deve essere compilato nel tuo distribuibile. Crea le chiavi tu stesso, quindi l'implementazione della licenza è unica per il tuo software.

Come detto sopra, se il tuo codice può essere decompilato, è relativamente facile aggirare la maggior parte dei sistemi di licenza.


Saresti disposto a fare un tutorial per l'utilizzo di questo prodotto? Ho trovato la loro wiki un po 'carente.
Anthony Ruffino,

Il progetto ora è stato open source su GitHub se questo aiuta (risposta modificata con link).
gb2d,

11

Sono uno degli sviluppatori dietro la piattaforma di licenze software Cryptolens e lavoro su sistemi di licenza dall'età di 14 anni. In questa risposta, ho incluso alcuni suggerimenti basati sull'esperienza acquisita negli anni.

Il modo migliore per risolvere questo problema è impostare un server di chiavi di licenza che ogni istanza dell'applicazione chiamerà per verificare una chiave di licenza.

Vantaggi di un server chiave di licenza

I vantaggi con un server chiave di licenza sono che:

  1. puoi sempre aggiornare o bloccare una chiave di licenza con effetto immediato.
  2. ogni chiave di licenza può essere bloccata su un determinato numero di macchine (questo aiuta a impedire agli utenti di pubblicare la chiave di licenza online per essere utilizzata da altri).

considerazioni

Sebbene la verifica delle licenze online ti offra un maggiore controllo su ogni istanza dell'applicazione, la connessione Internet non è sempre presente (soprattutto se hai come target le aziende più grandi), quindi abbiamo bisogno di un altro modo per eseguire la verifica della chiave di licenza.

La soluzione è firmare sempre la risposta della chiave di licenza dal server utilizzando un sistema crittografico a chiave pubblica come RSA o ECC (possibilmente migliore se si prevede di eseguire su sistemi integrati). L'applicazione deve avere solo la chiave pubblica per verificare la risposta della chiave di licenza.

Quindi, nel caso in cui non ci sia una connessione Internet, è possibile utilizzare la risposta della chiave di licenza precedente. Assicurati di memorizzare sia la data che l' identificativo della macchina nella risposta e controlla che non sia troppo vecchio (ad es. Consenti agli utenti di rimanere offline per un massimo di 30 giorni, ecc.) E che la risposta della chiave di licenza appartenga al dispositivo corretto.

Nota che devi sempre controllare il certificato di risposta della chiave di licenza, anche se sei connesso a Internet), al fine di assicurarti che non sia stato modificato da quando ha lasciato il server (questo deve ancora essere fatto anche se l'API per il server chiave di licenza utilizza https)

Protezione di algoritmi segreti

La maggior parte delle applicazioni .NET può essere ingegnerizzata abbastanza facilmente (esiste sia un diassemblatore fornito da Microsoft per ottenere il codice IL che alcuni prodotti commerciali possono persino recuperare il codice sorgente in es. C #). Ovviamente, puoi sempre offuscare il codice, ma non è mai sicuro al 100%.

Nella maggior parte dei casi, lo scopo di qualsiasi soluzione di licenza software è di aiutare le persone oneste a essere oneste (vale a dire che gli utenti onesti che sono disposti a pagare non dimenticano di pagare dopo la scadenza di una prova, ecc.).

Tuttavia, potresti avere ancora del codice che non vuoi assolutamente divulgare al pubblico (ad esempio un algoritmo per prevedere i prezzi delle azioni, ecc.). In questo caso, l'unico modo per procedere è creare un endpoint API che l'applicazione chiamerà ogni volta che il metodo deve essere eseguito. Richiede una connessione a Internet ma garantisce che il codice segreto non venga mai eseguito dal computer client.

Implementazione

Se non vuoi implementare tutto da solo, ti consiglio di dare un'occhiata a questo tutorial (parte di Cryptolens )


Una domanda su come limitare la chiave di licenza salvata a non essere troppo vecchia: dal momento che il PC potrebbe non essere collegato a Internet, la loro data e ora possono sempre essere cambiate per rimanere nella stessa data valida?
Amir Mahdi Nassiri,

Gli utenti non possono ignorare il server delle licenze online definendo un host di loopback in Windows? Ho visto molte applicazioni piratate in quel modo, Resharper e Matlab sono quelle che posso ricordare.
Amir Mahdi Nassiri,

1
@AmirMahdiNassiri Per la domanda 1: se il PC è permanentemente offline, è possibile utilizzare un dongle orologio in tempo reale (RTC) come fonte attendibile per il tempo. Per la domanda 2: poiché la risposta è firmata con la chiave privata del fornitore (e verificata con la chiave pubblica all'interno dell'applicazione), un avversario dovrebbe firmare nuovamente il file senza conoscere la chiave privata, che al momento della scrittura è impossibile con chiavi RSA a 2048 bit.
Artem

7

Ho usato Crypkey in passato. È uno dei tanti disponibili.

È possibile proteggere il software fino a un certo punto con qualsiasi schema di licenza.


6

Non so quanto tu voglia ottenere elaborato

ma credo che .net possa accedere al numero di serie del disco rigido.

potresti avere il programma che ti invia questo e qualcosa del genere (come nome utente e indirizzo mac del nic)

si calcola un codice basato su quello e si invia via e-mail la chiave.

impediranno loro di cambiare macchina dopo aver ricevuto la chiave.


4
E impedire loro di sostituire un HD morto tra altre spine, portando alla frustrazione. Purtroppo non esiste una risposta semplice, è necessario bilanciare la fiducia con i meccanismi di licenza di base.
goletta

Ha lavorato per molti anni come ingegnere del software con un prodotto che utilizzava il numero di serie da hd, era completamente insicuro per quelli che sapevano aggiornarlo.
oden

Stavo sottintendendo di usare questo numero con altre cose (indirizzo mac, FQDN) forse gettandoli tutti in un hash. Il punto è rendere leggermente più difficile lo spoofing di tutti questi dati piuttosto che invertire il software in primo luogo e rimuovere il segno di spunta perché è sempre un'opzione.
Crash893

4

L'unico modo per fare tutto ciò che hai richiesto è richiedere un accesso a Internet e la verifica con un server. L'applicazione deve accedere al server con la chiave, quindi è necessario memorizzare i dettagli della sessione, come l'indirizzo IP. Ciò impedirà l'utilizzo della chiave su più macchine diverse. Questo di solito non è molto popolare tra gli utenti dell'applicazione e, a meno che non si tratti di un'applicazione molto costosa e complicata, non ne vale la pena.

Potresti avere solo una chiave di licenza per l'applicazione, quindi controllare sul lato client se la chiave è buona, ma è facile distribuire questa chiave ad altri utenti e con un decompilatore è possibile generare nuove chiavi.


5
ho lavorato presso un'azienda che utilizzava un sistema di licenze basato su Internet. ogni volta che il programma è stato avviato online per convalidare, penso che la società abbia speso più $$ in infrastrutture e sviluppatori per la loro soluzione di licenza di quanto avrebbero perso a causa della pirateria (erano un prodotto di nicchia).
Jason

3
inoltre, i costi del supporto tecnico erano enormi. molte, MOLTE volte un utente avrebbe legittimamente usato un altro computer per provare a eseguire il software, ma l'hash era diverso, il che ha portato a enormi quantità di supporto tecnico. in breve, ciò che ha detto goletta: non punire gli utenti onesti.
Jason

1
Sembra che la tua azienda sia stata un po 'troppo zelante, richiedendo ogni volta la convalida all'avvio.
jugg1es,

@Jason, Beh, dovrebbero aumentare il prezzo del prodotto.
Pacerier,

1
@Pacerier: risposta errata.
Corse di leggerezza in orbita il

4

Ho implementato l'attivazione unica basata su Internet sul software della mia azienda (C # .net) che richiede una chiave di licenza che si riferisce a una licenza memorizzata nel database del server. Il software colpisce il server con la chiave e riceve le informazioni sulla licenza che vengono poi crittografate localmente utilizzando una chiave RSA generata da alcune variabili (una combinazione di CPUID e altre cose che non cambieranno spesso) sul computer client e quindi le memorizza in il registro.

Richiede un po 'di codifica lato server, ma ha funzionato davvero bene per noi e sono stato in grado di utilizzare lo stesso sistema quando ci siamo estesi al software basato su browser. Fornisce inoltre agli addetti alle vendite ottime informazioni su chi, dove e quando viene utilizzato il software. Qualsiasi sistema di licenze che viene gestito solo localmente è completamente vulnerabile allo sfruttamento, in particolare con la riflessione in .NET . Ma, come hanno detto tutti gli altri, nessun sistema è completamente sicuro.

A mio avviso, se non si utilizza la licenza basata sul Web, non ha alcun senso proteggere il software. Con il mal di testa che può causare DRM, non è giusto che gli utenti che hanno effettivamente pagato soffrano.


1
Ma il problema principale con le licenze Web è che il servizio di licenze diventa un obiettivo primario per gli attacchi DDoS. Che paralizza il servizio o gonfia i costi del cloud.
afk5min,

4
È come dire che non ha senso avere un sito Web perché è vulnerabile agli attacchi DDoS ...
jugg1es,

@ jugg1es Da nessuna parte nel suo commento ha detto "non ha senso". Ha semplicemente sottolineato il fatto che è una vulnerabilità che dovrebbe essere considerata.
Dan Bechard,

E i controlli possono ancora essere rimossi nel client. Nessun controllo, nessuna licenza
basata sul

1
Intendi il codice effettivo dell'applicazione con "informazioni richieste"? Codice che sarebbe necessario per eseguire l'app? Altrimenti, penso che provocherà comunque la chiamata dei metodi di controllo isLicensed nel proprio codice.
Azarai,

4

Credo fermamente che solo il sistema di licenze basato sulla crittografia a chiave pubblica sia l'approccio giusto qui, perché non è necessario includere nel codice sorgente le informazioni essenziali richieste per la generazione della licenza.

In passato, ho usato molte volte la Libreria di licenze di Treek , perché soddisfa questi requisiti e offre un prezzo davvero conveniente. Utilizza la stessa protezione della licenza per gli utenti finali e se stesso e nessuno ha violato fino ad ora. Puoi anche trovare buoni consigli sul sito Web per evitare la pirateria e il cracking.


La crittografia a chiave pubblica richiederebbe l'utilizzo di un servizio di attivazione online? Voglio dire, se non è nel codice sorgente (suppongo che intendi anche l'eseguibile), dove altro potrebbe essere?
Dan W,

No, non è necessario utilizzare il servizio di attivazione online. È possibile generare file di licenza completamente offline.
Panpernicek,

La chiave sta nel fatto che stai inserendo solo la chiave pubblica nel codice, che non può essere utilizzata per la generazione di licenze. Solo per la sua verifica.
Panpernicek,

3

Come alcuni altri menzionati, sono un grande oppositore di essere ostile ai clienti per impostazione predefinita, qualcosa per cui l'industria delle licenze è nota. Quindi espanderò su una buona soluzione per il tuo problema che offre anche una buona UX per i clienti .

Per iniziare, hai affermato di disporre di una versione "limitata" del software che stai utilizzando per provare a convertire i clienti in "upgrade" per funzionalità aggiuntive. Quindi, ciò che stai cercando sono le licenze delle funzionalità per il tuo prodotto, ad esempio un cliente può acquistare una licenza per la funzione X o la funzione Y .

Ho costruito Keygen pensando a questo tipo di licenza. Keygen è un'API REST per le licenze che consente di gestire account utente, licenze e anche di tenere traccia dell'utilizzo / associazioni della macchina.

Quello che vorrei fare è impostare 2 tipi di licenza (una politica all'interno di Keygen) in cui una è una politica di base per la versione gratuita limitata e l'altra è una politica per la versione a pagamento.

Non sono sicuro di cosa stai usando per i pagamenti, ma supponiamo che tu stia usando qualcosa come Stripe (abbastanza standard al giorno d'oggi) che offre webhook . Keygen ha anche dei webhook (che tu lo usi o meno, tutto ciò è ancora applicabile). Puoi integrare Keygen per parlare con il tuo fornitore di servizi di pagamento utilizzando i webhook di entrambe le parti (pensa: customer.created-> crea una licenza di base per il cliente, license.created-> addebita al cliente la nuova licenza).

Quindi, utilizzando i webhook, possiamo automatizzare la creazione di licenze per i nuovi clienti. E che dire della convalida della licenza all'interno dell'applicazione stessa? Questo può essere fatto in vari modi, ma il modo più popolare è richiedere al cliente di inserire una chiave di licenza lunga in un campo di input che è possibile convalidare; Penso che questo sia un modo terribile per gestire la convalida della licenza nella tua applicazione.

Perché lo penso? Prima di tutto, stai chiedendo al tuo cliente di inserire una chiave di licenza noiosamente lunga che è destinata al consumo della macchina, e in secondo luogo di richiedere a te e al tuo cliente di tenere traccia di tale chiave di licenza noiosamente lunga .

Va bene, quindi qual è un'alternativa? Penso che la migliore alternativa sia fare qualcosa a cui tutti i tuoi clienti sono abituati: consentire loro di creare un account per il tuo prodotto usando una e-mail / password . È quindi possibile associare tutte le loro licenze e le loro macchine a tale account. Quindi ora invece di inserire una chiave di licenza, possono semplicemente accedere utilizzando le loro credenziali.

Che vantaggio ti offre? In primo luogo, elimina la necessità per te e per i tuoi clienti di tenere traccia delle chiavi di licenza, poiché è tutto gestito dietro le quinte all'interno del loro account utente e, cosa più importante: ora potete offrire ai vostri clienti licenze e macchine self-service Attivazione! ovvero poiché tutte le loro licenze e macchine sono associate al proprio account utente, è possibile richiedere loro di acquistare una licenza quando accendono l'applicazione su una macchina non riconosciuta.

Ora sulla convalida della licenza : ogni volta che il cliente accede all'applicazione con la propria e-mail / password, è possibile richiedere al proprio account utente le licenze di propria proprietà per determinare se possono utilizzare la funzione-X o la funzione-Y . E poiché l'applicazione è ora self-service , puoi consentire ai tuoi clienti di acquistare funzionalità aggiuntive direttamente dall'applicazione!

Quindi abbiamo introdotto un sacco di automazione nel nostro sistema di licenze, possiamo concedere in licenza singole funzionalità (ovvero una versione limitata o completa), abbiamo offerto una fantastica UX per i nostri clienti e abbiamo anche alleviato uno dei motivi principali per richieste di supporto: recupero chiave di licenza.

Comunque, questo è durato a lungo ma si spera che aiuti qualcuno!


Non riesco a immaginare una licenza come questa in qualsiasi situazione di sviluppo aziendale. Pensa ad scenari di compilazione e distribuzione automatizzati, ad esempio. O semplicemente aggiungendo questo passaggio ai molti di solito richiesti per configurare una macchina sviluppatore. Per me, le chiavi di licenza devono essere pre-emesse, e non basate su singole macchine, per essere pratiche
DvS

2

Non è possibile prevenire completamente la pirateria informatica. Puoi prevenire la pirateria occasionale ed è quello che fanno tutte le soluzioni di licenza.

Le licenze con nodo (macchina) bloccate sono le migliori se si desidera impedire il riutilizzo delle chiavi di licenza. Uso Cryptlex da circa un anno ormai per il mio software. Ha anche un piano gratuito , quindi se non ti aspetti troppi clienti puoi usarlo gratuitamente.


2

Puoi utilizzare una soluzione di terze parti gratuita per gestirla come Quantum-Key.Net È gratuita e gestisce i pagamenti tramite paypal attraverso una pagina di vendita web che crea per te, emissione di chiavi tramite e-mail e blocca l'utilizzo della chiave su un computer specifico per prevenire la pirateria.

Dovresti anche aver cura di offuscare / crittografare il tuo codice o può essere facilmente decodificato usando software come De4dot e .NetReflector. Un buon offuscatore di codice gratuito è ConfuserEx che è veloce e semplice da usare e più efficace delle alternative costose.

Dovresti eseguire il tuo software finito attraverso De4Dot e .NetReflector per decodificarlo e vedere cosa vedrebbe un cracker se facesse la stessa cosa e per assicurarti di non aver lasciato alcun codice importante esposto o non nascosto.

Il tuo software sarà ancora crackabile ma per il cracker occasionale potrebbe essere sufficiente rimandarlo e questi semplici passaggi impediranno anche l'estrazione e il riutilizzo del tuo codice.

https://quantum-key.net

Come usare ConfuserEx?

https://github.com/0xd4d/de4dot

https://www.red-gate.com/dynamic/products/dotnet-development/reflector/download

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.