Pergunta

Como posso criar uma chave de produto para o meu C # Aplicação?

Eu preciso criar um produto (ou licença) chave que eu atualizar anualmente. Além disso eu preciso para criar um para versões de teste.

Relacionado:

Foi útil?

Solução

Você pode fazer algo como criar um registro que contém os dados que você deseja autenticar o aplicativo. Isto pode incluir qualquer coisa que você quiser - por exemplo, programa caracteriza a permitir, data de validade, nome do usuário (se você quiser vinculá-lo a um usuário). Em seguida, criptografar que o uso de um algoritmo de criptografia com uma chave fixa ou hash. Então você acabou de verificar-lo dentro de seu programa. Uma maneira de distribuir o arquivo de licença (no Windows) é fornecer-lo como um arquivo que atualiza o registro (poupa o usuário ter que digitá-lo).

Cuidado com falsa sensação de segurança - embora mais cedo ou mais tarde alguém vai simplesmente corrigir o seu programa para ignorar essa verificação, e distribuir a versão corrigida. Ou, eles vão trabalhar para fora uma chave que passa todos os cheques e distribuir isso, ou retroagir o relógio, etc. Não importa como você complicado fazer o seu esquema, qualquer coisa que você faz para este acabará por ser segurança através da obscuridade e eles vão sempre ser capaz de presente. Mesmo que não pode alguém vontade, e irá distribuir a versão hackeada. Mesmo se aplica mesmo se você fornecer um dongle - se alguém quiser, eles podem corrigir o cheque para isso também. Assinar digitalmente o seu código não vai ajudar, eles podem remover essa assinatura, ou resignar-lo.

Você pode complicar um pouco usando técnicas para impedir que o programa em execução em um depurador etc, mas mesmo isso não é à prova de bala. Então você deve apenas tornar mais difícil o suficiente para que um usuário honesto não vai esquecer de pagar. Também deve ter muito cuidado para que seu regime não se tornar intrusivos para usuários pagantes. - É melhor ter algumas rasgadas off cópias do que para o seu pagamento clientes para não ser capaz de usar o que eles pagaram por

Outra opção é ter uma verificação on-line - basta fornecer ao usuário uma identificação única e verificar on-line como o que capacidades que ID deve ter, eo cache-lo por algum período. Todas as mesmas ressalvas se aplicam embora - as pessoas podem obter qualquer coisa redonda como esta .

Considere também os custos de suporte de ter que lidar com usuários que se esqueceram de sua chave, etc.

Editar: Eu só quero acrescentar, não investir muito tempo neste ou pensar que de alguma forma o seu esquema complicado será diferente e uncrackable. Ele não vai, e não pode ser tão longo como as pessoas a controlar o hardware e OS seus programa é executado em. Os desenvolvedores têm tentado chegar a esquemas cada vez mais complexas para isso, pensando que se eles desenvolver seu próprio sistema para ele, então ele só será conhecido a eles e, portanto, 'mais seguro'. Mas realmente é o equivalente de programação de tentar construir uma máquina de movimento perpétuo. : -)

Outras dicas

Em quem você confia?

Eu sempre considerei também nesta área fundamental para confiar em terceiros para gerenciar a segurança de tempo de execução da aplicação. Uma vez que o componente está rachado para um aplicativo, que é rachado para todas as aplicações. Aconteceu- Discreto em cinco minutos, uma vez que foi com uma solução de licença de terceiros para 3DS Max anos atrás ... Bons tempos!

A sério, considere seu próprio material circulante para ter controle total sobre seu algoritmo. Se fizer isso, considerar o uso de componentes em sua chave ao longo das linhas de:

  • Nome License - o nome do cliente (se houver) que você está licenciamento. Útil para o gerenciamento de implementações da empresa - fazê-los sentir especial para ter um nome "personalizado" nas informações de licença que você fornecê-los
  • .
  • Data de licença de validade
  • Número de usuários para ser executado sob a mesma licença. Isso pressupõe que você tem uma maneira de rastrear as instâncias em execução através de um local, de uma forma-servidor ish
  • Códigos de recurso - para deixá-lo usar o mesmo sistema de licenciamento em vários recursos, e através de vários produtos. Claro, se que é rachado para um produto que é rachado para todos.

Depois de checksum o inferno fora deles e adicionar o que (reversível) de encriptação que pretende para torná-la mais difícil de crack.

Para fazer uma chave de licença experimental, simplesmente tem valores para os valores acima que traduzem como "modo de teste".

E já que este é agora provavelmente o código mais importante na sua aplicação / empresa, em cima de / em vez de ofuscação considere colocar as rotinas decrypt em um arquivo DLL nativa e simplesmente P / Invoke a ele.

Várias empresas que eu trabalhei para adotaram abordagens generalizadas para isso com grande sucesso. Ou talvez os produtos não valiam rachaduras;)

Se você está perguntando sobre as teclas que você pode digitar, como chaves de produto do Windows, em seguida, eles são baseados em algumas verificações. Se você está falando sobre as chaves que você tem que copiar e colar, em seguida, eles são baseados em uma assinatura digitial (criptografia de chave privada).

