software - sistema trial c#




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

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. Isso geralmente 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ê poderia ter apenas uma chave de licença para o aplicativo e, em seguida, 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.

Estou atualmente 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 obter acesso a todos os recursos, o usuário deve pagar uma taxa de licença e receber uma chave. Essa chave será então inserida no aplicativo para "desbloquear" a versão completa.

Como usar uma chave de licença como essa é meio que normal, estou pensando:

  1. Como isso geralmente é resolvido?
  2. Como posso gerar a chave e como ela pode ser validada pelo aplicativo?
  3. Como 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 eu também deveria amarrar a chave para a versão do aplicativo de alguma forma, então será possível cobrar por novas chaves em versões de recursos.

Qualquer outra coisa que eu deveria pensar neste cenário?


Acredito firmemente que somente 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 ela preenche esses requisitos e oferece um preço muito bom. Ele usa a mesma proteção de licença para os usuários finais e para si e ninguém quebrou isso até agora. Você também pode encontrar boas dicas no site para evitar pirataria e cracking.


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

Qualquer uso de aplicativos .NET é inerentemente quebrável por causa dos 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 ponto.

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

Se é um software caro, existem outras soluções. Se não for, apenas dificulte o suficiente para o hacker casual. E aceite o fato de que haverá cópias não licenciadas eventualmente.

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


Ao gerar a chave, não se esqueça de concatenar a versão e o número de compilação na string na qual você calculou o hash. Dessa forma, não haverá uma única chave que liberte tudo o que você já liberou.

Depois de encontrar algumas chaves ou correções flutuando em astalavista.box.sk, você saberá que conseguiu fazer algo popular o suficiente para alguém se dar ao trabalho de decifrar. Alegrar!


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

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

você poderia ter o programa te mandar isso e algo mais (como nome de usuário e endereço mac do nic)

você calcula um código baseado nele e envia por email a chave.

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


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

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


Implementei uma 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 de algumas variáveis ​​(uma combinação de CPUID e outras coisas que não são alteradas com frequência) no computador cliente e, em seguida, as armazena em o registro.

Requer alguma codificação do lado do servidor, mas funcionou muito bem para nós e eu pude usar o mesmo sistema quando expandimos para um software baseado em navegador. Ele também oferece aos vendedores uma ótima informação sobre quem, onde e quando o software está sendo usado. Qualquer sistema de licenciamento que seja manipulado localmente é totalmente vulnerável à exploração, especialmente com reflexos no .NET . Mas, como todo mundo já disse, nenhum sistema é totalmente seguro.

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


Não é possível evitar 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ê quiser evitar a reutilização de chaves de licença. Eu tenho usado Cryptlex há cerca de um ano para o meu software. Tem um plano gratuito também, por isso, se você não espera muitos clientes, pode usá-lo gratuitamente.


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

Não punir os clientes honestos com um sistema destinado a impedir os hackers, pois os hackers vão quebrá-lo independentemente.

Um simples código hash vinculado ao seu e-mail 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.

Bom tópico sobre o assunto: http://discuss.joelonsoftware.com/default.asp?biz.5.82298.34


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

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

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

As vantagens de um servidor de chaves de licença são:

  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 certo número de máquinas (isso ajuda a impedir que os usuários publiquem a chave de licença on-line para que outras pessoas possam usá-la).

Considerações

Embora a verificação de licenças on-line ofereça mais controle sobre cada instância do aplicativo, a conexão com a Internet nem sempre está presente (especialmente se você segmentar empresas maiores), portanto, 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 criptográfico de chave pública, como RSA ou ECC (possivelmente melhor se você planeja executar em sistemas embarcados). Seu aplicativo deve ter apenas a chave pública para verificar a resposta da chave de licença.

Portanto, no caso de não haver conexão com a Internet, você poderá usar a resposta anterior da chave de licença. Certifique-se de armazenar a data e o identificador da máquina na resposta e verifique se não é muito antigo (por exemplo, permitir que os usuários fiquem off-line no máximo 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 precisa ser feito, mesmo se a sua API for servidor de chave de licença usa https)

Protegendo algoritmos secretos

A maioria dos aplicativos .NET pode ser de engenharia reversa com bastante facilidade (há um desdobramento fornecido pela Microsoft para obter o código IL e alguns produtos comerciais podem até mesmo recuperar o código-fonte em, por exemplo, C #). Claro, 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 pessoas honestas a serem honestas (ou seja, que usuários honestos que estão 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 você nunca quer vazar para o público (por exemplo, um algoritmo para prever os preços das ações, etc). Nesse caso, a única maneira de ir é criar um ponto de extremidade da API que seu aplicativo chamará sempre que o método for executado. Requer conexão com a 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, eu recomendo dar uma olhada neste tutorial (parte do Cryptolens )





license-key