Pergunta

Tem havido alguns posts oportunas sobre a segurança IP e similares, mas nenhum que eu posso achar que abordam especificamente um algoritmo. Em um dos meus projetos atuais, nós decidimos ir a rota de um sistema de chave de registro offline.

Eu imagino que a maioria da nossa eventual base de usuários vai ser honesto, então eu não acho que nós temos muito muito que se preocupar. Por outro lado, eu prefiro não ter o acesso ocasional ganho de biscoito sem uma boa dose de suor e lágrimas.

Então, quais são algumas opções para como gerar (e verificar) a chave? keying hardware é mais provável, porque o modelo de instalação é executar de um compartilhamento de samba em um servidor de intranet. Além disso, quanto tempo deve a chave ser?

Em segundo lugar, quão grande é o perigo do algoritmo de verificação simplesmente sendo refletida para fora, mesmo que seja ofuscado? Seria melhor para escrever o algoritmo em código não gerenciado em vez disso?

Foi útil?

Solução

Na minha opinião, o principal problema que você vai enfrentar não é com o seu algoritmo de registo e nível (ou falta) de ofuscação.

Pelo contrário, é esta: Em algum ponto no seu código se trata de decisão binária simples - para correr, ou para sair. Hacking seu sistema requer apenas encontrar e ajustar este ponto de decisão.

Tudo o resto - ofuscação, assinatura forte, detecção de sabotagem -. É orientada para tornar isso mais difícil, mas não pode fazê-lo que muito mais difícil

Outras dicas

Normalmente o que você quer fazer é escolher alguns dados que você deseja incluir na chave como quem é o dono e quando ele expira, possivelmente, até mesmo alguns pequenos pedaços de código de suas necessidades de aplicação para funcionar corretamente (tornando-se assim difícil fazer -lo funcionar sem a chave). Em seguida, use um esquema de assinatura digital, como RSA para assinar digitalmente a chave com a chave privada da sua empresa. Distribuir a chave pública com o executável do aplicativo. Então, quando você carregar a chave, basta verificar a assinatura é válida e, em seguida, usar os dados contidos na chave. A chave de 1024 ou 2048 bits deve ser suficiente para isso.

É claro que não importa o quão sofisticada seu código é alguém sempre será capaz de quebrá-lo ou contorná-la. Então, a pergunta que você tem que se perguntar é o quão difícil que você quer torná-lo (tendo em mente esquemas mais difíceis são mais difíceis de código e manter para você)? Há um ponto de retornos decrescentes, o que normalmente é muito baixa. Enquanto o programa não funcionará sem uma chave, ea chave é complicada o suficiente para que você pode não falso (ou alterar a data de validade etc) com um editor hexadecimal, então você provavelmente estão bem.

Quanto refatoração o para fora a chave, escrevendo-o em força não gerenciado não ajuda se eles matam o site de chamada de gerenciado para não gerenciado. Uma opção que você tem com ofuscação se a sua utilização profissional Dotfuscator é para permitir a sua "detecção de sabotagem" essencialmente que marcar o seu conjunto e se alguém modifica você pode ter o seu código de fazer várias coisas. É claro que o hacker pode remover isso, mas a sua muito mais suor e lágrimas.

Eu só encontrei uma maneira de bloquear código muito bem. Quase todas as formas de validação de série pode ser quebrada facilmente pelo seu programador médio segunda-ano.

A maneira que eu tenho feito é usar um objeto de licenças no .NET. Dentro do meu objeto de licença home-grown, ele lê um arquivo de "licença" para descobrir onde "home" é. Esta licença é uma string encriptada. A chave privada para a cadeia está no objeto de licença.

O objeto Licença seguida, chama para casa com uma senha secreta, também criptografada. O servidor descriptografa a senha e valida-lo ... também registrar o nome de IP e usuário em caso de investigação de fraude. Se o servidor pode validar a senha, ele responde com uma resposta secreta, criptografado novamente para que ele não pode ser falsificado. Se ele não pode ser validado, a ligação é interrompida. Sem resposta é enviada, portanto, o objeto License na outra extremidade falha.

Quando o objeto Licença integrado falhar, ele vai jogar automaticamente uma exceção, forçando a aplicação a falhar e sair no ponto em que a licença é chamado.

Ele me levou cerca de dois dias de trabalho para escrever o servidor e o objeto de licença, por isso é um pouco de treino, mas não ciência do foguete.

Se você quiser alguma fonte de amostra, ou mais informações, me avise. Eu vou ser feliz para você o que eu posso.

Você pode querer dar uma olhada nas respostas a esta questão

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top