A lógica chave de produto simples pode ser para começar dizendo que a chave do produto consiste em quatro grupos de 5 dígitos, como abcde-fghij-kljmo-pqrst e, em seguida, vá para especificar relações internas como f + k + p deve ser igual a um, o que significa que o primeiro dígitos do grupo 2, 3 e 4 devem totalizar a um. Isto significa que 8xxxx-2xxxx-4xxxx-2xxxx é válido, então é 8xxxx-1xxxx-0xxxx-7xxxx. Claro, não haveria outros relacionamentos, bem como, incluindo as relações complexas como, se o segundo dígito do primeiro grupo é ímpar, então o último dígito do último grupo deve ser muito estranho. Desta forma, não seria geradores para as chaves do produto e verificação de chaves de produto seria simplesmente verificar se ele corresponde a todas as regras.

Encryption são normalmente a série de informações sobre a licença criptografada usando uma chave privada (== assinado digitalmente) e convertido para Base64 . A chave pública é distribuída com o aplicativo. Quando a seqüência de Base64 chega, verifica-se (== descriptografado) pela chave pública e, se for encontrado válido, o produto é ativado.

Se é trivial ou duro de roer, não tenho certeza de que ele realmente faz muita diferença.

A probabilidade da sua aplicação ser rachado é muito mais proporcional à sua utilidade em vez da força da manipulação de chave do produto.

Pessoalmente, eu acho que existem duas classes de usuário. Aqueles que pagam. Aqueles que não o fazem. Os que o fazem provavelmente vai fazê-lo, mesmo com a proteção mais trivial. Aqueles que não vai esperar por uma rachadura ou procurar outro lugar. De qualquer maneira, não vai chegar mais dinheiro.

Eu tenho que admitir que eu faria algo bastante insano.

  1. Encontre um afunilamento de CPU e extraí-lo para um arquivo P / Invokeable DLL.
  2. Como uma ação pós construção, parte criptografar do arquivo DLL com um XOR criptografia de chave.
  3. Selecione um esquema de chave pública / privada, incluem a chave pública no arquivo DLL
  4. Organizar para que decifrar a chave de produto e XORing os dois metades juntas resulta na chave de criptografia para o DLL.
  5. No código DllMain da DLL, desativar proteção (PAGE_EXECUTE_READWRITE) e decifrá-lo com a chave.
  6. Faça um método LicenseCheck () que faz uma verificação de sanidade do chave de licença e parâmetros, em seguida, checksums todo o arquivo DLL, jogando licenciar violação em qualquer um. Oh, e fazer alguma outra inicialização aqui.

Quando encontrar e remover o LicenseCheck, que graça vai seguir quando a DLL começa segmentação falhamento .

Há a opção Microsoft Software licenciamento e protecção (SLP) Serviços também. Depois de ler sobre isso eu realmente gostaria de poder usá-lo.

Eu realmente gosto da idéia de bloquear partes do código baseado na licença. Hot stuff, e o mais seguro para .NET. leitura interessante, mesmo se você não usá-lo!

Licenciamento Microsoft® Software e Proteção (SLP) Services é uma serviço de ativação de software que permite que fornecedores de software independentes (ISVs) para adotar licenciamento flexível termos para seus clientes. Microsoft SLP Serviços emprega um único método de proteção que ajuda a salvaguarda sua aplicação e licenciamento informações que lhe permite obter a mercado mais rapidamente, aumentando o cumprimento do cliente.

Nota:. Esta é a única maneira que eu iria lançar um produto com código sensíveis (como um algoritmo valioso)

Se você quer uma solução simples apenas para criar e verificar os números de série, tente Ellipter . Ele usa criptografia de curva elíptica e tem um recurso de "Data de Vencimento" para que você possa criar verisons julgamento ou chaves de registro de tempo limitado.

Outra boa ferramenta de baixo custo para as chaves de produtos e ativações é um produto chamado InstallKey. Dê uma olhada na www.lomacons.com

Um método simples é usar um identificador exclusivo global (GUID). Guids são usualmente armazenados como valores de 128 bits e são vulgarmente apresentado como 32 dígitos hexadecimais com grupos separados por hífens, tais como {21EC2020-3AEA-4069-A2DD-08002B30309D}.

Use o seguinte código em C # por System.Guid.NewGuid().

getKey = System.Guid.NewGuid().ToString().Substring(0, 8).ToUpper(); //Will generate a random 8 digit hexadecimal string.

_key = Convert.ToString(Regex.Replace(getKey, ".{4}", "$0/")); // And use this to separate every four digits with a "/".

Espero que ajude.

O truque é ter um algoritmo que só você sabe (tal que possa ser decodificado na outra extremidade).

Existem coisas simples como, "Escolha um número primo e adicionar um número de mágica para isso"

opções mais complicadas, tais como a utilização de criptografia assimétrica de um conjunto de dados binários (que pode incluir um identificador único, números de versão, etc) e distribuir os dados codificados como a chave.

