Como gerar e validar uma chave de licença de software?

236

Atualmente, estou envolvido no desenvolvimento de um produto (desenvolvido em C #) que estará disponível para download e instalação gratuitamente, mas em uma versão muito limitada. Para ter acesso a todos os recursos, o usuário deve pagar uma taxa de licença e receber uma chave. Essa chave será inserida no aplicativo para "desbloquear" a versão completa.

Como usar uma chave de licença como essa é comum, estou me perguntando:

  1. Como isso geralmente é resolvido?
  2. Como posso gerar a chave e como ela pode ser validada pelo aplicativo?
  3. Como também posso evitar que uma chave seja publicada na Internet e usada por outras pessoas que não pagaram a licença (uma chave que basicamente não é "deles").

Eu acho que também devo vincular a chave à versão do aplicativo de alguma forma, para que seja possível cobrar por novas chaves nas versões dos recursos.

Mais alguma coisa que eu deva pensar nesse cenário?

Riri
fonte

Respostas:

126

Advertência: você não pode impedir que os usuários piratem, mas apenas facilita para usuários honestos fazerem a coisa certa.

Supondo que você não queira criar uma compilação especial para cada usuário, então:

  • Gere uma chave secreta para o produto
  • Pegue o nome do usuário
  • Concatene o nome do usuário, a chave secreta e o hash com (por exemplo) SHA1
  • Descompacte o hash SHA1 como uma sequência alfanumérica. Essa é a "Chave do produto" do usuário individual
  • Dentro do programa, faça o mesmo hash e compare com a chave do produto. Se for igual, ok.

Mas repito: isso não impedirá a pirataria


Li recentemente que essa abordagem não é criptograficamente muito sólida. Mas essa solução já é fraca ( como o próprio software precisa incluir a chave secreta em algum lugar ), então não acho que essa descoberta invalide a solução na medida do possível.

Apenas pensei que eu realmente deveria mencionar isso, no entanto; Se você planeja derivar algo mais disso, tenha cuidado.

Brent.Longborough
fonte
13
se o programa incluir a chave secreta (conforme implícita nas etapas acima), quebrá-la é trivial
Steven A. Lowe
2
editado para ser mais óbvio; não pode over-enfatizar algo que ;-) fundamentais
Steven A. Lowe
23
Use um método criptográfico assimétrico (como o RSA) para gerar e decodificar a chave do produto para evitar a incorporação do segredo no código.
Amir Moghimi 19/06/12
6
Eu acho que quando alguém está hackeando seu código (possivelmente no nível do assembly) para encontrar sua chave secreta, eles provavelmente também estão no nível em que podem simplesmente ignorar completamente seus cheques. Não acho que exista um método de registro tão seguro que possa sobreviver a um bom hacker executando o programa localmente. Como o comentário original disse, é realmente tudo o que torna um passo mais difícil do que simplesmente copiar o arquivo. Hoje em dia, muitos jogos desistiram da proteção contra cópias e simplesmente colocam o conteúdo do jogo on-line; nesse caso, o código está fora do alcance do hacker.
JamieB
1
É comum incluir restrições na chave de licença? Por exemplo, restrições de tempo, contagem de usuários simultâneos, módulos a serem instalados etc.?
Carlo
97

Existem muitas maneiras de gerar chaves de licença, mas muito poucas são realmente seguras. E é uma pena, porque para as empresas, as chaves de licença têm quase o mesmo valor que o dinheiro real.

Idealmente, você deseja que suas chaves de licença tenham as seguintes propriedades:

  1. Somente sua empresa deve ser capaz de gerar chaves de licença para seus produtos, mesmo que alguém faça uma engenharia reversa completa de seus produtos (o que acontecerá, falo por experiência própria). Ofuscar o algoritmo ou ocultar uma chave de criptografia dentro do seu software está realmente fora de questão, se você é sério sobre como controlar o licenciamento. Se o seu produto for bem-sucedido, alguém criará um gerador de chaves em questão de dias a partir do lançamento.

  2. Uma chave de licença deve ser utilizável em apenas um computador (ou pelo menos você deve poder controlar isso com muita força)

  3. Uma chave de licença deve ser curta e fácil de digitar ou ditar por telefone. Você não deseja que todos os clientes liguem para o suporte técnico porque eles não entendem se a chave contém um "l" ou um "1". Seu departamento de suporte agradeceria por isso e você terá custos mais baixos nessa área.

