Pergunta

Estou trabalhando na criação de uma versão de teste totalmente funcional de um software.Agora, como não quero um teste limitado por tempo (como avaliação de 30 dias) ou funcionalidade limitada, seria bom usar o teste do 'número de vezes que um usuário pode executar o software'.

É um aplicativo .NET baseado em C# e estou tentando descobrir uma maneira de implementar isso.Tentei chaves de registro, rastreamento baseado em arquivos, etc., mas elas não parecem ser muito confiáveis.

Eu realmente apreciaria ajuda neste tópico.

Obrigado, Rohan

Foi útil?

Solução

As duas maneiras normais de controlar um período de teste são com uma chave de registro e com um serviço da web:

  • Chave do registro: Implemente algum método para persistir o número de inicializações de programas em uma chave no Registro do Windows, provavelmente com algum tipo de ofuscação.Um esquema de criptografia "salgado", onde você criptografa um esquema contendo seu valor mais algum valor dependente da máquina, como o endereço MAC da NIC, provavelmente funcionaria melhor;certifique-se de que seu código seja difícil de descompilar, usando algo como Dotfuscator.Seria melhor colocar a chave em alguns lugares usando o instalador, para que o programa possa simplesmente tratar a ausência da chave como uma tentativa de adulteração.

    Então, na inicialização, recupere a chave, descriptografe-a e inspecione-a.Se for o que você espera, adicione 1 ao valor, grave-o novamente no registro e, se o novo valor for maior que o número de inicializações permitidas, bloqueie o usuário.Se a chave de registro for um valor que você não espera (o que significa que eles a adulteraram), inclusive não estando presente, apenas bloqueie o usuário.

    A vantagem desta abordagem é que ela fornece uma segurança muito forte sem a necessidade da Internet.A desvantagem é que os detalhes "dependentes da máquina" podem mudar por motivos legítimos e, quando isso acontece, o usuário é bloqueado antes de usar todas as suas inicializações, o que pode frustrar os usuários.Além disso, sua implementação para salting e criptografia está presente no computador do usuário;um hacker sofisticado terá maneiras de examinar seu programa mesmo se você ofuscar o código, e poderá descobrir sua implementação e imitá-la para "reiniciar" o contador.Basta apenas um cara para fazer isso, e haverá um aplicativo Warez simples para permitir que qualquer outra pessoa faça isso.

  • Serviço de internet:Implemente um serviço WCF em um servidor que você controla.Bloqueie-o bem, de modo que a única maneira de entrar ou sair de fora da sua LAN seja através da porta WCF exatamente da maneira que o WCF espera.Agora implemente um cliente em seu programa e seu instalador.Na instalação, o instalador chamará um método de serviço informando que o software está sendo instalado em uma máquina com um endereço MAC ou ID de hardware específico.Se você não possui essa máquina exclusiva listada em seu banco de dados, adicione-a;caso contrário, não faça nada.Então, na inicialização do programa, chame o serviço web do seu programa, passe as mesmas informações, e o serviço web atualizará o número de inicializações e retornará um valor informando ao cliente se ele tem permissão para iniciar.

    A vantagem de um serviço web é que será muito difícil administrá-lo de uma forma que possa ser comercializado em massa via Warez;a principal forma de atacar tal sistema é hackear o servidor de licenças, ou então colocar um "intermediário" que possa redirecionar a solicitação do seu programa para o serviço web para um computador que ele controla.A desvantagem é que alterações no ID de hardware de um computador ainda podem causar bloqueios antecipados ou, pior, permitir uma solução alternativa, permitindo que o invasor simplesmente falsifique um novo endereço MAC ou ID de hardware que você nunca viu antes e reinstale o software, o que fornece o usuário um novo conjunto de partidas na "nova" máquina.Existem maneiras de evitar isso também, mas cada nível de ofuscação e verificação anti-hack que você adiciona é mais uma camada de complexidade.

Faça o que fizer, lembre-se da regra 80/20;80% dos seus usuários serão mantidos honestos pelas medidas mais básicas para proteger o processo de teste.20% dos seus usuários encontrarão uma maneira de contornar isso.Desses 20%, 80% deles serão frustrados por qualquer medida adicional que você implementar.Este processo é recursivo;a questão é que alguém, em algum lugar, IRÁ contornar quaisquer medidas que você implementar, mas se a matemática for válida, 96% dos seus usuários simplesmente cederão e pagarão pelo acesso total quando confrontados com uma chave de registro cifrada por shift e um programa ofuscado código.Você pode conseguir isso para 99,2% dos usuários adicionando qualquer outra coisa, como salgar a chave ofuscada com algo específico da máquina.

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