Pode ser também vale a pena ler as respostas para esta questão bem

Existem algumas ferramentas e está disponível API para ele. No entanto, eu não acho que você vai encontrar um de graça;)

Há, por exemplo, a suíte OLicense: http://www.olicense.de/index.php?lang=en

Você pode verificar LicenseSpot . Ele fornece:

  • Free componente Licenciamento
  • Ativação on-line
  • API para integrar seu aplicativo e loja on-line
  • Serial geração de números
  • revogação de licenças
  • Gerenciamento de subscrição

Vou pegar carona um pouco grande resposta de @ frankodwyer e cavar um pouco mais fundo no licenciamento baseado em online. Eu sou o fundador da Keygen , um RESTO licenciamento API construído para desenvolvedores.

Uma vez que você mencionou querendo 2 "tipos" de licenças para a sua aplicação, ou seja, uma "versão completa" e uma "versão de teste", podemos simplificar isso e usar um modelo de licença do recurso , onde você licencia recursos específicos de sua aplicação (neste caso, há um "completo" conjunto de recursos e um "julgamento" conjunto de recursos).

Para começar, poderíamos criar 2 tipos de licença (chamado políticas em Keygen) e sempre que um usuário se registra uma conta, você pode gerar uma licença "julgamento" para eles para começar a sair (a licença "julgamento" implementos nossa política de recurso "julgamento"), que você pode usar para fazer várias verificações de dentro do aplicativo por exemplo, pode usar usuário Teste-Característica-A e Teste-Característica-B .

E construir sobre isso, sempre que um usuário Compras seu aplicativo (se você estiver usando PayPal, Stripe, etc.), pode gerar uma licença execução da política de recurso "cheio" e associá-lo com a conta do usuário . Agora dentro de seu aplicativo você pode verificar se o usuário tem uma licença "full" que pode fazer Pro-Recurso-X e Pro-Recurso-Y (fazendo algo como user.HasLicenseFor(FEATURE_POLICY_ID) ).

I mencionados permitindo que seus usuários para criar contas de usuário -O que quero dizer com isso? Eu tenho ido para isso em detalhes no um algumas outras respostas , mas um rápido resumo a respeito de porque eu acho que essa é uma forma superior para autenticar e identificar seus usuários:

  1. As contas de usuário que você associar várias licenças e várias máquinas para um usuário único , dando-lhe uma visão sobre o comportamento do seu cliente e para levá-los para "compras no aplicativo" ou seja, comprando a sua versão "completa" (tipo como aplicativos móveis).
  2. Não devemos exigir que nossos clientes chaves de licença longos de entrada, que são tanto tedioso para a entrada e difícil de manter o controle de ou seja, eles se perdem facilmente. (Tente pesquisar "chave de licença perdida" no Twitter!)
  3. Os clientes são acostumados a usar um e-mail / senha ; Acho que devemos fazer o que as pessoas estão acostumadas a fazer para que possamos proporcionar uma experiência boa usuário (UX).

É claro que, se não o fizer deseja para alça contas de usuário e você deseja seus usuários para as chaves de licença de entrada, que é completamente bem (e Keygen suportes fazendo isso bem ). Eu só estou oferecendo uma outra maneira de ir sobre como lidar com esse aspecto de licenciamento e esperamos fornecer uma boa UX para os seus clientes.

Finalmente desde que você também mencionou que pretende atualizar essas licenças anualmente, você pode definir um duração em suas políticas para que as licenças "completos" expira após um ano e licenças "julgamento" última palavra 2 semanas, exigindo que seus usuários comprar uma nova licença após o vencimento.

Eu poderia cavar mais, ficando em máquinas com usuários e coisas assim associar, mas eu pensei que eu ia tentar manter esta resposta breve e se concentrar em funcionalidades simples de licenciamento para seus usuários.

Por favor, verifique esta resposta: https://stackoverflow.com/a/38598174/1275924

A idéia é usar Cryptolens como o servidor de licença. Aqui está um passo-a-passo exemplo (em C # e VB.NET). Eu também anexado um trecho de código para verificação da chave abaixo (em C #):

var licenseKey = "GEBNC-WZZJD-VJIHG-GCMVD";
var RSAPubKey = "{enter the RSA Public key here}";

var auth = "{access token with permission to access the activate method}";
var result = Key.Activate(token: auth, parameters: new ActivateModel()
{
    Key = licenseKey,
    ProductId = 3349,
    Sign = true,
    MachineCode = Helpers.GetMachineCode()
});

if (result == null || result.Result == ResultType.Error ||
    !result.LicenseKey.HasValidSignature(RSAPubKey).IsValid())
{
    // an error occurred or the key is invalid or it cannot be activated
    // (eg. the limit of activated devices was achieved)
    Console.WriteLine("The license does not work.");
}
else
{
    // everything went fine if we are here!
    Console.WriteLine("The license is valid!");
}

Console.ReadLine();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top