Então, como você resolve esses desafios?

  1. A resposta é simples, mas tecnicamente desafiadora: assinaturas digitais usando criptografia de chave pública. Suas chaves de licença devem ser de fato "documentos" assinados, contendo alguns dados úteis, assinados com a chave privada da sua empresa. As assinaturas devem fazer parte da chave de licença. O produto deve validar as chaves de licença com a chave pública correspondente. Dessa forma, mesmo se alguém tiver acesso total à lógica do seu produto, ele não poderá gerar chaves de licença porque não possui a chave privada. Uma chave de licença ficaria assim: BASE32 (CONCAT (DATA, PRIVATE_KEY_ENCRYPTED (HASH (DATA)))) O maior desafio aqui é que os algoritmos clássicos de chave pública têm grandes tamanhos de assinatura. O RSA512 possui uma assinatura de 1024 bits. Você não deseja que suas chaves de licença tenham centenas de caracteres. Uma das abordagens mais poderosas é usar a criptografia de curva elíptica (com implementações cuidadosas para evitar as patentes existentes). As chaves ECC são 6 vezes mais curtas que as chaves RSA, para a mesma força. Você pode reduzir ainda mais o tamanho da assinatura usando algoritmos como o algoritmo de assinatura digital Schnorr (patente expirada em 2008 - bom :))

  2. Isso é possível com a ativação do produto (o Windows é um bom exemplo). Basicamente, para um cliente com uma chave de licença válida, é necessário gerar alguns "dados de ativação", que são uma mensagem assinada incorporando a identificação de hardware do computador como dados assinados. Isso geralmente é feito pela Internet, mas apenas UMA VEZ: o produto envia a chave de licença e o ID do hardware do computador para um servidor de ativação, e o servidor de ativação envia de volta a mensagem assinada (que também pode ser abreviada e fácil de ser ditada pela Internet). telefone). A partir desse momento, o produto não verifica a chave de licença na inicialização, mas os dados de ativação, que precisam do mesmo computador para validar (caso contrário, os DADOS seriam diferentes e a assinatura digital não seria validada).

  3. Bem, basta eliminar caracteres redundantes como "1", "l", "0", "o" de suas chaves. Divida a sequência da chave de licença em grupos de caracteres.

Catalin S.
fonte
8
Eles não poderiam simplesmente editar o software adicionando / removendo o código, de modo que a verificação seja totalmente ignorada?
Pacerier 13/11/14
A resposta ao número 1 exige um serviço de ativação / desativação on-line essencialmente?
31715 Dan W
2
Gostaria de salientar o quão superior é essa resposta em relação à outra coisa hash.
Erik Aronesty
1
@Pacerier Há muitas coisas de que as chaves de licença protegem as empresas de software. Modificar o exe não é um deles.
Erik Aronesty 18/03/19
1
Vale ressaltar que, mesmo com chaves públicas / privadas de criptografia assimétrica, ainda é possível gerar licenças falsas, simplesmente substituindo a chave pública fornecida no software por outra chave pública e usando a chave privada correspondente para assinar a licença falsa. É por isso que temos e precisamos de autoridades de certificação confiáveis, que vinculam chaves públicas a identidades. Portanto, embora isso possa adicionar mais um arco a ser percorrido, ele por si só não garante o número 1.
Saeb Amini
76

Resposta simples - Não importa qual esquema você use, ele pode ser quebrado.

Não castigue clientes honestos com um sistema destinado a impedir hackers, pois os hackers o invadirão independentemente.

Um código hash simples vinculado ao email ou similar provavelmente é bom o suficiente. As IDs baseadas em hardware sempre se tornam um problema quando as pessoas precisam reinstalar ou atualizar o hardware.

Boa discussão sobre o assunto: http://discuss.joelonsoftware.com/default.asp?biz.5.82298.34

escuna
fonte
2
concordado, você não quer incomodar os usuários que estão realmente comprando seu produto! (pay atenção m $, maçã, etc ...)
Jason
2
MS, Apple, etc, podem se safar, pois são grandes e fornecem produtos essenciais que são difíceis de encontrar em outros lugares ou que possuem uma grande sombra de mercado que podem ser usados ​​para forçar as pessoas. O pequeno desenvolvedor não pode.
escuna
1
um esquema de assinatura de chave pública / privada não pode ser "quebrado" para produzir novas chaves válidas para usuários que desejam executar o código assinado baixado do site do editor, em vez de software quebrado. enquanto que um esquema hash / simétrico pode ser quebrado para produzir novas chaves de licença válidas indistinguíveis das inválidas. Enorme diferença.
Erik Aronesty 18/03/19
Link quebrado ....
stigzler 23/06
56

Ao gerar a chave, não se esqueça de concatenar a versão e criar o número na string em que você calcula o hash. Dessa forma, não haverá uma única chave que desbloqueie tudo o que você já lançou.

Depois de encontrar algumas chaves ou patches flutuando no astalavista.box.sk, você saberá que conseguiu criar algo popular o suficiente para que alguém se desse ao trabalho de quebrar. Alegrar!

shoosh
fonte
8
"não se esqueça de concatenar a versão e construir o número na string em que você calcula o hash" - mas isso não fará com que a chave seja quebrada quando o usuário atualizar para uma versão menor do patch?
Thomthom 24/09
1
@thomthom Que tal então associar uma versão máxima a uma chave? A ideia versão em si é plausível e acrescenta mais segurança
Marvin Thobejane
@MarvinThobejane para associar uma versão máxima, você pode assinar a versão máxima permitida e fazer com que o código itere um pouco a versão. mas não> = operações permitidas em sigs.
Erik Aronesty 27/02/19
22

Além do que já foi afirmado ....

Qualquer uso de aplicativos .NET é inerentemente quebrável devido a problemas de idioma intermediário. Uma simples desmontagem do código .NET abrirá seu produto para qualquer pessoa. Eles podem facilmente ignorar seu código de licenciamento nesse momento.

Você não pode nem usar valores de hardware para criar mais uma chave. As máquinas virtuais agora permitem que alguém crie uma imagem de uma máquina 'licenciada' e execute-a em qualquer plataforma que escolher.

Se é um software caro, existem outras soluções. Se não estiver, basta dificultar o suficiente para o hacker casual. E aceite o fato de que haverá cópias não licenciadas por aí eventualmente.

Se o seu produto for complicado, os problemas de suporte inerentes criarão alguma proteção para você.


fonte
9
+1 por evitar fraqueza nos valores de hardware devido às máquinas virtuais.
Rubens Mariuzzo
3
É para isso que servem os nomes fortes para .NET e Authenticode para assinatura PE. Se alguém descompilou, modificou e reconstruiu sua biblioteca, ela não será assinada e o aplicativo simplesmente não será executado. A máquina virtual .NET não permitirá isso.
Stephen Tunney
2
A assinatura é para validar a origem do programa que você executará. Se o usuário não se importa com a origem porque sabe que ela é modificada e quebrada, o cracker retira a assinatura ou até assina com sua própria assinatura. A assinatura para de misturar conjuntos confiáveis ​​com conjuntos não confiáveis.
Jesusduarte
um aplicativo móvel pode ser usado como um dongle de hardware equipado com júri para software caro ... basta pagar usando o aplicativo e incorporar uma chave de assinatura no elemento seguro do aplicativo. então você pode ativar usando o aplicativo desktop + ... desativando a outra área de trabalho. A colocação de algumas áreas críticas do código de seção no aplicativo e / ou nos serviços de computação homomórfica on-line pode ajudar a evitar a decompilação trivial.
Erik Aronesty 27/02/19
12

O mecanismo C # / .NET que usamos para geração de chave de licença agora é mantido como código aberto:

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

Ele é baseado em um sistema de "Verificação Parcial de Chave", o que significa que apenas um subconjunto da chave que você usa para gerar a chave precisa ser compilado no seu distribuidor. Você mesmo cria as chaves, para que a implementação da licença seja exclusiva do seu software.

Como mencionado acima, se seu código puder ser descompilado, é relativamente fácil contornar a maioria dos sistemas de licenciamento.

gb2d
fonte
Você gostaria de fazer um tutorial para usar este produto? Achei seu wiki um pouco ausente.
Anthony Ruffino 11/11
O projeto agora foi aberto no GitHub, se isso ajudar (resposta editada com o link).
Gb2d
10

Sou um dos desenvolvedores por trás da plataforma de licenciamento de software Cryptolens e trabalho em sistemas de licenciamento desde os 14 anos. Nesta resposta, incluí algumas dicas baseadas na experiência adquirida ao longo dos anos.

A melhor maneira de resolver isso é configurando um servidor de chave de licença que cada instância do aplicativo chamará para verificar uma chave de licença.

Benefícios de um servidor de chave de licença

As vantagens de um servidor de chave de licença é que:

  1. você sempre pode atualizar ou bloquear uma chave de licença com efeito imediato.
  2. cada chave de licença pode ser bloqueada para um certo número de máquinas (isso ajuda a impedir que os usuários publiquem a chave de licença on-line para que outros usem).

Considerações

Embora a verificação de licenças online ofereça mais controle sobre cada instância do aplicativo, a conexão com a Internet nem sempre está presente (especialmente se você direcionar empresas maiores), por isso precisamos de outra maneira de executar a verificação da chave de licença.

A solução é sempre assinar a resposta da chave de licença do servidor usando um sistema de criptografia de chave pública como RSA ou ECC (possivelmente melhor se você planeja executar em sistemas incorporados). Seu aplicativo deve ter apenas a chave pública para verificar a resposta da chave de licença.

Portanto, caso não haja conexão com a Internet, você pode usar a resposta da chave de licença anterior. Certifique-se de armazenar a data e o identificador da máquina na resposta e verifique se não é muito antiga (por exemplo, você permite que os usuários estejam offline no máximo por 30 dias, etc.) e se a resposta da chave de licença pertence ao dispositivo correto.

Observe que você deve sempre verificar o certificado de resposta da chave de licença, mesmo se estiver conectado à Internet), para garantir que ele não tenha sido alterado desde que saiu do servidor (isso ainda deve ser feito, mesmo que sua API para o servidor de chave de licença usa https)

Protegendo algoritmos secretos

A maioria dos aplicativos .NET pode sofrer engenharia reversa com bastante facilidade (existe um diassembler fornecido pela Microsoft para obter o código IL e alguns produtos comerciais podem até recuperar o código fonte em, por exemplo, C #). Obviamente, você sempre pode ofuscar o código, mas nunca é 100% seguro.

Na maioria dos casos, o objetivo de qualquer solução de licenciamento de software é ajudar as pessoas honestas a serem honestas (ou seja, que usuários honestos que estejam dispostos a pagar não se esqueçam de pagar após o término de um teste, etc.).

No entanto, você ainda pode ter algum código que de maneira alguma deseja vazar para o público (por exemplo, um algoritmo para prever os preços das ações, etc.). Nesse caso, o único caminho a seguir é criar um terminal de API que seu aplicativo chamará sempre que o método for executado. Requer conexão à Internet, mas garante que seu código secreto nunca seja executado pela máquina cliente.

Implementação

Se você não quiser implementar tudo sozinho, recomendo dar uma olhada neste tutorial (parte do Cryptolens )

Artem
fonte
Uma pergunta sobre como restringir a chave de licença salva a não ser muito antiga: Como o PC pode não estar conectado à Internet, a data e a hora sempre podem ser alteradas novamente para permanecer na mesma data válida?
Amir Mahdi Nassiri
Os usuários não podem ignorar o servidor de licenças online definindo um host de loopback no Windows? Já vi muitos aplicativos sendo pirateados assim, sendo o Resharper e o Matlab os que mais me lembro.
Amir Mahdi Nassiri
1
@AmirMahdiNassiri Para a pergunta 1: se o PC estiver permanentemente offline, você poderá usar um dongle de relógio em tempo real (RTC) como fonte confiável de tempo. Para a pergunta 2: Como a resposta é assinada com a chave privada do fornecedor (e verificada com a chave pública dentro do aplicativo), um adversário precisaria assinar novamente o arquivo sem conhecer a chave privada, que, no momento da escrita, é não é possível com chaves RSA de 2048 bits.
Artem
7

Eu usei Crypkey no passado. É um dos muitos disponíveis.

Você só pode proteger o software até certo ponto com qualquer esquema de licenciamento.

Mitch Wheat
fonte
6

Eu não sei o quão elaborado você quer ser

mas acredito que .net pode acessar o número de série do disco rígido.

você pode mandar o programa enviar algo assim (como nome de usuário e endereço mac do nic)

você calcula um código com base nisso e envia de volta a chave por e-mail.

eles os impedirão de trocar de máquina depois de terem a chave.

Crash893
fonte
4
E evite que eles substituam um HD morto entre outros problemas, levando à frustração. Infelizmente, não há uma resposta fácil, você precisa equilibrar a confiança com os mecanismos básicos de licenciamento.
escuna
Trabalhou muitos anos como engenheiro de software com um produto que usava o número de série do hd, era completamente inseguro para aqueles que sabiam atualizá-lo.
oden
Eu estava implicando em usar esse número com outras coisas (endereço MAC, FQDN), talvez jogá-los todos em um hash. O objetivo é tornar um pouco mais difícil falsificar todos esses dados do que inverter o mecanismo do software em primeiro lugar e remover a verificação, pois sempre é uma opção.
Crash893
4

A única maneira de fazer tudo o que você pediu é exigir um acesso à Internet e verificação com um servidor. O aplicativo precisa entrar no servidor com a chave e, em seguida, você precisa armazenar os detalhes da sessão, como o endereço IP. Isso impedirá que a chave seja usada em várias máquinas diferentes. Geralmente, isso não é muito popular entre os usuários do aplicativo e, a menos que seja um aplicativo muito caro e complicado, não vale a pena.

Você pode ter apenas uma chave de licença para o aplicativo e verificar o lado do cliente se a chave é boa, mas é fácil distribuir essa chave para outros usuários e, com um descompilador, novas chaves podem ser geradas.

Marius
fonte
5
Eu trabalhei em uma empresa que usava um esquema de licenciamento baseado na Internet. toda vez que o programa iniciava, era on-line para validar, acho que a empresa gastou mais $$ em infraestrutura e desenvolvedores por sua solução de licenciamento do que perderia com a pirataria (eles eram um produto de nicho).
Jason
3
além disso, os custos de suporte técnico eram enormes. muitas, MUITAS vezes, um usuário usava legitimamente outro computador para tentar executar o software, mas o hash era diferente, o que levava a enormes quantidades de suporte técnico. em resumo, o que a escuna disse - não castigue usuários honestos.
Jason
1
Parece que sua empresa estava um pouco zelosa ao exigir validação na inicialização todas as vezes.
Jugg1es
@ Jason, Bem, eles devem subir o preço do produto.
Pacerier 13/11/14
1
@ Pacerier: Resposta errada.
Lightness Races in Orbit -
4

Eu implementei a ativação única baseada na Internet no software da minha empresa (C # .net) que requer uma chave de licença que se refere a uma licença armazenada no banco de dados do servidor. O software atinge o servidor com a chave e recebe informações de licença que são criptografadas localmente usando uma chave RSA gerada a partir de algumas variáveis ​​(uma combinação de CPUID e outras coisas que não mudam frequentemente) no computador cliente e as armazena em o registro.

Requer alguma codificação no servidor, mas funcionou muito bem para nós e eu pude usar o mesmo sistema quando expandimos para o software baseado em navegador. Também fornece ao seu pessoal de vendas informações excelentes sobre quem, onde e quando o software está sendo usado. Qualquer sistema de licenciamento manipulado apenas localmente é totalmente vulnerável à exploração, especialmente com reflexo no .NET . Mas, como todo mundo já disse, nenhum sistema é totalmente seguro.

Na minha opinião, se você não estiver usando o licenciamento baseado na Web, não há sentido real em proteger o software. Com a dor de cabeça que o DRM pode causar, não é justo para os usuários que realmente pagaram pelo sofrimento.

jugg1es
fonte
1
Mas o principal problema do licenciamento na Web é que o serviço de licenciamento se torna o principal alvo de ataques DDoS. O que paralisa o serviço ou aumenta os custos da nuvem.
10282 afk5min
4
Isso é como dizer que não há nenhum ponto em ter um site porque é vulnerável a ataques DDoS ...
jugg1es
@ jugg1es Em nenhum lugar do seu comentário ele disse "não faz sentido". Ele simplesmente apontou o fato de que é uma vulnerabilidade que deve ser considerada.
precisa
E as verificações ainda podem ser removidas no cliente. Nenhuma verificação, licenciamento não webbased ...
azarai
1
Você quer dizer código de aplicativo real com "informações necessárias"? Código que seria necessário para executar o aplicativo? Caso contrário, eu acho que ainda resultará na chamada de métodos de verificação isLicensed no código.
azarai
4

Acredito firmemente que apenas o sistema de licenciamento baseado em criptografia de chave pública é a abordagem correta aqui, porque você não precisa incluir informações essenciais necessárias para a geração de licenças em seu código-fonte.

No passado, eu usei a Biblioteca de licenciamento da Treek muitas vezes, porque preenche esses requisitos e oferece um preço muito bom. Ele usa a mesma proteção de licença para usuários finais e a si próprio, e ninguém o quebrou até agora. Você também pode encontrar boas dicas no site para evitar pirataria e rachaduras.

panpernicek
fonte
A criptografia de chave pública exigiria o uso de um serviço de ativação online? Quero dizer, se não está no código fonte (presumo que você também seja o executável), onde mais poderia estar?
Dan W
Não, você não precisa usar o serviço de ativação online. Você pode gerar arquivos de licença completamente offline.
panpernicek
A chave está no fato de que você está colocando apenas uma chave pública no código, que não pode ser usada para geração de licença. Apenas para sua verificação.
panpernicek
3

Como alguns outros mencionados, sou um grande oponente por ser hostil aos clientes por padrão - algo pelo qual a indústria de licenciamento é notória. Então, vou expandir uma boa solução para o seu problema que também oferece um bom cliente UX .

Para começar, você mencionou que possui uma versão "limitada" do seu software que está usando para tentar converter clientes em "atualização" para obter recursos adicionais. Portanto, o que você procura são licenças de recursos para seu produto, por exemplo, um cliente pode comprar uma licença para o recurso X ou Y .

Eu construí Keygen com esse tipo de licenciamento em mente. Keygen é uma API REST de licenciamento que permite gerenciar contas de usuários, licenças e também rastrear o uso / associações de máquinas.

O que eu faria é configurar 2 tipos de licença (uma política no Keygen), onde um é uma política básica para a versão gratuita limitada e o outro é uma política para a versão paga.

Não sei ao certo o que você está usando para pagamentos, mas vamos supor que você esteja usando algo como o Stripe (hoje bastante comum hoje em dia) que oferece webhooks . O Keygen também possui webhooks (se você o usa ou não, tudo isso ainda é aplicável). Você pode integrar o Keygen para conversar com seu provedor de pagamento usando webhooks de ambos os lados (pense em: customer.created-> criar licença básica para o cliente, license.created-> cobrar da nova licença).

Portanto, utilizando webhooks, podemos automatizar a criação de licenças para novos clientes. E a validação de licença no próprio aplicativo? Isso pode ser feito de várias maneiras, mas a maneira mais popular é exigir que seu cliente insira uma chave de licença longa em um campo de entrada que você poderá validar; Eu acho que essa é uma maneira terrível de lidar com a validação de licença em seu aplicativo.

Por que eu acho isso? Bem, primeiro, você está exigindo que seu cliente insira uma chave de licença tediosamente longa, destinada ao consumo da máquina, e depois você exige que você e seu cliente acompanhem a chave de licença tediosamente longa .

Ok, então o que é uma alternativa? Eu acho que a melhor alternativa é fazer algo que todos os seus clientes estão acostumados: permitir que eles criem uma conta para o seu produto usando um email / senha . Você pode associar todas as suas licenças e máquinas a essa conta. Portanto, agora, em vez de inserir uma chave de licença, eles podem simplesmente fazer login usando suas credenciais.

Que vantagem isso lhe dá? Em primeiro lugar, elimina a necessidade de você e seus clientes acompanharem as chaves de licença, pois tudo é tratado nos bastidores da conta de usuário e, o mais importante: agora você pode oferecer aos seus clientes licença e máquina de autoatendimento ativação! ou seja, como todas as suas licenças e máquinas estão associadas à sua conta de usuário, você pode solicitar que comprem uma licença quando iniciarem o aplicativo em uma máquina não reconhecida.

Agora, para validação da licença : sempre que seus registros de clientes em sua aplicação com o seu e-mail / senha, você pode consultar a sua conta de usuário para as licenças que possui para determinar se eles podem usar recurso de X ou de longa-Y . E como seu aplicativo agora é de autoatendimento , você pode permitir que seus clientes comprem recursos adicionais diretamente de dentro do seu aplicativo!

Por isso, introduzimos uma tonelada de automação em nosso sistema de licenciamento, podemos licenciar recursos individuais (por exemplo, uma versão limitada versus uma versão completa), oferecer um UX incrível para nossos clientes e também aliviar um dos maiores motivos. para solicitações de suporte: recuperação da chave de licença.

Enfim, isso ficou longo, mas espero que ajude alguém!

ezekg
fonte
Não consigo imaginar uma DLL sendo licenciada como esta em qualquer situação de desenvolvimento empresarial. Pense em cenários automatizados de criação e implantação, por exemplo. Ou simplesmente adicionando esta etapa às muitas necessárias para configurar uma máquina do desenvolvedor. Para mim, as chaves de licença precisam ser pré-emitidas, e não baseadas em máquinas individuais, para serem práticas.
DvS
2

Não é possível impedir completamente a pirataria de software. Você pode evitar a pirataria casual e é isso que todas as soluções de licenciamento fazem.

O licenciamento bloqueado do nó (máquina) é melhor se você deseja impedir a reutilização de chaves de licença. Estou usando o Cryptlex há cerca de um ano para o meu software. Também possui um plano gratuito ; portanto, se você não espera muitos clientes, pode usá-lo gratuitamente.

adnan kamili
fonte
2

Você pode usar uma solução gratuita de terceiros para lidar com isso, como Quantum-Key.Net. É gratuito e lida com pagamentos via paypal através de uma página de vendas na web criada para você, emissão de chaves por e-mail e bloqueia o uso de chaves em um computador específico para prevenir a pirataria.

Você também deve ter o cuidado de ofuscar / criptografar seu código, ou ele pode ser facilmente modificado por engenharia reversa usando softwares como De4dot e .NetReflector. Um bom ofuscador de código livre é o ConfuserEx, que é rápido e simples de usar e mais eficaz que as alternativas caras.

Você deve executar o software finalizado através do De4Dot e do .NetReflector para fazer engenharia reversa e ver o que um cracker veria se fizesse a mesma coisa e para garantir que você não deixou nenhum código importante exposto ou indisfarçado.

Seu software ainda estará quebrável, mas para o cracker casual pode ser suficiente adiá-lo e essas etapas simples também impedirão que seu código seja extraído e reutilizado.

https://quantum-key.net

Como usar o ConfuserEx?

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

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

Damo
fonte